예제 #1
0
        protected void BeginProperties(bool showColor = true, bool canEditDetailLevel = true)
        {
            soRnd.Update();

            using (new ShapesUI.GroupScope()) {
                updateMeshFromEditorChange = false;

                ShapesUI.SortedEnumPopup <ShapesBlendMode>(blendModeGuiContent, propBlendMode);
                if ((target as ShapeRenderer).HasScaleModes)
                {
                    EditorGUILayout.PropertyField(propScaleMode, scaleModeGuiContent);
                }

                // sorting/depth stuff
                using (new EditorGUI.IndentLevelScope(1)) {
                    if (showDepth = EditorGUILayout.Foldout(showDepth, "Sorting & Depth"))
                    {
                        using (ShapesUI.TempLabelWidth(140)) {
                            EditorGUILayout.PropertyField(propRenderQueue, renderQueueGuiContent);
                            ShapesUI.RenderSortingLayerField(propSortingLayer);
                            EditorGUILayout.PropertyField(propSortingOrder);
                            EditorGUILayout.PropertyField(propZTest, zTestGuiContent);
                            EditorGUILayout.PropertyField(propZOffsetFactor, zOffsetFactorGuiContent);
                            EditorGUILayout.PropertyField(propZOffsetUnits, zOffsetUnitsGuiContent);
                        }
                    }
                }

                // stencil
                using (new EditorGUI.IndentLevelScope(1)) {
                    if (showStencil = EditorGUILayout.Foldout(showStencil, "Stencil Buffer"))
                    {
                        EditorGUILayout.PropertyField(propStencilComp, stencilCompGuiContent);
                        EditorGUILayout.PropertyField(propStencilOpPass, stencilOpPassGuiContent);
                        EditorGUILayout.PropertyField(propStencilRefID, stencilIDGuiContent);
                        EditorGUILayout.PropertyField(propStencilReadMask, stencilReadMaskGuiContent);
                        EditorGUILayout.PropertyField(propStencilWriteMask, stencilWriteMaskGuiContent);
                    }
                }

                // warning box about instancing
                int uniqueCount    = 0;
                int instancedCount = 0;
                foreach (ShapeRenderer obj in targets.Cast <ShapeRenderer>())
                {
                    if (obj.IsUsingUniqueMaterials)
                    {
                        uniqueCount++;
                    }
                    else
                    {
                        instancedCount++;
                    }
                }

                if (uniqueCount > 0)
                {
                    string infix;
                    if (instancedCount == 0)
                    {
                        infix = uniqueCount == 1 ? "this object is" : "these objects are";
                    }
                    else                     // mixed selection
                    {
                        infix = "some of these objects are";
                    }

                    string label = $"Note: {infix} not GPU instanced due to custom depth/stencil settings";

                    GUIStyle wrapLabel = new GUIStyle(EditorStyles.miniLabel);
                    wrapLabel.wordWrap = true;
                    using (ShapesUI.Horizontal) {
                        GUIContent icon = EditorGUIUtility.IconContent("console.warnicon.sml");
                        GUILayout.Label(icon);
                        GUILayout.TextArea(label, wrapLabel);
                        if (GUILayout.Button("Reset", EditorStyles.miniButton))
                        {
                            propZTest.enumValueIndex         = (int)ShapeRenderer.DEFAULT_ZTEST;
                            propZOffsetFactor.floatValue     = ShapeRenderer.DEFAULT_ZOFS_FACTOR;
                            propZOffsetUnits.intValue        = ShapeRenderer.DEFAULT_ZOFS_UNITS;
                            propStencilComp.enumValueIndex   = (int)ShapeRenderer.DEFAULT_STENCIL_COMP;
                            propStencilOpPass.enumValueIndex = (int)ShapeRenderer.DEFAULT_STENCIL_OP;
                            propStencilRefID.intValue        = ShapeRenderer.DEFAULT_STENCIL_REF_ID;
                            propStencilReadMask.intValue     = ShapeRenderer.DEFAULT_STENCIL_MASK;
                            propStencilWriteMask.intValue    = ShapeRenderer.DEFAULT_STENCIL_MASK;
                            propRenderQueue.intValue         = ShapeRenderer.DEFAULT_RENDER_QUEUE_AUTO;
                        }
                    }
                }
            }

            if ((target as ShapeRenderer).HasDetailLevels)
            {
                using (new EditorGUI.DisabledScope(canEditDetailLevel == false)) {
                    if (canEditDetailLevel)
                    {
                        using (var chChk = new EditorGUI.ChangeCheckScope()) {
                            EditorGUILayout.PropertyField(propDetailLevel);
                            if (chChk.changed)
                            {
                                updateMeshFromEditorChange = true;
                            }
                        }
                    }
                    else
                    {
                        EditorGUILayout.TextField(propDetailLevel.displayName, "∞", GUI.skin.label);
                    }
                }
            }

            if (showColor)
            {
                PropertyFieldColor();
            }
        }