diff options
| author | Adrian Ulbrich <adrian.ulbrich.2003@gmail.com> | 2019-11-09 01:45:40 +0100 |
|---|---|---|
| committer | Adrian Ulbrich <adrian.ulbrich.2003@gmail.com> | 2019-11-09 01:45:40 +0100 |
| commit | 6fd78657f010bcc48c746a7b1e6ae9a0589adf5b (patch) | |
| tree | 479512c0858e3ddfbcd891a193dfc96530771087 /Unicity.Renderer/GraphicsRenderer.cs | |
| parent | 3b214e75effaca1ba67daaf29d0a94e5b0129386 (diff) | |
| download | Unicity-6fd78657f010bcc48c746a7b1e6ae9a0589adf5b.tar.gz Unicity-6fd78657f010bcc48c746a7b1e6ae9a0589adf5b.tar.bz2 Unicity-6fd78657f010bcc48c746a7b1e6ae9a0589adf5b.zip | |
Can render triangles now
Diffstat (limited to 'Unicity.Renderer/GraphicsRenderer.cs')
| -rw-r--r-- | Unicity.Renderer/GraphicsRenderer.cs | 111 |
1 files changed, 93 insertions, 18 deletions
diff --git a/Unicity.Renderer/GraphicsRenderer.cs b/Unicity.Renderer/GraphicsRenderer.cs index 4a794c9..1df8bfb 100644 --- a/Unicity.Renderer/GraphicsRenderer.cs +++ b/Unicity.Renderer/GraphicsRenderer.cs @@ -1,45 +1,120 @@ -using System.IO; +using System; +using System.Collections.Generic; +using System.IO; +using OpenTK; using OpenTK.Graphics.OpenGL4; +using Unicity.Renderer.Shapes; namespace Unicity.Renderer { - public class GraphicsRenderer + public class GraphicsRenderer : IDisposable { RenderWindow window = null; // Tests - float[] vertices = - { - -0.5f, -0.5f, 0.0f, - 0.5f, -0.5f, 0.0f, - 0.0f, 0.5f, 0.0f - }; + List<float> triangleVerts = new List<float>(); + int triangleCount = -1; + int triangleVBO = -1; + int triangleVAO = -1; Shader shader = null; - int VBO = 0; + bool disposed = false; public GraphicsRenderer(RenderWindow window) { this.window = window; + window.Render += Window_Render; + + string vertexCode = File.ReadAllText("shaders/test.vert"); + string fragmentCode = File.ReadAllText("shaders/test.frag"); + + shader = new Shader(vertexCode, fragmentCode); + shader.Use(); + + shader.SetUniform("inColor", new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); + + GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f); + SetRenderData(new Shape[0]); } - public void TestInit() + public void SetRenderData(Shape[] shapes) { - window.MakeCurrent(); + triangleVerts = new List<float>(); - string vertexCode = File.ReadAllText("shaders/test.vert"); + triangleCount = 0; + + for (int i = 0; i < shapes.Length; i++) + { + if (typeof(Triangle) == shapes[i].GetType()) + { + foreach (float val in ((Triangle)shapes[i]).Vertices) + { + triangleVerts.Add(val); + } + + triangleCount++; + } + } + + if (triangleVAO != -1) + { + GL.DeleteVertexArray(triangleVAO); + } + + if (triangleVBO != -1) + { + GL.DeleteBuffer(triangleVBO); + } - shader = new Shader(vertexCode, ""); + triangleVAO = GL.GenVertexArray(); + triangleVBO = GL.GenBuffer(); - VBO = GL.GenBuffer(); - GL.BindBuffer(BufferTarget.ArrayBuffer, VBO); - GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw); + GL.BindVertexArray(triangleVAO); + GL.BindBuffer(BufferTarget.ArrayBuffer, triangleVBO); + GL.BufferData(BufferTarget.ArrayBuffer, triangleVerts.Count * sizeof(float), triangleVerts.ToArray(), BufferUsageHint.DynamicDraw); + + GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0); + GL.EnableVertexAttribArray(0); + + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + GL.BindVertexArray(0); } - public void TestLoop() + private void Window_Render(object sender, System.EventArgs e) { window.MakeCurrent(); + + shader.Use(); + + GL.BindVertexArray(triangleVAO); + GL.DrawArrays(PrimitiveType.Triangles, 0, triangleCount * 3); + GL.BindVertexArray(0); + } + + protected virtual void Dispose(bool disposing) + { + if (disposed) + { + return; + } + + if (disposing) + { + // Dispose of managed resources + } + + // Dispose of unmanaged resources + GL.DeleteVertexArray(triangleVAO); + GL.DeleteBuffer(triangleVBO); + + disposed = true; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); } } -} +}
\ No newline at end of file |
