BsMeshDataRTTI.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsMeshData.h"
  7. #include "BsManagedDataBlock.h"
  8. #include "BsVertexDeclaration.h"
  9. namespace BansheeEngine
  10. {
  11. /** @cond RTTI */
  12. /** @addtogroup RTTI-Impl-Core
  13. * @{
  14. */
  15. BS_ALLOW_MEMCPY_SERIALIZATION(IndexType);
  16. class BS_CORE_EXPORT MeshDataRTTI : public RTTIType<MeshData, GpuResourceData, MeshDataRTTI>
  17. {
  18. private:
  19. VertexDataDescPtr getVertexData(MeshData* obj) { return obj->mVertexData; }
  20. void setVertexData(MeshData* obj, VertexDataDescPtr value) { obj->mVertexData = value; }
  21. IndexType& getIndexType(MeshData* obj) { return obj->mIndexType; }
  22. void setIndexType(MeshData* obj, IndexType& value) { obj->mIndexType = value; }
  23. UINT32& getNumVertices(MeshData* obj) { return obj->mNumVertices; }
  24. void setNumVertices(MeshData* obj, UINT32& value) { obj->mNumVertices = value; }
  25. UINT32& getNumIndices(MeshData* obj) { return obj->mNumIndices; }
  26. void setNumIndices(MeshData* obj, UINT32& value) { obj->mNumIndices = value; }
  27. ManagedDataBlock getData(MeshData* obj)
  28. {
  29. ManagedDataBlock dataBlock((UINT8*)obj->getData(), obj->getInternalBufferSize());
  30. return dataBlock;
  31. }
  32. void setData(MeshData* obj, ManagedDataBlock val)
  33. {
  34. // Nothing to do here, the pointer we provided already belongs to PixelData
  35. // so the data is already written
  36. }
  37. static UINT8* allocateData(MeshData* obj, UINT32 numBytes)
  38. {
  39. obj->allocateInternalBuffer(numBytes);
  40. return obj->getData();
  41. }
  42. public:
  43. MeshDataRTTI()
  44. {
  45. addReflectablePtrField("mVertexData", 0, &MeshDataRTTI::getVertexData, &MeshDataRTTI::setVertexData);
  46. addPlainField("mIndexType", 1, &MeshDataRTTI::getIndexType, &MeshDataRTTI::setIndexType);
  47. addPlainField("mNumVertices", 2, &MeshDataRTTI::getNumVertices, &MeshDataRTTI::setNumVertices);
  48. addPlainField("mNumIndices", 3, &MeshDataRTTI::getNumIndices, &MeshDataRTTI::setNumIndices);
  49. addDataBlockField("data", 4, &MeshDataRTTI::getData, &MeshDataRTTI::setData, 0, &MeshDataRTTI::allocateData);
  50. }
  51. std::shared_ptr<IReflectable> newRTTIObject() override
  52. {
  53. return bs_shared_ptr<MeshData>(new (bs_alloc<MeshData>()) MeshData());
  54. }
  55. const String& getRTTIName() override
  56. {
  57. static String name = "MeshData";
  58. throw name;
  59. }
  60. UINT32 getRTTIId() override
  61. {
  62. return TID_MeshData;
  63. }
  64. };
  65. /** @} */
  66. /** @endcond */
  67. }