Skip to content

Commit 51c4453

Browse files
feat: use of IBO
1 parent 7e45e49 commit 51c4453

1 file changed

Lines changed: 27 additions & 11 deletions

File tree

FreeFrame/Window.cs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,24 @@ namespace FreeFrame
1212
class Window : GameWindow
1313
{
1414
int _vertexBuffer;
15-
1615
int _vertexArray;
17-
16+
int _indexBuffer;
1817
int _shader;
1918

2019
public readonly float[] _vertices =
2120
{
22-
0.0f, 0.5f, 0.0f, // Top
23-
-0.5f, -0.5f, 0.0f, // Bottom-Left
24-
0.5f, -0.5f, 0.0f // Bottom-Right
21+
0.5f, 0.5f, 0.0f, // Top-Right
22+
0.5f, -0.5f, 0.0f, // Bottom-Right
23+
-0.5f, -0.5f, 0.0f, // Bottom-Left
24+
-0.5f, 0.5f, 0.0f, // Top-Left
25+
};
26+
27+
public readonly uint[] _indices =
28+
{
29+
0, 1, 2, // First triangle
30+
0, 2, 3, // Second triangle
2531
};
32+
2633
public Window(GameWindowSettings gameWindowSettings, NativeWindowSettings nativeWindowSettings) : base(gameWindowSettings, nativeWindowSettings) { }
2734

2835
static int CompileShader(string uri, ShaderType type)
@@ -69,18 +76,25 @@ protected override void OnLoad()
6976

7077
GL.ClearColor(0.1f, 0.1f, 0.1f, 1.0f);
7178

79+
// Vertex Buffer Object
7280
_vertexBuffer = GL.GenBuffer();
7381
GL.BindBuffer(BufferTarget.ArrayBuffer, _vertexBuffer);
7482
GL.BufferData(BufferTarget.ArrayBuffer, _vertices.Length * sizeof(float), _vertices, BufferUsageHint.StaticDraw);
7583

76-
_vertexArray = GL.GenVertexArray(); // TODO: Why a vertex array is necessary ?
84+
// Vertex Array Object
85+
_vertexArray = GL.GenVertexArray(); // TODO: Why a vertex array is necessary? Why not only use VertexAttribPointer?
7786
GL.BindVertexArray(_vertexArray);
7887

7988
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
8089
GL.EnableVertexAttribArray(0);
8190

82-
_shader = CreateShader("Shaders/shader.vert", "Shaders/shader.frag");
91+
// Index Buffer Object
92+
_indexBuffer = GL.GenBuffer();
93+
GL.BindBuffer(BufferTarget.ElementArrayBuffer, _indexBuffer);
94+
GL.BufferData(BufferTarget.ElementArrayBuffer, _indices.Length * sizeof(uint), _indices, BufferUsageHint.StaticDraw);
8395

96+
// Shaders
97+
_shader = CreateShader("Shaders/shader.vert", "Shaders/shader.frag");
8498
GL.UseProgram(_shader);
8599
}
86100
protected override void OnResize(ResizeEventArgs e)
@@ -106,10 +120,10 @@ protected override void OnRenderFrame(FrameEventArgs e)
106120

107121
GL.Clear(ClearBufferMask.ColorBufferBit); // Clear the color
108122

109-
GL.UseProgram(_shader);
110-
GL.BindVertexArray(_vertexArray);
123+
//GL.UseProgram(_shader);
124+
//GL.BindVertexArray(_vertexArray);
111125

112-
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
126+
GL.DrawElements(PrimitiveType.Triangles, _indices.Length, DrawElementsType.UnsignedInt, 0);
113127

114128
SwapBuffers();
115129
}
@@ -119,11 +133,13 @@ protected override void OnUnload()
119133
base.OnUnload();
120134

121135
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
122-
GL.BindVertexArray(_vertexArray);
136+
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
137+
GL.BindVertexArray(0);
123138
GL.UseProgram(0);
124139

125140
GL.DeleteProgram(_shader);
126141
GL.DeleteBuffer(_vertexBuffer);
142+
GL.DeleteBuffer(_indexBuffer);
127143
GL.DeleteVertexArray(_vertexArray);
128144
}
129145
}

0 commit comments

Comments
 (0)