BsVertexDeclarationRTTI.h 2.1 KB

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