BsMeshDataRTTI.h 2.6 KB

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