public static DepthStencilId CreateDepthStencil(DepthStencilStateDescription description) { DepthStencilId id = new DepthStencilId(); CreateDepthStencil(ref id, description); return(id); }
private static void InitDepthStencilState(DepthStencilId id) { if (DepthStencilObjects[id.Index] == null) { DepthStencilObjects[id.Index] = new DepthStencilState(MyRender11.Device, DepthStencilStates.Data[id.Index]); } }
internal static DepthStencilId CreateDepthStencil(DepthStencilStateDescription description) { var id = new DepthStencilId { Index = DepthStencilStates.Allocate() }; MyArrayHelpers.Reserve(ref DepthStencilObjects, id.Index + 1); DepthStencilStates.Data[id.Index] = description; InitDepthStencilState(id); DepthStencilIndices.Add(id); return(id); }
public static void CreateDepthStencil(ref DepthStencilId id, DepthStencilStateDescription description) { if (id == DepthStencilId.NULL) { id = new DepthStencilId(DepthStencilStates.Allocate()); MyArrayHelpers.Reserve(ref DepthStencilObjects, id.Index + 1); DepthStencilIndices.Add(id); } else { DepthStencilObjects[id.Index].Dispose(); } DepthStencilStates.Data[id.Index] = description; InitDepthStencilState(id); }
public static void ResizeMarkIfInsideCascade() { if (MarkIfInsideCascade == null || MarkIfInsideCascade.Length == 0) { return; } var desc = MyPipelineStates.GetDepthStencil(MarkIfInsideCascade[0]).Description; if (MarkIfInsideCascade.Length < MyRenderProxy.Settings.ShadowCascadeCount) { MarkIfInsideCascade = new DepthStencilId[MyRenderProxy.Settings.ShadowCascadeCount]; } for (int cascadeIndex = 0; cascadeIndex < MarkIfInsideCascade.Length; ++cascadeIndex) { desc.StencilWriteMask = (byte)(0x01 << cascadeIndex); MarkIfInsideCascade[cascadeIndex] = MyPipelineStates.CreateDepthStencil(desc); } }
internal static void InitDepthStencilState(DepthStencilId id) { DepthStencilObjects[id.Index] = new DepthStencilState(MyRender11.Device, DepthStencilStates.Data[id.Index]); }
internal static DepthStencilId CreateDepthStencil(DepthStencilStateDescription description) { var id = new DepthStencilId { Index = DepthStencilStates.Allocate() }; MyArrayHelpers.Reserve(ref DepthStencilObjects, id.Index + 1); DepthStencilStates.Data[id.Index] = description; InitDepthStencilState(id); DepthStencilIndices.Add(id); return id; }
private static void InitDepthStencilState(DepthStencilId id) { if (DepthStencilObjects[id.Index] == null) DepthStencilObjects[id.Index] = new DepthStencilState(MyRender11.Device, DepthStencilStates.Data[id.Index]); }
public static DepthStencilId CreateDepthStencil(DepthStencilStateDescription description) { DepthStencilId id = new DepthStencilId(); CreateDepthStencil(ref id, description); return id; }
static MyDepthStencilState() { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTestWrite = MyPipelineStates.CreateDepthStencil(desc); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTest = MyPipelineStates.CreateDepthStencil(desc); desc.IsDepthEnabled = false; desc.IsStencilEnabled = false; IgnoreDepthStencil = MyPipelineStates.CreateDepthStencil(desc); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x80; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Replace; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkAAEdge = MyPipelineStates.CreateDepthStencil(desc); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestAAEdge = MyPipelineStates.CreateDepthStencil(desc); MarkIfInside = new DepthStencilId[4]; desc.IsDepthEnabled = true; desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Less : Comparison.Greater; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.StencilWriteMask = 0x01; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkIfInside[0] = MyPipelineStates.CreateDepthStencil(desc); desc.StencilWriteMask = 0x02; MarkIfInside[1] = MyPipelineStates.CreateDepthStencil(desc); desc.StencilWriteMask = 0x04; MarkIfInside[2] = MyPipelineStates.CreateDepthStencil(desc); desc.StencilWriteMask = 0x08; MarkIfInside[3] = MyPipelineStates.CreateDepthStencil(desc); }
internal static DepthStencilState GetDepthStencil(DepthStencilId id) { return(DepthStencilObjects[id.Index]); }
internal static DepthStencilState GetDepthStencil(DepthStencilId id) { return DepthStencilObjects[id.Index]; }
internal static void Init() { { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTestWrite = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTest = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = false; desc.IsStencilEnabled = false; IgnoreDepthStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0xFF; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; WriteDepthAndStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x80; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Replace; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkEdgeInStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = Comparison.Equal; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.StencilWriteMask = 0x40; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; OutlineMesh = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.NotEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestOutlineMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestHighlightMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.NotEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; DiscardTestStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestDepthAndEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } MarkIfInsideCascade = new DepthStencilId[MyRender11.Settings.ShadowCascadeCount]; { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Less : Comparison.Greater; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; for (int cascadeIndex = 0; cascadeIndex < MarkIfInsideCascade.Length; ++cascadeIndex) { desc.StencilWriteMask = (byte) (0x01 << cascadeIndex); MarkIfInsideCascade[cascadeIndex] = MyPipelineStates.CreateDepthStencil(desc); } } }
internal static void Init() { // Bits in stencil buffer: 76543210 // bits 3-0 used in CSM // bit 4 used for stereo rendering mask // bit 6 used for outlines { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTestWrite = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTest = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = false; desc.IsStencilEnabled = false; IgnoreDepthStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0xFF; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; WriteDepthAndStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x80; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Replace; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkEdgeInStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = Comparison.Equal; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.StencilWriteMask = 0x40; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; OutlineMesh = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.NotEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestOutlineMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestHighlightMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestDepthAndEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } MarkIfInsideCascade = new DepthStencilId[8]; { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Less : Comparison.Greater; desc.DepthWriteMask = DepthWriteMask.Zero; for (int cascadeIndex = 0; cascadeIndex < MarkIfInsideCascade.Length; ++cascadeIndex) { desc.IsStencilEnabled = true; desc.StencilReadMask = 0xF; desc.StencilWriteMask = 0xF; desc.BackFace.Comparison = cascadeIndex == 0 ? Comparison.Always : Comparison.Greater; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkIfInsideCascade[cascadeIndex] = MyPipelineStates.CreateDepthStencil(desc); } } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilWriteMask = GetStereoMask(); desc.StencilReadMask = GetStereoMask(); desc.BackFace.Comparison = Comparison.GreaterEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; StereoDefaultDepthState = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilWriteMask = GetStereoMask(); desc.StencilReadMask = GetStereoMask(); desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Replace; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; StereoStereoStencilMask = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilWriteMask = GetStereoMask(); desc.StencilReadMask = GetStereoMask(); desc.BackFace.Comparison = Comparison.GreaterEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; StereoDepthTestWrite = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilWriteMask = GetStereoMask(); desc.StencilReadMask = GetStereoMask(); desc.BackFace.Comparison = Comparison.GreaterEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; StereoIgnoreDepthStencil = MyPipelineStates.CreateDepthStencil(desc); } }
public static void ResizeMarkIfInsideCascade() { if (MarkIfInsideCascade == null || MarkIfInsideCascade.Length == 0) return; var desc = MyPipelineStates.GetDepthStencil(MarkIfInsideCascade[0]).Description; if(MarkIfInsideCascade.Length < MyRenderProxy.Settings.ShadowCascadeCount) MarkIfInsideCascade = new DepthStencilId[MyRenderProxy.Settings.ShadowCascadeCount]; for (int cascadeIndex = 0; cascadeIndex < MarkIfInsideCascade.Length; ++cascadeIndex) { desc.StencilWriteMask = (byte)(0x01 << cascadeIndex); MarkIfInsideCascade[cascadeIndex] = MyPipelineStates.CreateDepthStencil(desc); } }
static MyDepthStencilState() { { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTestWrite = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = false; DepthTest = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = false; desc.IsStencilEnabled = false; IgnoreDepthStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.All; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0xFF; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; WriteDepthAndStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x80; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Replace; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; MarkEdgeInStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = Comparison.Equal; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.StencilWriteMask = 0x40; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Replace; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; OutlineMesh = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.NotEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestOutlineMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x40; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestHighlightMeshStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0xFF; desc.StencilWriteMask = 0x0; desc.BackFace.Comparison = Comparison.NotEqual; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; DiscardTestStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = false; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Greater : Comparison.Less; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsDepthEnabled = true; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x80; desc.StencilWriteMask = 0x00; desc.BackFace.Comparison = Comparison.Equal; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Keep; desc.FrontFace = desc.BackFace; TestDepthAndEdgeStencil = MyPipelineStates.CreateDepthStencil(desc); } MarkIfInsideCascade = new DepthStencilId[MyRender11.Settings.ShadowCascadeCount]; { DepthStencilStateDescription desc = new DepthStencilStateDescription(); desc.IsDepthEnabled = true; desc.DepthComparison = MyRender11.UseComplementaryDepthBuffer ? Comparison.Less : Comparison.Greater; desc.DepthWriteMask = DepthWriteMask.Zero; desc.IsStencilEnabled = true; desc.StencilReadMask = 0x00; desc.BackFace.Comparison = Comparison.Always; desc.BackFace.DepthFailOperation = StencilOperation.Keep; desc.BackFace.FailOperation = StencilOperation.Keep; desc.BackFace.PassOperation = StencilOperation.Replace; desc.FrontFace = desc.BackFace; for (int cascadeIndex = 0; cascadeIndex < MarkIfInsideCascade.Length; ++cascadeIndex) { desc.StencilWriteMask = (byte)(0x01 << cascadeIndex); MarkIfInsideCascade[cascadeIndex] = MyPipelineStates.CreateDepthStencil(desc); } } }