Example #1
0
        public void StencilBlock(ref Rect r)
        {
            bool prevUseStencilBuffer = useStencilBuffer;

            useStencilBuffer = GUI.Toggle(r, useStencilBuffer, useStencilBuffer ? "模板缓冲区" : "模板缓冲区...");
            if (useStencilBuffer != prevUseStencilBuffer)
            {
                UpdateAutoSettings();
            }
            r.y += 20;
            if (!useStencilBuffer)
            {
                return;
            }
            r.xMin += 20;

            allowStencilWriteThroughProperties = UndoableToggle(r, allowStencilWriteThroughProperties, "公开模板作为属性", "toggle expose stencil as properties");
            r.y += 20;

            EditorGUI.BeginDisabledGroup(allowStencilWriteThroughProperties);

            Rect rTmp = r;

            rTmp.width = 88;
            GUI.Label(rTmp, "参考值", EditorStyles.miniLabel);
            rTmp              = rTmp.MovedRight();
            rTmp.width       -= 48;
            stencilValue      = (byte)UndoableIntField(rTmp.PadRight(4).PadTop(1).PadBottom(2), stencilValue, "reference value");
            rTmp              = rTmp.MovedRight();
            rTmp.width        = r.width - 128;
            stencilComparison = (DepthTestStencil)UndoableLabeledEnumPopupNamed(rTmp.PadRight(4).ClampWidth(32, 140), "对比", stencilComparison, strDepthTestStencil, "stencil comparison");
            r.y += 20;

            StencilBitfield(r, "读取遮罩", ref stencilMaskRead);
            r.y += 20;
            StencilBitfield(r, "写入遮罩", ref stencilMaskWrite);
            r.y         += 23;
            stencilPass  = (StencilOp)UndoableLabeledEnumPopupNamed(r.PadRight(4), "通过", stencilPass, strStencilOp, "stencil pass");
            r.y         += 20;
            stencilFail  = (StencilOp)UndoableLabeledEnumPopupNamed(r.PadRight(4), "失败", stencilFail, strStencilOp, "stencil fail");
            r.y         += 20;
            stencilFailZ = (StencilOp)UndoableLabeledEnumPopupNamed(r.PadRight(4), "失败 Z", stencilFailZ, strStencilOp, "stencil fail Z");
            r.y         += 20;
            r.xMin      -= 20;
            r.y         += 20;

            EditorGUI.EndDisabledGroup();
        }
Example #2
0
        public override void Deserialize(string key, string value)
        {
            switch (key)
            {
            case "blpr":     // This is no longer saved, but in old shaders, we have to read it with old enum indices

                //	0 "Opaque",
                //	1 "Alpha Blended",
                //	- "Alpha Blended (Premultiplied)",
                //	2 "Additive",
                //	3 "Screen",
                //	4 "Multiplicative",

                int iVal = int.Parse(value);
                if (iVal > 1)     // Offset due to adding premul
                {
                    iVal++;
                }
                blendModePreset = (BlendModePreset)iVal;
                ConformBlendsToPreset();

                lockSrcDstRead = true;
                break;

            case "bsrc":
                if (lockSrcDstRead)
                {
                    break;
                }
                blendSrc = (BlendMode)int.Parse(value);
                break;

            case "bdst":
                if (lockSrcDstRead)
                {
                    lockSrcDstRead = false;
                    break;
                }
                blendDst = (BlendMode)int.Parse(value);
                ConformPresetToBlend();
                break;

            case "dpts":
                depthTest = (DepthTest)int.Parse(value);
                break;

            case "wrdp":
                writeDepth = bool.Parse(value);
                break;

            case "dith":
                dithering = (Dithering)int.Parse(value);
                break;

            case "atcv":
                alphaToCoverage = bool.Parse(value);
                break;

            case "rfrpo":
                perObjectRefraction = bool.Parse(value);
                break;

            case "rfrpn":
                refractionPassName = value;
                break;

            case "coma":
                colorMask = int.Parse(value);
                break;

            case "ufog":
                useFog = bool.Parse(value);
                break;

            case "aust":
                autoSort = bool.Parse(value);
                break;

            case "igpj":
                ignoreProjector = bool.Parse(value);
                break;

            case "qofs":
                queueOffset = int.Parse(value);
                break;

            case "qpre":
                queuePreset = (Queue)int.Parse(value);
                break;

            case "rntp":
                renderType = (RenderType)int.Parse(value);
                break;

            // Fog booleans
            case "fgom":
                fogOverrideMode = bool.Parse(value);
                break;

            case "fgoc":
                fogOverrideColor = bool.Parse(value);
                break;

            case "fgod":
                fogOverrideDensity = bool.Parse(value);
                break;

            case "fgor":
                fogOverrideRange = bool.Parse(value);
                break;

            // Fog values
            case "fgmd":
                fogMode = (ShaderFogMode)int.Parse(value);
                break;

            case "fgcr":
                fogColor.r = float.Parse(value);
                break;

            case "fgcg":
                fogColor.g = float.Parse(value);
                break;

            case "fgcb":
                fogColor.b = float.Parse(value);
                break;

            case "fgca":
                fogColor.a = float.Parse(value);
                break;

            case "fgde":
                fogDensity = float.Parse(value);
                break;

            case "fgrn":
                fogRange.x = float.Parse(value);
                break;

            case "fgrf":
                fogRange.y = float.Parse(value);
                break;

            // Stencil buffer:
            case "stcl":
                useStencilBuffer = bool.Parse(value);
                break;

            case "atwp":
                allowStencilWriteThroughProperties = bool.Parse(value);
                break;

            case "stva":
                stencilValue = byte.Parse(value);
                break;

            case "stmr":
                stencilMaskRead = byte.Parse(value);
                break;

            case "stmw":
                stencilMaskWrite = byte.Parse(value);
                break;

            case "stcp":
                stencilComparison = (DepthTestStencil)int.Parse(value);
                break;

            case "stps":
                stencilPass = (StencilOp)int.Parse(value);
                break;

            case "stfa":
                stencilFail = (StencilOp)int.Parse(value);
                break;

            case "stfz":
                stencilFailZ = (StencilOp)int.Parse(value);
                break;

            // Offset
            case "ofsf":
                offsetFactor = int.Parse(value);
                break;

            case "ofsu":
                offsetUnits = int.Parse(value);
                break;
            }
        }