using System; using System.Diagnostics; namespace Microsoft.Xna.Framework.Graphics { public class DepthStencilState : GraphicsResource { // TODO: We should be asserting if the state has // been changed after it has been bound to the device! public bool DepthBufferEnable { get; set; } public bool DepthBufferWriteEnable { get; set; } public StencilOperation CounterClockwiseStencilDepthBufferFail { get; set; } public StencilOperation CounterClockwiseStencilFail { get; set; } public CompareFunction CounterClockwiseStencilFunction { get; set; } public StencilOperation CounterClockwiseStencilPass { get; set; } public CompareFunction DepthBufferFunction { get; set; } public int ReferenceStencil { get; set; } public StencilOperation StencilDepthBufferFail { get; set; } public bool StencilEnable { get; set; } public StencilOperation StencilFail { get; set; } public CompareFunction StencilFunction { get; set; } public int StencilMask { get; set; } public StencilOperation StencilPass { get; set; } public int StencilWriteMask { get; set; } public bool TwoSidedStencilMode { get; set; } 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; } public static readonly DepthStencilState Default; public static readonly DepthStencilState DepthRead; public static readonly DepthStencilState None; static DepthStencilState () { Default = new DepthStencilState () { DepthBufferEnable = true, DepthBufferWriteEnable = true }; DepthRead = new DepthStencilState () { DepthBufferEnable = true, DepthBufferWriteEnable = false }; None = new DepthStencilState () { DepthBufferEnable = false, DepthBufferWriteEnable = false }; } } }