BsMeshRTTI.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-Core
  12. * @{
  13. */
  14. class MeshRTTI : public RTTIType<Mesh, MeshBase, MeshRTTI>
  15. {
  16. VertexDataDescPtr getVertexDesc(Mesh* obj) { return obj->mVertexDesc; }
  17. void setVertexDesc(Mesh* obj, VertexDataDescPtr value) { obj->mVertexDesc = value; }
  18. IndexType& getIndexType(Mesh* obj) { return obj->mIndexType; }
  19. void setIndexType(Mesh* obj, IndexType& value) { obj->mIndexType = value; }
  20. int& getBufferType(Mesh* obj) { return (int&)obj->mUsage; }
  21. void setBufferType(Mesh* obj, int& value) { obj->mUsage = value; }
  22. MeshDataPtr getMeshData(Mesh* obj)
  23. {
  24. MeshDataPtr meshData = obj->allocateSubresourceBuffer(0);
  25. obj->readSubresource(gCoreAccessor(), 0, meshData);
  26. gCoreAccessor().submitToCoreThread(true);
  27. return meshData;
  28. }
  29. void setMeshData(Mesh* obj, MeshDataPtr meshData)
  30. {
  31. obj->mCPUData = meshData;
  32. }
  33. public:
  34. MeshRTTI()
  35. {
  36. addReflectablePtrField("mVertexDesc", 0, &MeshRTTI::getVertexDesc, &MeshRTTI::setVertexDesc);
  37. addPlainField("mIndexType", 1, &MeshRTTI::getIndexType, &MeshRTTI::setIndexType);
  38. addPlainField("mUsage", 2, &MeshRTTI::getBufferType, &MeshRTTI::setBufferType);
  39. addReflectablePtrField("mMeshData", 3, &MeshRTTI::getMeshData, &MeshRTTI::setMeshData);
  40. }
  41. void onDeserializationEnded(IReflectable* obj) override
  42. {
  43. Mesh* mesh = static_cast<Mesh*>(obj);
  44. mesh->initialize();
  45. }
  46. std::shared_ptr<IReflectable> newRTTIObject() override
  47. {
  48. return MeshManager::instance().createEmpty();
  49. }
  50. const String& getRTTIName() override
  51. {
  52. static String name = "Mesh";
  53. throw name;
  54. }
  55. UINT32 getRTTIId() override
  56. {
  57. return TID_Mesh;
  58. }
  59. };
  60. /** @} */
  61. /** @endcond */
  62. }