2
0

BsMeshBase.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. void MeshCoreBase::syncToCore(const CoreSyncData& data)
  40. {
  41. mProperties.mBounds = data.getData<Bounds>();
  42. }
  43. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  44. :mProperties(numVertices, numIndices, drawOp)
  45. { }
  46. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  47. :mProperties(numVertices, numIndices, subMeshes)
  48. { }
  49. MeshBase::~MeshBase()
  50. { }
  51. CoreSyncData MeshBase::syncToCore(FrameAlloc* allocator)
  52. {
  53. UINT32 size = sizeof(Bounds);
  54. UINT8* buffer = allocator->alloc(size);
  55. memcpy(buffer, &mProperties.mBounds, size);
  56. return CoreSyncData(buffer, size);
  57. }
  58. SPtr<MeshCoreBase> MeshBase::getCore() const
  59. {
  60. return std::static_pointer_cast<MeshCoreBase>(mCoreSpecific);
  61. }
  62. /************************************************************************/
  63. /* SERIALIZATION */
  64. /************************************************************************/
  65. RTTITypeBase* MeshBase::getRTTIStatic()
  66. {
  67. return MeshBaseRTTI::instance();
  68. }
  69. RTTITypeBase* MeshBase::getRTTI() const
  70. {
  71. return MeshBase::getRTTIStatic();
  72. }
  73. }