BsMeshDataRTTI.h 2.3 KB

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