BsMeshBase.cpp 2.7 KB

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