#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2022 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; #endregion namespace Microsoft.Xna.Framework.Graphics { public class DepthStencilState : GraphicsResource { #region Public Properties public bool DepthBufferEnable { get { return state.depthBufferEnable == 1; } set { state.depthBufferEnable = (byte) (value ? 1 : 0); } } public bool DepthBufferWriteEnable { get { return state.depthBufferWriteEnable == 1; } set { state.depthBufferWriteEnable = (byte) (value ? 1 : 0); } } public StencilOperation CounterClockwiseStencilDepthBufferFail { get { return state.ccwStencilDepthBufferFail; } set { state.ccwStencilDepthBufferFail = value; } } public StencilOperation CounterClockwiseStencilFail { get { return state.ccwStencilFail; } set { state.ccwStencilFail = value; } } public CompareFunction CounterClockwiseStencilFunction { get { return state.ccwStencilFunction; } set { state.ccwStencilFunction = value; } } public StencilOperation CounterClockwiseStencilPass { get { return state.ccwStencilPass; } set { state.ccwStencilPass = value; } } public CompareFunction DepthBufferFunction { get { return state.depthBufferFunction; } set { state.depthBufferFunction = value; } } public int ReferenceStencil { get { return state.referenceStencil; } set { state.referenceStencil = value; } } public StencilOperation StencilDepthBufferFail { get { return state.stencilDepthBufferFail; } set { state.stencilDepthBufferFail = value; } } public bool StencilEnable { get { return state.stencilEnable == 1; } set { state.stencilEnable = (byte) (value ? 1 : 0); } } public StencilOperation StencilFail { get { return state.stencilFail; } set { state.stencilFail = value; } } public CompareFunction StencilFunction { get { return state.stencilFunction; } set { state.stencilFunction = value; } } public int StencilMask { get { return state.stencilMask; } set { state.stencilMask = value; } } public StencilOperation StencilPass { get { return state.stencilPass; } set { state.stencilPass = value; } } public int StencilWriteMask { get { return state.stencilWriteMask; } set { state.stencilWriteMask = value; } } public bool TwoSidedStencilMode { get { return state.twoSidedStencilMode == 1; } set { state.twoSidedStencilMode = (byte) (value ? 1 : 0); } } #endregion #region Public DepthStencilState Presets public static readonly DepthStencilState Default = new DepthStencilState( "DepthStencilState.Default", true, true ); public static readonly DepthStencilState DepthRead = new DepthStencilState( "DepthStencilState.DepthRead", true, false ); public static readonly DepthStencilState None = new DepthStencilState( "DepthStencilState.None", false, false ); #endregion #region Internal FNA3D Variables internal FNA3D.FNA3D_DepthStencilState state; #endregion #region Public Constructor public DepthStencilState() { DepthBufferEnable = true; DepthBufferWriteEnable = true; DepthBufferFunction = CompareFunction.LessEqual; StencilEnable = false; StencilFunction = CompareFunction.Always; StencilPass = StencilOperation.Keep; StencilFail = StencilOperation.Keep; StencilDepthBufferFail = StencilOperation.Keep; TwoSidedStencilMode = false; CounterClockwiseStencilFunction = CompareFunction.Always; CounterClockwiseStencilFail = StencilOperation.Keep; CounterClockwiseStencilPass = StencilOperation.Keep; CounterClockwiseStencilDepthBufferFail = StencilOperation.Keep; StencilMask = Int32.MaxValue; StencilWriteMask = Int32.MaxValue; ReferenceStencil = 0; } #endregion #region Private Constructor private DepthStencilState( string name, bool depthBufferEnable, bool depthBufferWriteEnable ) : this() { Name = name; DepthBufferEnable = depthBufferEnable; DepthBufferWriteEnable = depthBufferWriteEnable; } #endregion } }