private void BuildFrameData() { meshVbo = new VBO(); meshVbo.SetData(new[] { new Vertex(0.0f, 0.5f, Color4.Red), new Vertex(-0.5f, -0.5f, Color4.Green), new Vertex(0.5f, -0.5f, Color4.Blue) }); meshVao = new VAO(3); // 3 вершины // Нулевой атрибут вершины – позиция, у неё 2 компонента типа float meshVao.AttachVBO(0, meshVbo, 2, VertexAttribPointerType.Float, 5 * sizeof(float), 0); // Первый атрибут вершины – цвет, у него 3 компонента типа float meshVao.AttachVBO(1, meshVbo, 3, VertexAttribPointerType.Float, 5 * sizeof(float), 2 * sizeof(float)); shaderProgram = new ShaderProgram(); using (var vertexShader = new Shader(ShaderType.VertexShader)) using (var fragmentShader = new Shader(ShaderType.FragmentShader)) { System.Console.WriteLine("vertexShader.Compile"); vertexShader.Compile(@" #version 400 layout(location = 0) in vec2 Position; layout(location = 1) in vec3 Color; out vec3 fragColor; void main() { gl_Position = vec4(Position, 0.0, 1.0); fragColor = Color; } " ); fragmentShader.Compile(@" #version 400 in vec3 fragColor; layout(location = 0) out vec4 outColor; void main() { outColor = vec4(fragColor, 1.0); } " ); System.Console.WriteLine("shaderProgram.AttachShader(vertexShader);"); shaderProgram.AttachShader(vertexShader); shaderProgram.AttachShader(fragmentShader); shaderProgram.Link(); } }