Beispiel #1
0
        /// <summary>
        /// Load a shader and check whether it works.
        /// </summary>
        /// <param name="name">Name of the shader.</param>
        public static void Add(string name)
        {
            // Load the shader
            var program = new ShaderProgram(name);
            var files   = FileManager.GetGraphShaders(name);

            foreach (var file in files)
            {
                program.AddShader(file.EndsWith(".frag") ? ShaderType.FragmentShader : ShaderType.VertexShader, file);
            }
            program.Link();

            // Check for any GL errors.
            Utils.CheckError("AddShader " + name);

            // After shader creation, create the corresponding manager
            UniformManager manager;

            try
            {
                manager = new UniformManager(name, program.ID);
            }
            catch (System.Exception e)
            {
                Log.WriteException(e);
                Log.WriteInfo($"could not initialize shader {name}. See shader info for details.");
                return;
            }

            // Add both the the lists
            shaders.Add(name, program);
            managers.Add(program.ID, manager);
        }
        /// <summary>
        /// Change the shader.
        /// </summary>
        /// <param name="name">Name of the shader.</param>
        /// <param name="default">Sets the default shader to this shader.</param>
        public static void ChangeShader(string name, bool @default = false)
        {
            var newShader = ShaderManager.Fetch(name);

            if (newShader > 0)
            {
                currentShader  = newShader;
                currentManager = ShaderManager.FetchManager(currentShader);
                if (@default)
                {
                    DefaultShader  = currentShader;
                    DefaultManager = currentManager;
                }
            }
            else
            {
                Log.WriteInfo($"Failed to fetch shader {name}.");

                if (@default)
                {
                    throw new DefaultShaderException();
                }
            }
        }