// <!-- Warning --> public static ShaderProgram MakeProgram(Shader vertex, Shader fragment) { var program = new ShaderProgram(vertex, fragment); var programHandle = program.GetHandle(); GL.AttachShader(programHandle, vertex.GetHandle()); GL.AttachShader(programHandle, fragment.GetHandle()); GL.LinkProgram (programHandle); int link_ok = 0; GL.GetProgram(programHandle, ProgramParameter.LinkStatus, out link_ok); int bufLength = 0; StringBuilder buf = new StringBuilder(8192); GL.GetProgramInfoLog(programHandle, buf.Capacity, out bufLength, buf); CheckGLError(); if (link_ok != 0) { Console.Write("Attached and linked shaders."); if (bufLength > 0) Console.Write(" Program Info Log: \n\n{0}", buf.ToString()); Console.WriteLine(); } else { string stream = ""; stream = String.Format("Could not link shader program \n{0}", buf.ToString()); throw new Exception(stream); } return program; }
public void AddModel(InstancedModel model, ShaderProgram program) { var programHandle = program.GetHandle(); GL.UseProgram(programHandle); model.SaveAs(programHandle); int ambLU = GL.GetUniformLocation(programHandle, "ambientLight"); int viewU = GL.GetUniformLocation(programHandle, "viewMatrix"); int projU = GL.GetUniformLocation(programHandle, "projMatrix"); _renderables.Add(new Renderable(model, program, ambLU, viewU, projU)); }
public Renderable(InstancedModel m, ShaderProgram prog, int a, int v, int p) { model = m; program = prog; ambientLightUniform = a; viewUniform = v; projUniform = p; }