BsMeshDataRTTI.h 2.4 KB

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