gl.ShadeModel(OpenGL.GL_SMOOTH);
float[] vertices = {
-0.8f, -0.8f, 0.0f, 1.0f,
0.0f, 0.8f, 0.0f, 1.0f,
0.8f, -0.8f, 0.0f, 1.0f
};
float[] colors = {
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
gl.GenVertexArrays(1, vaoId);
gl.BindVertexArray(vaoId[0]);
gl.GenBuffers(1, vertexBufferId);
gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, vertexBufferId[0]);
unsafe
{
fixed (float* verts = vertices)
{
var ptr = new IntPtr(verts);
gl.BufferData(OpenGL.GL_ARRAY_BUFFER, vertices.Length * sizeof(float), ptr, OpenGL.GL_STATIC_DRAW);
}
}
gl.VertexAttribPointer(0, 4, OpenGL.GL_FLOAT, false, 0, new IntPtr(0));
gl.EnableVertexAttribArray(0);
gl.GenBuffers(1, colorBufferId);
gl.BindBuffer(OpenGL.GL_ARRAY_BUFFER, colorBufferId[0]);
unsafe
{
fixed (float* colr = colors)
{
var ptr = new IntPtr(colr);
gl.BufferData(OpenGL.GL_ARRAY_BUFFER, colors.Length * sizeof(float), ptr, OpenGL.GL_STATIC_DRAW);
}
}
gl.VertexAttribPointer(1, 4, OpenGL.GL_FLOAT, false, 0, new IntPtr(0));
gl.EnableVertexAttribArray(1);
vertexShaderId = gl.CreateShader(OpenGL.GL_VERTEX_SHADER);
fragmentShaderId = gl.CreateShader(OpenGL.GL_FRAGMENT_SHADER);
string[] vertString = File.ReadAllLines("vertShader.vert");
string[] fragString = File.ReadAllLines("fragShader.frag");
unsafe
{
gl.ShaderSource(vertexShaderId, vertString.Length, vertString, null);
gl.ShaderSource(fragmentShaderId, fragString.Length, fragString, null);
}
gl.CompileShader(vertexShaderId);
int[] compileStatus = new int[1];
gl.GetShader(vertexShaderId, OpenGL.GL_COMPILE_STATUS, compileStatus);
if (compileStatus[0] != OpenGL.GL_TRUE)
{
Application.Exit();
}
gl.CompileShader(fragmentShaderId);
gl.GetShader(vertexShaderId, OpenGL.GL_COMPILE_STATUS, compileStatus);
if (compileStatus[0] != OpenGL.GL_TRUE)
{
Application.Exit();
}
programId = gl.CreateProgram();
gl.AttachShader(programId, vertexShaderId);
gl.AttachShader(programId, fragmentShaderId);
gl.LinkProgram(programId);
int[] linkStatus = new int[1];
gl.GetProgram(programId, OpenGL.GL_LINK_STATUS, linkStatus);
if (linkStatus[0] != OpenGL.GL_TRUE)
{
Application.Exit();
}
gl.UseProgram(programId);