using System; using System.IO; using OpenTK.Graphics.OpenGL; namespace nhengine { public class ShaderProgram { Shader vertexShader; Shader fragmentShader; int id; public ShaderProgram(Shader vertexShader, Shader fragmentShader) { init(vertexShader, fragmentShader); } public ShaderProgram(String vertexShader, String fragmentShader) { init( new Shader(ShaderType.VertexShader, vertexShader), new Shader(ShaderType.FragmentShader, fragmentShader) ); } public ShaderProgram(Stream vertexShader, Stream fragmentShader) { init( new Shader(ShaderType.VertexShader, new StreamReader(vertexShader).ReadToEnd()), new Shader(ShaderType.FragmentShader, new StreamReader(fragmentShader).ReadToEnd()) ); } private void init(Shader vertexShader, Shader fragmentShader){ this.vertexShader = vertexShader; this.fragmentShader = fragmentShader; this.id = GL.CreateProgram(); GL.AttachShader(this.id, vertexShader.ID); GL.AttachShader(this.id, fragmentShader.ID); GL.BindAttribLocation(this.id, 0, "position"); GL.BindAttribLocation(this.id, 1, "v_color"); GL.LinkProgram(this.id); Console.WriteLine("Shader Program Result: {0}", GL.GetProgramInfoLog(this.id)); } public int ID { get { return this.id; } } } }