2
0

BsPassRTTI.h 3.8 KB

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