BsVertexDeclarationRTTI.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsVertexBuffer.h"
  5. #include "BsHardwareBufferManager.h"
  6. namespace BansheeEngine
  7. {
  8. class VertexDeclarationRTTI : public RTTIType<VertexDeclaration, IReflectable, VertexDeclarationRTTI>
  9. {
  10. private:
  11. VertexElement& getElement(VertexDeclaration* obj, UINT32 idx)
  12. {
  13. List<VertexElement>& elemList = obj->mProperties.mElementList;
  14. auto iter = elemList.begin();
  15. for(UINT32 i = 0; i < idx; i++)
  16. ++iter;
  17. return *iter;
  18. }
  19. void setElement(VertexDeclaration* obj, UINT32 idx, VertexElement& data)
  20. {
  21. List<VertexElement>& elemList = obj->mProperties.mElementList;
  22. auto iter = elemList.begin();
  23. for(UINT32 i = 0; i < idx; i++)
  24. ++iter;
  25. *iter = data;
  26. }
  27. UINT32 getElementArraySize(VertexDeclaration* obj)
  28. {
  29. List<VertexElement>& elemList = obj->mProperties.mElementList;
  30. return (UINT32)elemList.size();
  31. }
  32. void setElementArraySize(VertexDeclaration* obj, UINT32 size)
  33. {
  34. List<VertexElement>& elemList = obj->mProperties.mElementList;
  35. for (size_t i = elemList.size(); i < size; i++)
  36. elemList.push_back(VertexElement());
  37. }
  38. public:
  39. VertexDeclarationRTTI()
  40. {
  41. addPlainArrayField("mElementList", 0, &VertexDeclarationRTTI::getElement, &VertexDeclarationRTTI::getElementArraySize,
  42. &VertexDeclarationRTTI::setElement, &VertexDeclarationRTTI::setElementArraySize);
  43. }
  44. virtual std::shared_ptr<IReflectable> newRTTIObject()
  45. {
  46. return HardwareBufferManager::instance().createVertexDeclaration(List<VertexElement>());
  47. }
  48. virtual const String& getRTTIName()
  49. {
  50. static String name = "VertexDeclaration";
  51. throw name;
  52. }
  53. virtual UINT32 getRTTIId()
  54. {
  55. return TID_VertexDeclaration;
  56. }
  57. };
  58. }