Example #1
0
        private static bool CompFunc(FragmentPoint point, byte refValue, byte readMask, Comparison comp)
        {
            refValue = (byte)(refValue & readMask);
            byte buffValue = (byte)(GetBuffValue(point) & readMask);

            switch (comp)
            {
            case Comparison.Greater:
                return(refValue > buffValue);

            case Comparison.GEqual:
                return(refValue >= buffValue);

            case Comparison.Less:
                return(refValue < buffValue);

            case Comparison.LEqual:
                return(refValue <= buffValue);

            case Comparison.Equal:
                return(refValue == buffValue);

            case Comparison.NotEqual:
                return(refValue != buffValue);

            case Comparison.Always:
                return(true);

            case Comparison.Never:
                return(false);
            }
            return(false);
        }
Example #2
0
        private static bool CompFunc(FragmentPoint point, float z, Comparison comp)
        {
            var buffValue = GetBuffValue(point);

            switch (comp)
            {
            case Comparison.Less:
                return(z < buffValue);

            case Comparison.Greater:
                return(z > buffValue);

            case Comparison.LEqual:
                return(z <= buffValue);

            case Comparison.GEqual:
                return(z >= buffValue);

            case Comparison.Equal:
                return(z == buffValue);

            case Comparison.NotEqual:
                return(z != buffValue);

            case Comparison.Always:
                return(true);
            }
            return(false);
        }
Example #3
0
 private static void WriteImp(FragmentPoint point, byte refValue, byte writeMask, StencilOp op)
 {
     if (writeMask == 0)
     {
         return;
     }
     WriteByOp(point, (byte)(refValue & writeMask), op);
 }
Example #4
0
        public static bool DoTest(FragmentPoint point, byte refValue, byte readMask, byte writeMask, Comparison comp, StencilOp passOp, StencilOp failOp, StencilOp zfailOp)
        {
            bool passed = CompFunc(point, refValue, readMask, comp);

            if (passed)
            {
                PassOpFunc(point, refValue, writeMask, passOp);
            }
            else
            {
                FailOpFunc(point, refValue, writeMask, passOp);
            }

            return(passed);
        }
Example #5
0
        public static bool DoTest(bool zwrite, FragmentPoint point, float z, Comparison comp, StencilTest.StencilOp zfailOp, byte refValue, byte writeMask)
        {
            bool passed = CompFunc(point, z, comp);

            if (passed)
            {
                if (zwrite)
                {
                    SetBuffValue(point, z);
                }
            }
            else
            {
                StencilTest.ZFailOp(point, refValue, writeMask, zfailOp);
            }
            return(true);
        }
Example #6
0
 private static void SetBuffValue(FragmentPoint point, float v)
 {
     s_ZBuff[point.x, point.y] = v;
 }
Example #7
0
 private static float GetBuffValue(FragmentPoint point)
 {
     return(s_ZBuff[point.x, point.y]);
 }
Example #8
0
 private static void SetBuffValue(FragmentPoint point, byte v)
 {
     s_StencilBuff[point.x, point.y] = v;
 }
Example #9
0
 private static byte GetBuffValue(FragmentPoint point)
 {
     return(s_StencilBuff[point.x, point.y]);
 }
Example #10
0
        private static void WriteByOp(FragmentPoint point, byte v, StencilOp op)
        {
            switch (op)
            {
            case StencilOp.Keep:
                break;

            case StencilOp.Zero:
                SetBuffValue(point, 0);
                break;

            case StencilOp.Replace:
                SetBuffValue(point, v);
                break;

            case StencilOp.IncrSat:
            {
                var curV = GetBuffValue(point);
                if (curV < 255)
                {
                    SetBuffValue(point, curV++);
                }
            }
            break;

            case StencilOp.DecrSat:
            {
                var curV = GetBuffValue(point);
                if (curV > 0)
                {
                    SetBuffValue(point, curV--);
                }
            }
            break;

            case StencilOp.Invert:
            {
                var curV = GetBuffValue(point);
                SetBuffValue(point, (byte)~curV);
            }
            break;

            case StencilOp.IncrWrap:
            {
                var curV = GetBuffValue(point);
                if (curV == 255)
                {
                    curV = 0;
                }
                else
                {
                    curV++;
                }
                SetBuffValue(point, curV);
            }
            break;

            case StencilOp.DecrWrap:
            {
                var curV = GetBuffValue(point);
                if (curV == 0)
                {
                    curV = 255;
                }
                else
                {
                    curV--;
                }
                SetBuffValue(point, curV);
            }
            break;
            }
        }
Example #11
0
 public static void ZFailOp(FragmentPoint point, byte refValue, byte writeMask, StencilOp zfailOp)
 {
     WriteImp(point, refValue, writeMask, zfailOp);
 }
Example #12
0
 private static void FailOpFunc(FragmentPoint point, byte refValue, byte writeMask, StencilOp failOp)
 {
     WriteImp(point, refValue, writeMask, failOp);
 }