public static void StencilFuncSeparateATI(StencilFunction frontfunc, StencilFunction backfunc, Int32 @ref, UInt32 mask)
		{
			Debug.Assert(Delegates.pglStencilFuncSeparateATI != null, "pglStencilFuncSeparateATI not implemented");
			Delegates.pglStencilFuncSeparateATI((Int32)frontfunc, (Int32)backfunc, @ref, mask);
			LogFunction("glStencilFuncSeparateATI({0}, {1}, {2}, {3})", frontfunc, backfunc, @ref, mask);
			DebugCheckErrors(null);
		}
예제 #2
0
 public static void StencilFuncSeparateATI(StencilFunction frontfunc, StencilFunction backfunc, Int32 @ref, UInt32 mask)
 {
     Debug.Assert(Delegates.pglStencilFuncSeparateATI != null, "pglStencilFuncSeparateATI not implemented");
     Delegates.pglStencilFuncSeparateATI((Int32)frontfunc, (Int32)backfunc, @ref, mask);
     LogCommand("glStencilFuncSeparateATI", null, frontfunc, backfunc, @ref, mask);
     DebugCheckErrors(null);
 }
예제 #3
0
 /// <summary>
 /// Set up the stencil condition, full control.
 /// See <href>https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glStencilFuncSeparate.xhtml</href>
 /// See <href>https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glStencilOpSeparate.xhtml</href>
 /// </summary>
 /// <param name="function">Stencil function to use</param>
 /// <param name="refvalue">Reference value</param>
 /// <param name="mask">Stencil test mask (ref AND mask) func (stencil AND mask)</param>
 /// <param name="face">For this face (default front and back) perform stencil operation on</param>
 public GLOperationStencilOnlyIf(StencilFunction function, int refvalue = 1, int mask = 0xff, StencilFace face = StencilFace.FrontAndBack)
 {
     this.f    = function;
     this.v    = refvalue;
     this.mask = mask;
     this.face = face;
 }
예제 #4
0
 public StencilMode(StencilOperation operation, StencilFunction compare)
 {
     IsEnabled      = true;
     CompareFront   = compare;
     CompareBack    = compare;
     OperationFront = operation;
     OperationBack  = operation;
 }
예제 #5
0
 public StencilMode(StencilOperation frontOperation, StencilFunction frontCompare, StencilOperation backOperation, StencilFunction backCompare)
 {
     IsEnabled      = true;
     CompareFront   = frontCompare;
     CompareBack    = backCompare;
     OperationFront = frontOperation;
     OperationBack  = backOperation;
 }
 /// <summary>
 /// Use after drawing, to set up next draw with stencil conditions
 /// Set up the stencil condition
 /// </summary>
 /// <param name="function">Stencil function</param>
 /// <param name="refvalue">Reference value</param>
 /// <param name="mask">Stencil test mask (ref AND mask) func (stencil AND mask)</param>
 /// <param name="face">For this face (default front and back) perform stencil operation on</param>
 static public void OnlyIf(StencilFunction function, int refvalue = 1, int mask = 0xff, StencilFace face = StencilFace.FrontAndBack)
 {
     // stencil passes if V op stencil[pixel]
     GL.StencilFuncSeparate(face, function, refvalue, mask);
     GL.StencilOpSeparate(face, StencilOp.Keep,          //if it fails, keep stencil value
                          StencilOp.Keep,                //if depth buffer fails, keep stencil value
                          StencilOp.Keep);               //if passed, keep stencil value
 }
예제 #7
0
 public StencilState( StencilFunction func, int reference, int mask, StencilOperator zfail, StencilOperator fail, StencilOperator pass )
 {
     Function = func;
     Reference = reference;
     Mask = mask;
     ZFail = zfail;
     Fail = fail;
     Pass = pass;
 }
        internal void PlatformApplyState(GraphicsDevice device)
        {
            if (_state == null)
            {
                // Build the description.
                var desc = new SharpDX.Direct3D11.DepthStencilStateDescription
                {
                    IsDepthEnabled  = DepthBufferEnable,
                    DepthComparison = DepthBufferFunction.ToComparison()
                };

                if (DepthBufferWriteEnable)
                {
                    desc.DepthWriteMask = SharpDX.Direct3D11.DepthWriteMask.All;
                }
                else
                {
                    desc.DepthWriteMask = SharpDX.Direct3D11.DepthWriteMask.Zero;
                }

                desc.IsStencilEnabled = StencilEnable;
                desc.StencilReadMask  = (byte)StencilMask; // TODO: Should this instead grab the upper 8bits?
                desc.StencilWriteMask = (byte)StencilWriteMask;

                if (TwoSidedStencilMode)
                {
                    desc.BackFace.Comparison         = CounterClockwiseStencilFunction.ToComparison();
                    desc.BackFace.DepthFailOperation = GetStencilOp(CounterClockwiseStencilDepthBufferFail);
                    desc.BackFace.FailOperation      = GetStencilOp(CounterClockwiseStencilFail);
                    desc.BackFace.PassOperation      = GetStencilOp(CounterClockwiseStencilPass);
                }
                else
                {   //use same settings as frontFace
                    desc.BackFace.Comparison         = StencilFunction.ToComparison();
                    desc.BackFace.DepthFailOperation = GetStencilOp(StencilDepthBufferFail);
                    desc.BackFace.FailOperation      = GetStencilOp(StencilFail);
                    desc.BackFace.PassOperation      = GetStencilOp(StencilPass);
                }

                desc.FrontFace.Comparison         = StencilFunction.ToComparison();
                desc.FrontFace.DepthFailOperation = GetStencilOp(StencilDepthBufferFail);
                desc.FrontFace.FailOperation      = GetStencilOp(StencilFail);
                desc.FrontFace.PassOperation      = GetStencilOp(StencilPass);

                // Create the state.
                _state = new SharpDX.Direct3D11.DepthStencilState(GraphicsDevice._d3dDevice, desc);
            }

            Debug.Assert(GraphicsDevice == device, "The state was created for a different device!");

            // NOTE: We make the assumption here that the caller has
            // locked the d3dContext for us to use.

            // Apply the state!
            device._d3dContext.OutputMerger.SetDepthStencilState(_state, ReferenceStencil);
        }
예제 #9
0
 internal void StencilFunc(StencilFunction func, int @ref, uint mask)
 {
     if (Filter.StencilFunc != func ||
         Filter.StencilFuncRef != @ref ||
         Filter.StencilFuncMask != mask)
     {
         Filter.StencilFunc     = func;
         Filter.StencilFuncRef  = @ref;
         Filter.StencilFuncMask = mask;
         Gl.StencilFunc(func, @ref, mask);
     }
 }
예제 #10
0
 /// <summary>
 /// Creates a <see cref="StencilState"/> with the specified stencil testing parameters.
 /// </summary>
 /// <param name="testingEnabled">Whether stencil testing is enabled.</param>
 /// <param name="clearStencil">The stencil value to set on a clear operation.</param>
 /// <param name="writeMask">The mask to apply when writting to the stencil buffer.</param>
 /// <param name="function">The function to use for comparing stencil values.</param>
 /// <param name="refValue">A value used for comparison during the stencil test.</param>
 /// <param name="testMask">A mask applied before comparison during the stencil test.</param>
 /// <param name="sfail">The operation to do when a stencil test fails.</param>
 /// <param name="dpfail">The operation to do when a depth test fails.</param>
 /// <param name="dppass">The operation to do when both the depth and stencil tests pass.</param>
 public StencilState(bool testingEnabled, int clearStencil = 0, uint writeMask                 = FullMask,
                     StencilFunction function = StencilFunction.Greater, int refValue          = 0, uint testMask = FullMask,
                     StencilOperation sfail   = StencilOperation.Keep, StencilOperation dpfail = StencilOperation.Keep, StencilOperation dppass = StencilOperation.Keep)
 {
     StencilTestingEnabled     = testingEnabled;
     ClearStencil              = clearStencil;
     FrontWriteMask            = writeMask;
     BackWriteMask             = writeMask;
     FrontFunction             = function;
     BackFunction              = function;
     FrontRefValue             = refValue;
     BackRefValue              = refValue;
     FrontTestMask             = testMask;
     BackTestMask              = testMask;
     FrontStencilFailOperation = sfail;
     BackStencilFailOperation  = sfail;
     FrontDepthFailOperation   = dpfail;
     BackDepthFailOperation    = dpfail;
     FrontPassOperation        = dppass;
     BackPassOperation         = dppass;
 }
예제 #11
0
        public static void BeginUseStencilMask(StencilFunction Func, int Ref, uint Mask, bool WriteDepth = true, bool CullFront = true)
        {
            RenderAPI.DbgPushGroup("BeginUseStencilMask");

            RenderState RS = Gfx.PeekRenderState();

            RS.EnableStencilTest = true;
            RS.StencilFunc(Func, Ref, Mask);
            RS.StencilOp(StencilOperation.Keep, StencilOperation.Keep, StencilOperation.Keep);

            RS.EnableDepthTest = false;

            //if (CullFront) {
            RS.EnableCullFace = true;
            RS.CullFace       = CullFace.Front;
            //}

            RS.SetColorMask(true);
            RS.EnableDepthMask = WriteDepth;

            Gfx.PushRenderState(RS);
        }
예제 #12
0
        internal static void SetDepthStencilState(DepthStencilState state)
        {
            if (state.DepthBufferEnable)
            {
                // enable Depth Buffer
                GL.Enable(EnableCap.DepthTest);
            }
            else
            {
                GL.Disable(EnableCap.DepthTest);
            }


            if (state.StencilEnable)
            {
                // enable Stencil
                GL.Enable(EnableCap.StencilTest);

                // Set color mask - not needed
                //GL.ColorMask(false, false, false, false); //Disable drawing colors to the screen
                // set function
                StencilFunction func = StencilFunction.Always;
                switch (state.StencilFunction)
                {
                case CompareFunction.Always:
                    func = StencilFunction.Always;
                    break;

                case CompareFunction.Equal:
                    func = StencilFunction.Equal;
                    break;

                case CompareFunction.Greater:
                    func = StencilFunction.Greater;
                    break;

                case CompareFunction.GreaterEqual:
                    func = StencilFunction.Gequal;
                    break;

                case CompareFunction.Less:
                    func = StencilFunction.Less;
                    break;

                case CompareFunction.LessEqual:
                    func = StencilFunction.Lequal;
                    break;

                case CompareFunction.Never:
                    func = StencilFunction.Never;
                    break;

                case CompareFunction.NotEqual:
                    func = StencilFunction.Notequal;
                    break;
                }

                GL.StencilFunc(func, state.ReferenceStencil, state.StencilMask);

                GL.StencilOp(GetStencilOp(state.StencilFail), GetStencilOp(state.StencilDepthBufferFail)
                             , GetStencilOp(state.StencilPass));
            }
            else
            {
                // Set color mask - not needed
                //GL.ColorMask(true, true, true, true); // Enable drawing colors to the screen
                GL.Disable(EnableCap.StencilTest);
            }
        }
예제 #13
0
		internal static extern void glStencilFunc(StencilFunction func, Int32 @ref, UInt32 mask);
예제 #14
0
 public void StencilOpSeparate(Face face, StencilFunction fail, StencilFunction zfail, StencilFunction zpass) => this.CallMethod <object>(STENCIL_OP_SEPARATE, face, fail, zfail, zpass);
예제 #15
0
 private int ConvertStencilFunc( StencilFunction func )
 {
     switch ( func )
     {
         case StencilFunction.Always: return ( int ) SharpDX.Direct3D9.Compare.Always;
         case StencilFunction.Never: return ( int ) SharpDX.Direct3D9.Compare.Never;
         case StencilFunction.Equal: return ( int ) SharpDX.Direct3D9.Compare.Equal;
         case StencilFunction.NotEqual: return ( int ) SharpDX.Direct3D9.Compare.NotEqual;
         case StencilFunction.Greater: return ( int ) SharpDX.Direct3D9.Compare.Greater;
         case StencilFunction.GreaterEqual: return ( int ) SharpDX.Direct3D9.Compare.GreaterEqual;
         case StencilFunction.Less: return ( int ) SharpDX.Direct3D9.Compare.Less;
         case StencilFunction.LessEqual: return ( int ) SharpDX.Direct3D9.Compare.LessEqual;
         default: throw new ArgumentException ();
     }
 }
예제 #16
0
 public void StencilFunc(StencilFunction func, int reference, uint mask)
 {
     gl.glStencilFunc((int)func, reference, mask);
 }
예제 #17
0
 public void StencilOp(StencilFunction fail, StencilFunction zfail, StencilFunction zpass) => this.CallMethod <object>(STENCIL_OP, fail, zfail, zpass);
 public static void StencilFuncSeparateATI( StencilFunction frontfunc, StencilFunction backfunc, int @ref, uint mask )
 {
     if (_StencilFuncSeparateATI == null) throw new Exception( "Extension method StencilFuncSeparateATI not found" );
      _StencilFuncSeparateATI( frontfunc, backfunc, @ref, mask );
 }
예제 #19
0
 private OpenTK.Graphics.OpenGL.StencilFunction MistyValueToOriginal( StencilFunction func )
 {
     switch ( func )
     {
         case StencilFunction.Never: return OpenTK.Graphics.OpenGL.StencilFunction.Never;
         case StencilFunction.Always: return OpenTK.Graphics.OpenGL.StencilFunction.Always;
         case StencilFunction.Equal: return OpenTK.Graphics.OpenGL.StencilFunction.Equal;
         case StencilFunction.NotEqual: return OpenTK.Graphics.OpenGL.StencilFunction.Notequal;
         case StencilFunction.Greater: return OpenTK.Graphics.OpenGL.StencilFunction.Greater;
         case StencilFunction.Less: return OpenTK.Graphics.OpenGL.StencilFunction.Less;
         case StencilFunction.GreaterEqual: return OpenTK.Graphics.OpenGL.StencilFunction.Gequal;
         case StencilFunction.LessEqual: return OpenTK.Graphics.OpenGL.StencilFunction.Lequal;
         default: throw new ArgumentException ();
     }
 }
예제 #20
0
		public static void StencilFuncSeparate(StencilFace face, StencilFunction func, int reference, uint mask)
		{
			glStencilFuncSeparate deleg = BaseGraphicsContext.Current.Loader.Get<glStencilFuncSeparate>();
			if (deleg != null)
				deleg(face, func, reference, mask);
		}
예제 #21
0
		public static void StencilFuncSeparate(StencilFaceDirection face, StencilFunction func, Int32 @ref, UInt32 mask)
		{
			Debug.Assert(Delegates.pglStencilFuncSeparate != null, "pglStencilFuncSeparate not implemented");
			Delegates.pglStencilFuncSeparate((Int32)face, (Int32)func, @ref, mask);
			LogFunction("glStencilFuncSeparate({0}, {1}, {2}, {3})", face, func, @ref, mask);
			DebugCheckErrors(null);
		}
예제 #22
0
 public static void StencilFunc(StencilFunction func, int value, uint mask)
 {
     CheckCurrent();
     _bindings.glStencilFunc((int)func, (IntPtr)value, mask);
     CheckError();
 }
예제 #23
0
 public static void glStencilFunc(StencilFunction func, Int32 @ref, UInt32 mask)
 {
     i_OpenGL1_0.glStencilFunc(func, @ref, mask);
 }
예제 #24
0
 /// <summary>
 /// Stencil test function
 /// </summary>
 /// <param name="function">Test function</param>
 /// <param name="reference">Reference value</param>
 /// <param name="mask">Mask</param>
 public static void StencilFunction(StencilFunction function, int reference, int mask)
 {
     TK.GL.StencilFunc((TK.StencilFunction)function, reference, mask);
 }
예제 #25
0
 internal static extern void glStencilFunc(StencilFunction func, Int32 @ref, UInt32 mask);
예제 #26
0
파일: Stencil.cs 프로젝트: abasilak/phd
 public static void func(StencilFunction f, int @r, uint mask)
 {
     GL.StencilFunc(f, r, mask);
 }
예제 #27
0
		public static void StencilFunc(StencilFunction func, Int32 @ref, UInt32 mask)
		{
			Debug.Assert(Delegates.pglStencilFunc != null, "pglStencilFunc not implemented");
			Delegates.pglStencilFunc((Int32)func, @ref, mask);
			CallLog("glStencilFunc({0}, {1}, {2})", func, @ref, mask);
			DebugCheckErrors();
		}
		public static void PathStencilFuncNV(StencilFunction func, Int32 @ref, UInt32 mask)
		{
			Debug.Assert(Delegates.pglPathStencilFuncNV != null, "pglPathStencilFuncNV not implemented");
			Delegates.pglPathStencilFuncNV((Int32)func, @ref, mask);
			LogFunction("glPathStencilFuncNV({0}, {1}, {2})", func, @ref, mask);
			DebugCheckErrors(null);
		}
예제 #29
0
 public partial void StencilFuncSeparate([Flow(FlowDirection.In)] StencilFunction frontfunc, [Flow(FlowDirection.In)] StencilFunction backfunc, [Flow(FlowDirection.In)] int @ref, [Flow(FlowDirection.In)] uint mask);
예제 #30
0
 public static extern void glStencilFunc(StencilFunction function, int @ref, uint mask);
예제 #31
0
 public static void StencilFunc(StencilFunction function, int @ref, uint mask)
 {
     Delegates.glStencilFunc(function, @ref, mask);
 }
예제 #32
0
		public static void StencilFunc(StencilFunction func, int reference, uint mask)
		{
			glStencilFunc deleg = BaseGraphicsContext.Current.Loader.Get<glStencilFunc>();
			if (deleg != null)
				deleg(func, reference, mask);
		}