2
0

BsMeshBase.cpp 2.6 KB

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