CmMeshBaseRTTI.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include "CmPrerequisites.h"
  3. #include "CmRTTIType.h"
  4. #include "CmApplication.h"
  5. #include "CmMeshBase.h"
  6. #include "CmException.h"
  7. namespace CamelotFramework
  8. {
  9. CM_ALLOW_MEMCPY_SERIALIZATION(SubMesh);
  10. class MeshBaseRTTI : public RTTIType<MeshBase, GpuResource, MeshBaseRTTI>
  11. {
  12. SubMesh& getSubMesh(MeshBase* obj, UINT32 arrayIdx) { return obj->mSubMeshes[arrayIdx]; }
  13. void setSubMesh(MeshBase* obj, UINT32 arrayIdx, SubMesh& value) { obj->mSubMeshes[arrayIdx] = value; }
  14. UINT32 getNumSubmeshes(MeshBase* obj) { return (UINT32)obj->mSubMeshes.size(); }
  15. void setNumSubmeshes(MeshBase* obj, UINT32 numElements) { obj->mSubMeshes.resize(numElements); }
  16. SubMesh& getDefaultSubMesh(MeshBase* obj) { return obj->mDefaultSubMesh; }
  17. void setDefaultSubMesh(MeshBase* obj, SubMesh& value) { obj->mDefaultSubMesh = value; }
  18. UINT32& getNumVertices(MeshBase* obj) { return obj->mNumVertices; }
  19. void setNumVertices(MeshBase* obj, UINT32& value) { obj->mNumVertices = value; }
  20. UINT32& getNumIndices(MeshBase* obj) { return obj->mNumIndices; }
  21. void setNumIndices(MeshBase* obj, UINT32& value) { obj->mNumIndices = value; }
  22. public:
  23. MeshBaseRTTI()
  24. {
  25. addPlainField("mNumVertices", 0, &MeshBaseRTTI::getNumVertices, &MeshBaseRTTI::setNumVertices);
  26. addPlainField("mNumIndices", 1, &MeshBaseRTTI::getNumIndices, &MeshBaseRTTI::setNumIndices);
  27. addPlainArrayField("mSubMeshes", 2, &MeshBaseRTTI::getSubMesh,
  28. &MeshBaseRTTI::getNumSubmeshes, &MeshBaseRTTI::setSubMesh, &MeshBaseRTTI::setNumSubmeshes);
  29. addPlainField("mDefaultSubMesh", 3, &MeshBaseRTTI::getDefaultSubMesh, &MeshBaseRTTI::setDefaultSubMesh);
  30. }
  31. virtual std::shared_ptr<IReflectable> newRTTIObject()
  32. {
  33. CM_EXCEPT(InternalErrorException, "Cannot instantiate an abstract class.");
  34. }
  35. virtual const String& getRTTIName()
  36. {
  37. static String name = "MeshBase";
  38. throw name;
  39. }
  40. virtual UINT32 getRTTIId()
  41. {
  42. return TID_MeshBase;
  43. }
  44. };
  45. }