BsMeshBaseRTTI.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 "BsCoreApplication.h"
  8. #include "BsMeshBase.h"
  9. #include "BsException.h"
  10. namespace BansheeEngine
  11. {
  12. BS_ALLOW_MEMCPY_SERIALIZATION(SubMesh);
  13. class MeshBaseRTTI : public RTTIType<MeshBase, GpuResource, MeshBaseRTTI>
  14. {
  15. SubMesh& getSubMesh(MeshBase* obj, UINT32 arrayIdx) { return obj->mSubMeshes[arrayIdx]; }
  16. void setSubMesh(MeshBase* obj, UINT32 arrayIdx, SubMesh& value) { obj->mSubMeshes[arrayIdx] = value; }
  17. UINT32 getNumSubmeshes(MeshBase* obj) { return (UINT32)obj->mSubMeshes.size(); }
  18. void setNumSubmeshes(MeshBase* obj, UINT32 numElements) { obj->mSubMeshes.resize(numElements); obj->mActiveProxies.resize(numElements); }
  19. UINT32& getNumVertices(MeshBase* obj) { return obj->mNumVertices; }
  20. void setNumVertices(MeshBase* obj, UINT32& value) { obj->mNumVertices = value; }
  21. UINT32& getNumIndices(MeshBase* obj) { return obj->mNumIndices; }
  22. void setNumIndices(MeshBase* obj, UINT32& value) { obj->mNumIndices = value; }
  23. public:
  24. MeshBaseRTTI()
  25. {
  26. addPlainField("mNumVertices", 0, &MeshBaseRTTI::getNumVertices, &MeshBaseRTTI::setNumVertices);
  27. addPlainField("mNumIndices", 1, &MeshBaseRTTI::getNumIndices, &MeshBaseRTTI::setNumIndices);
  28. addPlainArrayField("mSubMeshes", 2, &MeshBaseRTTI::getSubMesh,
  29. &MeshBaseRTTI::getNumSubmeshes, &MeshBaseRTTI::setSubMesh, &MeshBaseRTTI::setNumSubmeshes);
  30. }
  31. virtual std::shared_ptr<IReflectable> newRTTIObject()
  32. {
  33. BS_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. }