BsMeshRTTI.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsCoreApplication.h"
  5. #include "BsMesh.h"
  6. #include "BsMeshManager.h"
  7. #include "BsCoreThread.h"
  8. namespace BansheeEngine
  9. {
  10. class MeshRTTI : public RTTIType<Mesh, MeshBase, MeshRTTI>
  11. {
  12. VertexDataDescPtr getVertexDesc(Mesh* obj) { return obj->mVertexDesc; }
  13. void setVertexDesc(Mesh* obj, VertexDataDescPtr value) { obj->mVertexDesc = value; }
  14. IndexType& getIndexType(Mesh* obj) { return obj->mIndexType; }
  15. void setIndexType(Mesh* obj, IndexType& value) { obj->mIndexType = value; }
  16. int& getBufferType(Mesh* obj) { return (int&)obj->mUsage; }
  17. void setBufferType(Mesh* obj, int& value) { obj->mUsage = value; }
  18. MeshDataPtr getMeshData(Mesh* obj)
  19. {
  20. MeshDataPtr meshData = obj->allocateSubresourceBuffer(0);
  21. obj->readSubresource(gCoreAccessor(), 0, meshData);
  22. gCoreAccessor().submitToCoreThread(true);
  23. return meshData;
  24. }
  25. void setMeshData(Mesh* obj, MeshDataPtr meshData)
  26. {
  27. obj->mCPUData = meshData;
  28. }
  29. public:
  30. MeshRTTI()
  31. {
  32. addReflectablePtrField("mVertexDesc", 0, &MeshRTTI::getVertexDesc, &MeshRTTI::setVertexDesc);
  33. addPlainField("mIndexType", 1, &MeshRTTI::getIndexType, &MeshRTTI::setIndexType);
  34. addPlainField("mUsage", 2, &MeshRTTI::getBufferType, &MeshRTTI::setBufferType);
  35. addReflectablePtrField("mMeshData", 3, &MeshRTTI::getMeshData, &MeshRTTI::setMeshData);
  36. }
  37. virtual void onDeserializationEnded(IReflectable* obj)
  38. {
  39. Mesh* mesh = static_cast<Mesh*>(obj);
  40. mesh->initialize();
  41. }
  42. virtual std::shared_ptr<IReflectable> newRTTIObject()
  43. {
  44. return MeshManager::instance().createEmpty();
  45. }
  46. virtual const String& getRTTIName()
  47. {
  48. static String name = "Mesh";
  49. throw name;
  50. }
  51. virtual UINT32 getRTTIId()
  52. {
  53. return TID_Mesh;
  54. }
  55. };
  56. }