@@ -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