CmDepthStencilState.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include "CmPrerequisites.h"
  3. #include "CmCommonEnums.h"
  4. #include "CmResource.h"
  5. namespace CamelotFramework
  6. {
  7. struct CM_EXPORT DEPTH_STENCIL_STATE_DESC
  8. {
  9. DEPTH_STENCIL_STATE_DESC()
  10. : depthReadEnable(true)
  11. , depthWriteEnable(true)
  12. , depthComparisonFunc(CMPF_LESS)
  13. , stencilEnable(false)
  14. , stencilReadMask(0xFF)
  15. , stencilWriteMask(0xFF)
  16. , frontStencilFailOp(SOP_KEEP)
  17. , frontStencilZFailOp(SOP_KEEP)
  18. , frontStencilPassOp(SOP_KEEP)
  19. , frontStencilComparisonFunc(CMPF_ALWAYS_PASS)
  20. , backStencilFailOp(SOP_KEEP)
  21. , backStencilZFailOp(SOP_KEEP)
  22. , backStencilPassOp(SOP_KEEP)
  23. , backStencilComparisonFunc(CMPF_ALWAYS_PASS)
  24. { }
  25. bool depthReadEnable;
  26. bool depthWriteEnable;
  27. CompareFunction depthComparisonFunc;
  28. bool stencilEnable;
  29. UINT8 stencilReadMask;
  30. UINT8 stencilWriteMask;
  31. StencilOperation frontStencilFailOp;
  32. StencilOperation frontStencilZFailOp;
  33. StencilOperation frontStencilPassOp;
  34. CompareFunction frontStencilComparisonFunc;
  35. StencilOperation backStencilFailOp;
  36. StencilOperation backStencilZFailOp;
  37. StencilOperation backStencilPassOp;
  38. CompareFunction backStencilComparisonFunc;
  39. };
  40. CM_ALLOW_MEMCPY_SERIALIZATION(DEPTH_STENCIL_STATE_DESC);
  41. // TODO Low priority - Write doc explaining various states
  42. class CM_EXPORT DepthStencilState : public Resource
  43. {
  44. public:
  45. virtual ~DepthStencilState() {}
  46. bool getDepthReadEnable() const { return mData.depthReadEnable; }
  47. bool getDepthWriteEnable() const { return mData.depthWriteEnable; }
  48. CompareFunction getDepthComparisonFunc() const { return mData.depthComparisonFunc; }
  49. bool getStencilEnable() const { return mData.stencilEnable; }
  50. UINT8 getStencilReadMask() const { return mData.stencilReadMask; }
  51. UINT8 getStencilWriteMask() const { return mData.stencilWriteMask; }
  52. StencilOperation getStencilFrontFailOp() const { return mData.frontStencilFailOp; }
  53. StencilOperation getStencilFrontZFailOp() const { return mData.frontStencilZFailOp; }
  54. StencilOperation getStencilFrontPassOp() const { return mData.frontStencilPassOp; }
  55. CompareFunction getStencilFrontCompFunc() const { return mData.frontStencilComparisonFunc; }
  56. StencilOperation getStencilBackFailOp() const { return mData.backStencilFailOp; }
  57. StencilOperation getStencilBackZFailOp() const { return mData.backStencilZFailOp; }
  58. StencilOperation getStencilBackPassOp() const { return mData.backStencilPassOp; }
  59. CompareFunction getStencilBackCompFunc() const { return mData.backStencilComparisonFunc; }
  60. static HDepthStencilState create(const DEPTH_STENCIL_STATE_DESC& desc);
  61. /**
  62. * @brief Returns the default depth stencil state;
  63. */
  64. static const DepthStencilStatePtr& getDefault();
  65. protected:
  66. friend class RenderStateManager;
  67. virtual void initialize(const DEPTH_STENCIL_STATE_DESC& desc);
  68. DEPTH_STENCIL_STATE_DESC mData;
  69. /************************************************************************/
  70. /* RTTI */
  71. /************************************************************************/
  72. public:
  73. friend class DepthStencilStateRTTI;
  74. static RTTITypeBase* getRTTIStatic();
  75. virtual RTTITypeBase* getRTTI() const;
  76. };
  77. }