BsTechniqueRTTI.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 "BsTechnique.h"
  7. namespace BansheeEngine
  8. {
  9. /** @cond RTTI */
  10. /** @addtogroup RTTI-Impl-Core
  11. * @{
  12. */
  13. class BS_CORE_EXPORT TechniqueRTTI : public RTTIType<Technique, IReflectable, TechniqueRTTI>
  14. {
  15. private:
  16. StringID& getRenderAPI(Technique* obj) { return obj->mRenderAPI; }
  17. void setRenderAPI(Technique* obj, StringID& val) { obj->mRenderAPI = val; }
  18. StringID& getRenderer(Technique* obj) { return obj->mRenderer; }
  19. void setRenderer(Technique* obj, StringID& val) { obj->mRenderer = val; }
  20. SPtr<Pass> getPass(Technique* obj, UINT32 idx) { return obj->mPasses[idx]; }
  21. void setPass(Technique* obj, UINT32 idx, SPtr<Pass> val) { obj->mPasses[idx] = val; }
  22. UINT32 getPassArraySize(Technique* obj) { return (UINT32)obj->mPasses.size(); }
  23. void setPassArraySize(Technique* obj, UINT32 size) { obj->mPasses.resize(size); }
  24. public:
  25. TechniqueRTTI()
  26. {
  27. addPlainField("mRenderAPI", 0, &TechniqueRTTI::getRenderAPI, &TechniqueRTTI::setRenderAPI);
  28. addPlainField("mRenderer", 1, &TechniqueRTTI::getRenderer, &TechniqueRTTI::setRenderer);
  29. addReflectablePtrArrayField("mPasses", 2, &TechniqueRTTI::getPass, &TechniqueRTTI::getPassArraySize, &TechniqueRTTI::setPass, &TechniqueRTTI::setPassArraySize);
  30. }
  31. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  32. {
  33. Technique* technique = static_cast<Technique*>(obj);
  34. technique->initialize();
  35. }
  36. const String& getRTTIName() override
  37. {
  38. static String name = "Technique";
  39. return name;
  40. }
  41. UINT32 getRTTIId() override
  42. {
  43. return TID_Technique;
  44. }
  45. SPtr<IReflectable> newRTTIObject() override
  46. {
  47. return Technique::createEmpty();
  48. }
  49. };
  50. /** @} */
  51. /** @endcond */
  52. }