BsVertexDeclarationRTTI.h 1.9 KB

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