BsPassRTTI.h 3.6 KB

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