BsTechniqueRTTI.h 1.6 KB

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