3 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGL
5 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLES
6 using OpenTK.Graphics.ES30;
8 using OpenTK.Graphics.OpenGL;
11 namespace SiliconStudio.
Paradox.Graphics
13 public partial class DepthStencilState
15 private DepthFunction depthFunction;
17 private DepthStencilState(GraphicsDevice device, DepthStencilStateDescription depthStencilStateDescription)
20 Description = depthStencilStateDescription;
22 depthFunction = Description.DepthBufferFunction.ToOpenGLDepthFunction();
26 protected internal override bool OnRecreate()
32 public void Apply(
int stencilReference)
34 if (Description.DepthBufferEnable)
36 GL.Enable(EnableCap.DepthTest);
38 GL.DepthFunc(depthFunction);
42 GL.Disable(EnableCap.DepthTest);
45 if (Description.StencilEnable)
47 GL.Enable(EnableCap.StencilTest);
48 GL.StencilMask(Description.StencilMask);
50 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLCORE
51 GL.StencilFunc(Description.FrontFace.StencilFunction.ToOpenGLStencilFunction(), stencilReference, Description.StencilWriteMask);
52 GL.StencilFuncSeparate(Version20.StencilBackFunc, Description.BackFace.StencilFunction.ToOpenGLStencilFunction(), stencilReference, Description.StencilWriteMask);
53 GL.StencilOpSeparate(StencilFace.Front, Description.FrontFace.StencilDepthBufferFail.ToOpenGL(), Description.FrontFace.StencilFail.ToOpenGL(), Description.FrontFace.StencilPass.ToOpenGL());
54 GL.StencilOpSeparate(StencilFace.Back, Description.BackFace.StencilDepthBufferFail.ToOpenGL(), Description.BackFace.StencilFail.ToOpenGL(), Description.BackFace.StencilPass.ToOpenGL());
55 #elif SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLES
56 GL.StencilFuncSeparate(CullFaceMode.Front, Description.FrontFace.StencilFunction.ToOpenGLStencilFunction(), stencilReference, Description.StencilWriteMask);
57 GL.StencilFuncSeparate(CullFaceMode.Back, Description.BackFace.StencilFunction.ToOpenGLStencilFunction(), stencilReference, Description.StencilWriteMask);
58 GL.StencilOpSeparate(CullFaceMode.Front, Description.FrontFace.StencilDepthBufferFail.ToOpenGL(), Description.FrontFace.StencilFail.ToOpenGL(), Description.FrontFace.StencilPass.ToOpenGL());
59 GL.StencilOpSeparate(CullFaceMode.Back, Description.BackFace.StencilDepthBufferFail.ToOpenGL(), Description.BackFace.StencilFail.ToOpenGL(), Description.BackFace.StencilPass.ToOpenGL());
64 GL.Disable(EnableCap.StencilTest);
68 internal void ApplyDepthMask()
70 GL.DepthMask(Description.DepthBufferWriteEnable && GraphicsDevice.hasDepthStencilBuffer);