BsMeshBase.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "BsMeshBase.h"
  2. #include "BsMeshBaseRTTI.h"
  3. #include "BsCoreThread.h"
  4. #include "BsFrameAlloc.h"
  5. #include "BsDebug.h"
  6. namespace BansheeEngine
  7. {
  8. MeshProperties::MeshProperties()
  9. :mNumIndices(0), mNumVertices(0)
  10. {
  11. mSubMeshes.reserve(10);
  12. }
  13. MeshProperties::MeshProperties(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  14. :mNumIndices(numIndices), mNumVertices(numVertices)
  15. {
  16. mSubMeshes.push_back(SubMesh(0, numIndices, drawOp));
  17. }
  18. MeshProperties::MeshProperties(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  19. :mNumIndices(numIndices), mNumVertices(numVertices)
  20. {
  21. mSubMeshes = subMeshes;
  22. }
  23. const SubMesh& MeshProperties::getSubMesh(UINT32 subMeshIdx) const
  24. {
  25. if (subMeshIdx < 0 || subMeshIdx >= mSubMeshes.size())
  26. {
  27. BS_EXCEPT(InvalidParametersException, "Invalid sub-mesh index ("
  28. + toString(subMeshIdx) + "). Number of sub-meshes available: " + toString((int)mSubMeshes.size()));
  29. }
  30. return mSubMeshes[subMeshIdx];
  31. }
  32. UINT32 MeshProperties::getNumSubMeshes() const
  33. {
  34. return (UINT32)mSubMeshes.size();
  35. }
  36. MeshCoreBase::MeshCoreBase(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  37. :mProperties(numVertices, numIndices, subMeshes)
  38. { }
  39. CoreSyncData MeshCoreBase::syncFromCore(FrameAlloc* allocator)
  40. {
  41. UINT32 size = sizeof(Bounds);
  42. UINT8* buffer = allocator->alloc(size);
  43. memcpy(buffer, &mProperties.mBounds, size);
  44. return CoreSyncData(buffer, size);
  45. }
  46. void MeshCoreBase::syncToCore(const CoreSyncData& data)
  47. {
  48. mProperties.mBounds = data.getData<Bounds>();
  49. }
  50. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  51. :mProperties(numVertices, numIndices, drawOp)
  52. { }
  53. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  54. :mProperties(numVertices, numIndices, subMeshes)
  55. { }
  56. MeshBase::~MeshBase()
  57. { }
  58. CoreSyncData MeshBase::syncToCore(FrameAlloc* allocator)
  59. {
  60. UINT32 size = sizeof(Bounds);
  61. UINT8* buffer = allocator->alloc(size);
  62. memcpy(buffer, &mProperties.mBounds, size);
  63. return CoreSyncData(buffer, size);
  64. }
  65. void MeshBase::syncFromCore(const CoreSyncData& data)
  66. {
  67. mProperties.mBounds = data.getData<Bounds>();
  68. }
  69. SPtr<MeshCoreBase> MeshBase::getCore() const
  70. {
  71. return std::static_pointer_cast<MeshCoreBase>(mCoreSpecific);
  72. }
  73. /************************************************************************/
  74. /* SERIALIZATION */
  75. /************************************************************************/
  76. RTTITypeBase* MeshBase::getRTTIStatic()
  77. {
  78. return MeshBaseRTTI::instance();
  79. }
  80. RTTITypeBase* MeshBase::getRTTI() const
  81. {
  82. return MeshBase::getRTTIStatic();
  83. }
  84. }