BsVertexDeclarationRTTI.h 2.1 KB

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