BsPassRTTI.h 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. UINT32& getStencilRefValue(Pass* obj) { return obj->mData.stencilRefValue; }
  17. void setStencilRefValue(Pass* obj, UINT32& val) { obj->mData.stencilRefValue = val; }
  18. GpuProgramPtr getVertexProgram(Pass* obj) { return obj->mData.vertexProgram; }
  19. void setVertexProgram(Pass* obj, GpuProgramPtr val) { obj->mData.vertexProgram = val; }
  20. GpuProgramPtr getFragmentProgram(Pass* obj) { return obj->mData.fragmentProgram; }
  21. void setFragmentProgram(Pass* obj, GpuProgramPtr val) { obj->mData.fragmentProgram = val; }
  22. GpuProgramPtr getGeometryProgram(Pass* obj) { return obj->mData.geometryProgram; }
  23. void setGeometryProgram(Pass* obj, GpuProgramPtr val) { obj->mData.geometryProgram = val; }
  24. GpuProgramPtr getHullProgram(Pass* obj) { return obj->mData.hullProgram; }
  25. void setHullProgram(Pass* obj, GpuProgramPtr val) { obj->mData.hullProgram = val; }
  26. GpuProgramPtr getDomainProgram(Pass* obj) { return obj->mData.domainProgram; }
  27. void setDomainProgram(Pass* obj, GpuProgramPtr val) { obj->mData.domainProgram = val; }
  28. GpuProgramPtr getComputeProgram(Pass* obj) { return obj->mData.computeProgram; }
  29. void setComputeProgram(Pass* obj, GpuProgramPtr val) { obj->mData.computeProgram = val; }
  30. public:
  31. PassRTTI()
  32. {
  33. addReflectablePtrField("mBlendState", 0, &PassRTTI::getBlendState, &PassRTTI::setBlendState);
  34. addReflectablePtrField("mRasterizerState", 1, &PassRTTI::getRasterizerState, &PassRTTI::setRasterizerState);
  35. addReflectablePtrField("mDepthStencilState", 2, &PassRTTI::getDepthStencilState, &PassRTTI::setDepthStencilState);
  36. addReflectablePtrField("mVertexProgram", 3, &PassRTTI::getVertexProgram, &PassRTTI::setVertexProgram);
  37. addReflectablePtrField("mFragmentProgram", 4, &PassRTTI::getFragmentProgram, &PassRTTI::setFragmentProgram);
  38. addReflectablePtrField("mGeometryProgram", 5, &PassRTTI::getGeometryProgram, &PassRTTI::setGeometryProgram);
  39. addReflectablePtrField("mHullProgram", 6, &PassRTTI::getHullProgram, &PassRTTI::setHullProgram);
  40. addReflectablePtrField("mDomainProgram", 7, &PassRTTI::getDomainProgram, &PassRTTI::setDomainProgram);
  41. addReflectablePtrField("mComputeProgram", 8, &PassRTTI::getComputeProgram, &PassRTTI::setComputeProgram);
  42. addPlainField("mStencilRefValue", 9, &PassRTTI::getStencilRefValue, &PassRTTI::setStencilRefValue);
  43. }
  44. virtual void onDeserializationEnded(IReflectable* obj)
  45. {
  46. Pass* pass = static_cast<Pass*>(obj);
  47. pass->initialize();
  48. }
  49. virtual const String& getRTTIName()
  50. {
  51. static String name = "Pass";
  52. return name;
  53. }
  54. virtual UINT32 getRTTIId()
  55. {
  56. return TID_Pass;
  57. }
  58. virtual std::shared_ptr<IReflectable> newRTTIObject()
  59. {
  60. return Pass::createEmpty();
  61. }
  62. };
  63. }