diff --git a/Diamond/Shaders/Program.cs b/Diamond/Shaders/Program.cs index a6c3be6..fc8b027 100644 --- a/Diamond/Shaders/Program.cs +++ b/Diamond/Shaders/Program.cs @@ -39,7 +39,7 @@ namespace Diamond.Shaders } GL.UseProgram(program?.Id ?? 0); - Logger.Debug("Using {0}", (object) program ?? "default program"); + Logger.Trace("Using {0}", (object) program ?? "default program"); _current = program; } diff --git a/hexworld/HexRender.cs b/hexworld/HexRender.cs index fdd4354..af1826a 100644 --- a/hexworld/HexRender.cs +++ b/hexworld/HexRender.cs @@ -20,32 +20,69 @@ namespace hexworld Y = (DisplayDevice.Default.Height - Height) / 2; } - private Program _pgm; - private Buffer _buf; + private int _triVao; + private Buffer _triVbo; + private Program _whitePgm; - /// - protected override void OnUnload(EventArgs e) - { - base.OnUnload(e); - - _pgm?.Dispose(); - } + private int _recVao; + private Buffer _recVbo; + private Program _redPgm; /// protected override void OnLoad(EventArgs e) { base.OnLoad(e); - _pgm = Program.FromFiles("res/obj.fs.glsl", "res/obj.vs.glsl"); + var vs = Shader.FromFile("res/direct.vs.glsl"); + var red = Shader.FromFile("res/red.fs.glsl"); + var white = Shader.FromFile("res/white.fs.glsl"); + _whitePgm = Program.FromShaders(vs, red); + _redPgm = Program.FromShaders(vs, white); - Program.Current = _pgm; - - _buf = Buffer.FromData(new float[] + _triVbo = Buffer.FromData(new float[] { -.8f, -.8f, +.8f, -.8f, +.0f, +.8f }); + _triVao = GL.GenVertexArray(); + GL.BindVertexArray(_triVao); + Program.Current = _redPgm; + Buffer.ArrayBuffer = _triVbo; + GL.EnableVertexAttribArray(0); + GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 0, 0); + + _recVbo = Buffer.FromData(new float[] + { + -.9f, -.5f, + +.9f, -.5f, + +.9f, +.5f, + +.9f, +.5f, + -.9f, +.5f, + -.9f, -.5f, + }); + _recVao = GL.GenVertexArray(); + GL.BindVertexArray(_recVao); + Program.Current = _whitePgm; + Buffer.ArrayBuffer = _recVbo; + GL.EnableVertexAttribArray(0); + GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 0, 0); + + vs?.Dispose(); + red?.Dispose(); + white?.Dispose(); + } + + /// + protected override void OnUnload(EventArgs e) + { + base.OnUnload(e); + + _triVbo?.Dispose(); + _recVbo?.Dispose(); + + _whitePgm?.Dispose(); + _redPgm?.Dispose(); } /// @@ -57,6 +94,14 @@ namespace hexworld GL.Clear(ClearBufferMask.ColorBufferBit); + Program.Current = _redPgm; + GL.BindVertexArray(_triVao); + GL.DrawArrays(PrimitiveType.Triangles, 0, 3); + + Program.Current = _whitePgm; + GL.BindVertexArray(_recVao); + GL.DrawArrays(PrimitiveType.Triangles, 0, 6); + SwapBuffers(); } } diff --git a/hexworld/hexworld.csproj b/hexworld/hexworld.csproj index 805bca4..8574fc3 100644 --- a/hexworld/hexworld.csproj +++ b/hexworld/hexworld.csproj @@ -76,6 +76,15 @@ Always + + Always + + + Always + + + Always + Always diff --git a/hexworld/res/direct.vs.glsl b/hexworld/res/direct.vs.glsl new file mode 100644 index 0000000..c9fdccf --- /dev/null +++ b/hexworld/res/direct.vs.glsl @@ -0,0 +1,8 @@ +#version 440 + +in vec3 v; + +void main () +{ + gl_Position = vec4(v, 1); +} \ No newline at end of file diff --git a/hexworld/res/red.fs.glsl b/hexworld/res/red.fs.glsl new file mode 100644 index 0000000..385c125 --- /dev/null +++ b/hexworld/res/red.fs.glsl @@ -0,0 +1,6 @@ +#version 440 + +void main () +{ + gl_FragColor = vec4(1,0,0,1); +} \ No newline at end of file diff --git a/hexworld/res/white.fs.glsl b/hexworld/res/white.fs.glsl new file mode 100644 index 0000000..52af899 --- /dev/null +++ b/hexworld/res/white.fs.glsl @@ -0,0 +1,6 @@ +#version 440 + +void main () +{ + gl_FragColor = vec4(1); +} \ No newline at end of file