public void Link() { GL.LinkProgram(ProgramID); Console.WriteLine(GL.GetProgramInfoLog(ProgramID)); GL.GetProgram(ProgramID, GetProgramParameterName.ActiveAttributes, out AttributeCount); GL.GetProgram(ProgramID, GetProgramParameterName.ActiveUniforms, out UniformCount); for (int i = 0; i < AttributeCount; i++) { AttributeInfo info = new AttributeInfo(); int length = 0; StringBuilder name = new StringBuilder(); GL.GetActiveAttrib(ProgramID, i, 256, out length, out info.size, out info.type, name); info.name = name.ToString(); info.address = GL.GetAttribLocation(ProgramID, info.name); Attributes.Add(name.ToString(), info); } for (int i = 0; i < UniformCount; i++) { UniformInfo info = new UniformInfo(); int length = 0; StringBuilder name = new StringBuilder(); GL.GetActiveUniform(ProgramID, i, 256, out length, out info.size, out info.type, name); info.name = name.ToString(); Uniforms.Add(name.ToString(), info); info.address = GL.GetUniformLocation(ProgramID, info.name); } }