/// <inheritdoc/>
        protected internal override void Initialize()
        {
            LoadResource();

            material = InspectedObject as Material;
            if (material == null)
            {
                return;
            }

            Shader        activeShader = material.Shader.Value;
            BuiltinShader builtinType  = ShaderToBuiltin(activeShader);

            builtinShaderField       = new GUIEnumField(typeof(BuiltinShader), new LocEdString("Shader"));
            builtinShaderField.Value = (ulong)builtinType;
            builtinShaderField.OnSelectionChanged += OnBuiltinShaderFieldChanged;

            shaderField            = new GUIResourceField(typeof(Shader), new LocEdString("Shader file"));
            shaderField.ValueRef   = material.Shader;
            shaderField.OnChanged += (x) =>
            {
                Shader shader = Resources.Load <Shader>(x.UUID);

                material.Shader = shader;
                EditorApplication.SetDirty(material);
                RebuildParamGUI(material);
            };

            bool isCustom = builtinType == BuiltinShader.Custom;

            shaderField.Active = isCustom;

            RebuildParamGUI(material);
        }
Esempio n. 2
0
        /// <summary>
        /// Returns one of the builtin shaders
        /// </summary>
        public static Shader GetShader(BuiltinShader shader)
        {
            if (shader == BuiltinShader.Custom)
            {
                return(null);
            }

            return(Internal_GetBuiltinShader((int)shader));
        }
        /// <inheritdoc/>
        protected internal override void Initialize()
        {
            Material material = InspectedObject as Material;

            if (material == null)
            {
                return;
            }

            Shader        activeShader = material.Shader;
            BuiltinShader builtinType  = ShaderToBuiltin(activeShader);

            builtinShaderField       = new GUIEnumField(typeof(BuiltinShader), new LocEdString("Shader"));
            builtinShaderField.Value = (ulong)builtinType;
            builtinShaderField.OnSelectionChanged += x =>
            {
                BuiltinShader newBuiltinType = (BuiltinShader)x;

                material.Shader = Builtin.GetShader(newBuiltinType);
                EditorApplication.SetDirty(material);
                RebuildParamGUI(material);

                bool newIsCustom = newBuiltinType == BuiltinShader.Custom;
                shaderField.Active = newIsCustom;
            };

            shaderField            = new GUIResourceField(typeof(Shader), new LocEdString("Shader file"));
            shaderField.Value      = material.Shader;
            shaderField.OnChanged += (x) =>
            {
                Shader shader = Resources.Load <Shader>(x);

                material.Shader = shader;
                EditorApplication.SetDirty(material);
                RebuildParamGUI(material);
            };

            bool isCustom = builtinType == BuiltinShader.Custom;

            shaderField.Active = isCustom;

            Layout.AddElement(builtinShaderField);
            Layout.AddElement(shaderField);

            RebuildParamGUI(material);
        }
        private void OnBuiltinShaderFieldChanged(UInt64 value)
        {
            Shader        activeShader   = material.Shader.Value;
            BuiltinShader builtinType    = ShaderToBuiltin(activeShader);
            BuiltinShader newBuiltinType = (BuiltinShader)value;

            if (builtinType == newBuiltinType)
            {
                return;
            }

            material.Shader = Builtin.GetShader(newBuiltinType);
            EditorApplication.SetDirty(material);
            RebuildParamGUI(material);

            bool newIsCustom = newBuiltinType == BuiltinShader.Custom;

            shaderField.Active = newIsCustom;
        }