BsTechniqueRTTI.h 1.8 KB

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