BsPassRTTI.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsPass.h"
  5. namespace BansheeEngine
  6. {
  7. class BS_CORE_EXPORT PassRTTI : public RTTIType<Pass, IReflectable, PassRTTI>
  8. {
  9. private:
  10. BlendStatePtr getBlendState(Pass* obj) { return obj->mData.blendState; }
  11. void setBlendState(Pass* obj, BlendStatePtr val) { obj->mData.blendState = val; }
  12. RasterizerStatePtr getRasterizerState(Pass* obj) { return obj->mData.rasterizerState; }
  13. void setRasterizerState(Pass* obj, RasterizerStatePtr val) { obj->mData.rasterizerState = val; }
  14. DepthStencilStatePtr getDepthStencilState(Pass* obj) { return obj->mData.depthStencilState; }
  15. void setDepthStencilState(Pass* obj, DepthStencilStatePtr val) { obj->mData.depthStencilState = val; }
  16. GpuProgramPtr getVertexProgram(Pass* obj) { return obj->mData.vertexProgram; }
  17. void setVertexProgram(Pass* obj, GpuProgramPtr val) { obj->mData.vertexProgram = val; }
  18. GpuProgramPtr getFragmentProgram(Pass* obj) { return obj->mData.fragmentProgram; }
  19. void setFragmentProgram(Pass* obj, GpuProgramPtr val) { obj->mData.fragmentProgram = val; }
  20. GpuProgramPtr getGeometryProgram(Pass* obj) { return obj->mData.geometryProgram; }
  21. void setGeometryProgram(Pass* obj, GpuProgramPtr val) { obj->mData.geometryProgram = val; }
  22. GpuProgramPtr getHullProgram(Pass* obj) { return obj->mData.hullProgram; }
  23. void setHullProgram(Pass* obj, GpuProgramPtr val) { obj->mData.hullProgram = val; }
  24. GpuProgramPtr getDomainProgram(Pass* obj) { return obj->mData.domainProgram; }
  25. void setDomainProgram(Pass* obj, GpuProgramPtr val) { obj->mData.domainProgram = val; }
  26. GpuProgramPtr getComputeProgram(Pass* obj) { return obj->mData.computeProgram; }
  27. void setComputeProgram(Pass* obj, GpuProgramPtr val) { obj->mData.computeProgram = val; }
  28. public:
  29. PassRTTI()
  30. {
  31. addReflectablePtrField("mBlendState", 0, &PassRTTI::getBlendState, &PassRTTI::setBlendState);
  32. addReflectablePtrField("mRasterizerState", 1, &PassRTTI::getRasterizerState, &PassRTTI::setRasterizerState);
  33. addReflectablePtrField("mDepthStencilState", 2, &PassRTTI::getDepthStencilState, &PassRTTI::setDepthStencilState);
  34. addReflectablePtrField("mVertexProgram", 3, &PassRTTI::getVertexProgram, &PassRTTI::setVertexProgram);
  35. addReflectablePtrField("mFragmentProgram", 4, &PassRTTI::getFragmentProgram, &PassRTTI::setFragmentProgram);
  36. addReflectablePtrField("mGeometryProgram", 5, &PassRTTI::getGeometryProgram, &PassRTTI::setGeometryProgram);
  37. addReflectablePtrField("mHullProgram", 6, &PassRTTI::getHullProgram, &PassRTTI::setHullProgram);
  38. addReflectablePtrField("mDomainProgram", 7, &PassRTTI::getDomainProgram, &PassRTTI::setDomainProgram);
  39. addReflectablePtrField("mComputeProgram", 8, &PassRTTI::getComputeProgram, &PassRTTI::setComputeProgram);
  40. }
  41. virtual void onDeserializationEnded(IReflectable* obj)
  42. {
  43. Pass* pass = static_cast<Pass*>(obj);
  44. pass->initialize();
  45. }
  46. virtual const String& getRTTIName()
  47. {
  48. static String name = "Pass";
  49. return name;
  50. }
  51. virtual UINT32 getRTTIId()
  52. {
  53. return TID_Pass;
  54. }
  55. virtual std::shared_ptr<IReflectable> newRTTIObject()
  56. {
  57. return Pass::createEmpty();
  58. }
  59. };
  60. }