/// <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(); } } }