BsMeshBase.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Mesh/BsMeshBase.h"
  4. #include "Private/RTTI/BsMeshBaseRTTI.h"
  5. #include "CoreThread/BsCoreThread.h"
  6. namespace bs
  7. {
  8. MeshProperties::MeshProperties()
  9. :mNumVertices(0), mNumIndices(0)
  10. {
  11. mSubMeshes.reserve(10);
  12. }
  13. MeshProperties::MeshProperties(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  14. :mNumVertices(numVertices), mNumIndices(numIndices)
  15. {
  16. mSubMeshes.push_back(SubMesh(0, numIndices, drawOp));
  17. }
  18. MeshProperties::MeshProperties(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  19. :mNumVertices(numVertices), mNumIndices(numIndices)
  20. {
  21. mSubMeshes = subMeshes;
  22. }
  23. const SubMesh& MeshProperties::getSubMesh(UINT32 subMeshIdx) const
  24. {
  25. if (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. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  37. :mProperties(numVertices, numIndices, drawOp)
  38. { }
  39. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  40. :mProperties(numVertices, numIndices, subMeshes)
  41. { }
  42. MeshBase::~MeshBase()
  43. { }
  44. CoreSyncData MeshBase::syncToCore(FrameAlloc* allocator)
  45. {
  46. UINT32 size = sizeof(Bounds);
  47. UINT8* buffer = allocator->alloc(size);
  48. memcpy(buffer, &mProperties.mBounds, size);
  49. return CoreSyncData(buffer, size);
  50. }
  51. SPtr<ct::MeshBase> MeshBase::getCore() const
  52. {
  53. return std::static_pointer_cast<ct::MeshBase>(mCoreSpecific);
  54. }
  55. /************************************************************************/
  56. /* SERIALIZATION */
  57. /************************************************************************/
  58. RTTITypeBase* MeshBase::getRTTIStatic()
  59. {
  60. return MeshBaseRTTI::instance();
  61. }
  62. RTTITypeBase* MeshBase::getRTTI() const
  63. {
  64. return MeshBase::getRTTIStatic();
  65. }
  66. namespace ct
  67. {
  68. MeshBase::MeshBase(UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  69. :mProperties(numVertices, numIndices, subMeshes)
  70. { }
  71. void MeshBase::syncToCore(const CoreSyncData& data)
  72. {
  73. mProperties.mBounds = data.getData<Bounds>();
  74. }
  75. }
  76. }