+ /**
+ * @brief Sets the color mask for all channels.
+ */
+ virtual void SetColorMask(bool enabled) = 0;
+
+ /**
+ * @brief Clears the stencil buffer (outside of BeginRenderPass) to the current stencil mask
+ */
+ virtual void ClearStencilBuffer() = 0;
+
+ /**
+ * @brief Clears the depth buffer (outside of BeginRenderPass) to the current depth mask
+ */
+ virtual void ClearDepthBuffer() = 0;
+
+ /**
+ * @brief Enable or disable the stencil test
+ *
+ * @param[in] stencilEnable whether stencil test should be enabled
+ */
+ virtual void SetStencilTestEnable(bool stencilEnable) = 0;
+
+ /**
+ * @brief The mask used for writing to the stencil buffer.
+ *
+ * It should be as wide as necessary for the stencil texture format.
+ * @param[in] writeMask The mask for wriing to / clearing the stencil buffer
+ */
+ virtual void SetStencilWriteMask(uint32_t writeMask) = 0;
+
+ /**
+ * @brief Setup the stencil function
+ *
+ * @param[in] compareOp How the stencil buffer, reference and compareMask are combined to determine whether to draw a pixel or not.
+ * @param[in] reference A reference value that is ANDed with the mask in the compare op.
+ * @param[in] compareMask The bitplanes from the stencil buffer that are active.
+ */
+ virtual void SetStencilFunc(Graphics::CompareOp compareOp,
+ uint32_t reference,
+ uint32_t compareMask) = 0;
+
+ /**
+ * @brief Set how subsequent draws will affect the stencil buffer.
+ * @param[in] failOp What happens to stencil buffer if drawing a pixel fails the stencil test
+ * @param[in] passOp What happens to stencil buffer if drawing a pixel passes stencil & depth test
+ * @param[in] depthFailOp What happens to stencil buffer if drawing a pixel passes stencil but fails depth test.
+ */
+ virtual void SetStencilOp(Graphics::StencilOp failOp,
+ Graphics::StencilOp passOp,
+ Graphics::StencilOp depthFailOp) = 0;
+
+ /**
+ * @brief Defines the comparison operator for passing the depth test.
+ *
+ * @param[in] compareOp The comparison operator
+ */
+ virtual void SetDepthCompareOp(Graphics::CompareOp compareOp) = 0;
+
+ /**
+ * @brief Enables depth testing
+ *
+ * @param[in] depthTestEnable True if depth testing will be enabled.
+ */
+ virtual void SetDepthTestEnable(bool depthTestEnable) = 0;
+
+ /**
+ * @brief Enables depth writing / clearing
+ *
+ * @param[in] depthWriteEnabled True if the depth buffer can be updated or cleared.
+ */
+ virtual void SetDepthWriteEnable(bool depthWriteEnable) = 0;
+