Exemple #1
0
        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();
                }
        }