From 3b214e75effaca1ba67daaf29d0a94e5b0129386 Mon Sep 17 00:00:00 2001 From: Adrian Ulbrich Date: Fri, 8 Nov 2019 23:56:17 +0100 Subject: Started work on actual engine --- Unicity.Engine/GameObject.cs | 27 +++++ Unicity.Engine/GameWindow.cs | 63 ++++++++++ Unicity.Engine/Model.cs | 7 ++ Unicity.Engine/Properties/AssemblyInfo.cs | 36 ++++++ Unicity.Engine/Unicity.Engine.csproj | 61 ++++++++++ Unicity.Game/App.config | 6 + Unicity.Game/Program.cs | 15 +++ Unicity.Game/Properties/AssemblyInfo.cs | 36 ++++++ Unicity.Game/Unicity.Game.csproj | 59 ++++++++++ Unicity.RenderTest/App.config | 6 - Unicity.RenderTest/Program.cs | 88 -------------- Unicity.RenderTest/Properties/AssemblyInfo.cs | 36 ------ Unicity.RenderTest/Unicity.RenderTest.csproj | 59 ---------- Unicity.Renderer/Camera.cs | 50 -------- Unicity.Renderer/GraphicsRenderer.cs | 102 ++++------------- Unicity.Renderer/Properties/AssemblyInfo.cs | 12 +- Unicity.Renderer/Properties/Resources.Designer.cs | 83 -------------- Unicity.Renderer/Properties/Resources.resx | 127 --------------------- Unicity.Renderer/RenderWindow.cs | 89 +++++---------- Unicity.Renderer/Resources/fragmentShader.frag | 10 -- Unicity.Renderer/Resources/vertexShader.vert | 19 --- Unicity.Renderer/Shader.cs | 92 +++------------ .../ShaderCompilationFailedException.cs | 9 -- Unicity.Renderer/Shapes/Rectangle.cs | 26 ----- Unicity.Renderer/Shapes/Shape.cs | 17 --- Unicity.Renderer/Shapes/Triangle.cs | 50 -------- Unicity.Renderer/Unicity.Renderer.csproj | 34 ++---- Unicity.Renderer/WindowCreationFailedException.cs | 12 -- Unicity.Renderer/shaders/test.frag | 1 + Unicity.Renderer/shaders/test.vert | 8 ++ Unicity.sln | 26 +++-- 31 files changed, 416 insertions(+), 850 deletions(-) create mode 100644 Unicity.Engine/GameObject.cs create mode 100644 Unicity.Engine/GameWindow.cs create mode 100644 Unicity.Engine/Model.cs create mode 100644 Unicity.Engine/Properties/AssemblyInfo.cs create mode 100644 Unicity.Engine/Unicity.Engine.csproj create mode 100644 Unicity.Game/App.config create mode 100644 Unicity.Game/Program.cs create mode 100644 Unicity.Game/Properties/AssemblyInfo.cs create mode 100644 Unicity.Game/Unicity.Game.csproj delete mode 100644 Unicity.RenderTest/App.config delete mode 100644 Unicity.RenderTest/Program.cs delete mode 100644 Unicity.RenderTest/Properties/AssemblyInfo.cs delete mode 100644 Unicity.RenderTest/Unicity.RenderTest.csproj delete mode 100644 Unicity.Renderer/Camera.cs delete mode 100644 Unicity.Renderer/Properties/Resources.Designer.cs delete mode 100644 Unicity.Renderer/Properties/Resources.resx delete mode 100644 Unicity.Renderer/Resources/fragmentShader.frag delete mode 100644 Unicity.Renderer/Resources/vertexShader.vert delete mode 100644 Unicity.Renderer/ShaderCompilationFailedException.cs delete mode 100644 Unicity.Renderer/Shapes/Rectangle.cs delete mode 100644 Unicity.Renderer/Shapes/Shape.cs delete mode 100644 Unicity.Renderer/Shapes/Triangle.cs delete mode 100644 Unicity.Renderer/WindowCreationFailedException.cs create mode 100644 Unicity.Renderer/shaders/test.frag create mode 100644 Unicity.Renderer/shaders/test.vert diff --git a/Unicity.Engine/GameObject.cs b/Unicity.Engine/GameObject.cs new file mode 100644 index 0000000..b59dd8b --- /dev/null +++ b/Unicity.Engine/GameObject.cs @@ -0,0 +1,27 @@ +namespace Unicity.Engine +{ + public class GameObject + { + public float X = 0; + public float Y = 0; + public float Z = 0; + + public float ScaleX = 0; + public float ScaleY = 0; + public float ScaleZ = 0; + + public Model Model = null; + + public GameObject() + { + + } + + public GameObject(float x, float y, float z) + { + X = x; + Y = y; + Z = z; + } + } +} diff --git a/Unicity.Engine/GameWindow.cs b/Unicity.Engine/GameWindow.cs new file mode 100644 index 0000000..cb44eb8 --- /dev/null +++ b/Unicity.Engine/GameWindow.cs @@ -0,0 +1,63 @@ +using System; +using Unicity.Renderer; + +namespace Unicity.Engine +{ + public class GameWindow : IDisposable + { + RenderWindow window = null; + GraphicsRenderer renderer = null; + + public int Width { get => window.Width; set => window.Width = value; } + public int Height { get => window.Height; set => window.Height = value; } + + public string Title { get => window.Title; set => window.Title = value; } + + bool disposed = false; + + public GameWindow(int width = 800, int height = 800, string title = "Unicity Renderer written by Adrian Ulbrich") + { + window = new RenderWindow(width, height, title); + renderer = new GraphicsRenderer(window); + + window.Render += Window_Render; + + renderer.TestInit(); + } + + private void Window_Render(object sender, EventArgs e) + { + renderer.TestLoop(); + } + + public void Open(double ups = 60.0, double fps = 60.0) + { + window.Open(ups, fps); + renderer.TestInit(); + } + + protected virtual void Dispose(bool disposing) + { + if (disposed) + { + return; + } + + if (disposing) + { + // Dispose of managed resources + } + + // Dispose of unmanaged resources + window?.Dispose(); + + disposed = true; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + } +} diff --git a/Unicity.Engine/Model.cs b/Unicity.Engine/Model.cs new file mode 100644 index 0000000..ab5a2e7 --- /dev/null +++ b/Unicity.Engine/Model.cs @@ -0,0 +1,7 @@ +namespace Unicity.Engine +{ + public class Model + { + + } +} diff --git a/Unicity.Engine/Properties/AssemblyInfo.cs b/Unicity.Engine/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b6ce7aa --- /dev/null +++ b/Unicity.Engine/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("Unicity.Engine")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Unicity.Engine")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("cbf47abd-0454-496a-b3e3-848d27317c59")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Unicity.Engine/Unicity.Engine.csproj b/Unicity.Engine/Unicity.Engine.csproj new file mode 100644 index 0000000..e077857 --- /dev/null +++ b/Unicity.Engine/Unicity.Engine.csproj @@ -0,0 +1,61 @@ + + + + + Debug + AnyCPU + {CBF47ABD-0454-496A-B3E3-848D27317C59} + Library + Unicity.Engine + Unicity.Engine + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + {7c0c6e9f-6bc9-4825-b657-8dace26cf4fd} + Unicity.Renderer + + + + \ No newline at end of file diff --git a/Unicity.Game/App.config b/Unicity.Game/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/Unicity.Game/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Unicity.Game/Program.cs b/Unicity.Game/Program.cs new file mode 100644 index 0000000..479385e --- /dev/null +++ b/Unicity.Game/Program.cs @@ -0,0 +1,15 @@ +using Unicity.Engine; + +namespace Unicity.Game +{ + class Program + { + static void Main(string[] args) + { + using (GameWindow gameWindow = new GameWindow(400, 400, "Render Test")) + { + gameWindow.Open(); + } + } + } +} diff --git a/Unicity.Game/Properties/AssemblyInfo.cs b/Unicity.Game/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8ebde5e --- /dev/null +++ b/Unicity.Game/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("Unicity.Game")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Unicity.Game")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("4c824664-944b-4dca-89be-8cf16d249f51")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Unicity.Game/Unicity.Game.csproj b/Unicity.Game/Unicity.Game.csproj new file mode 100644 index 0000000..01f81ba --- /dev/null +++ b/Unicity.Game/Unicity.Game.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {4C824664-944B-4DCA-89BE-8CF16D249F51} + Exe + Unicity.Game + Unicity.Game + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + {cbf47abd-0454-496a-b3e3-848d27317c59} + Unicity.Engine + + + + \ No newline at end of file diff --git a/Unicity.RenderTest/App.config b/Unicity.RenderTest/App.config deleted file mode 100644 index 56efbc7..0000000 --- a/Unicity.RenderTest/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Unicity.RenderTest/Program.cs b/Unicity.RenderTest/Program.cs deleted file mode 100644 index 5a3bbc5..0000000 --- a/Unicity.RenderTest/Program.cs +++ /dev/null @@ -1,88 +0,0 @@ -using Unicity.Renderer; -using Unicity.Renderer.Shapes; - -namespace Unicity.RenderTest -{ - class Program - { - static RenderWindow window = null; - static Camera camera = null; - static GraphicsRenderer renderer = null; - - static Rectangle[] cube = null; - - static void Main(string[] args) - { - camera = new Camera(CameraProjectionMode.Perspective); - - using (window = new RenderWindow(400, 400, "Render Test")) - using (renderer = new GraphicsRenderer(window, camera)) - { - window.Init += Window_Init; - window.Update += Window_Update; - window.Render += Window_Render; - window.Destroy += Window_Destroy; - - window.Open(); - } - } - - private static void Window_Init(object sender, System.EventArgs e) - { - renderer.SetClearColor(0.0f, 0.0f, 0.0f, 1.0f); - renderer.SetDrawColor(1.0f, 0.0f, 1.0f); - - cube = new Rectangle[] - { - new Rectangle(-1.0f, 1.0f, -1.0f, - 1.0f, 1.0f, -1.0f, - -1.0f, -1.0f, -1.0f, - 1.0f, -1.0f, -1.0f), - - new Rectangle(-1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f, -1.0f, 1.0f, - 1.0f, -1.0f, 1.0f), - - new Rectangle(-1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f, 1.0f, -1.0f, - 1.0f, 1.0f, -1.0f), - - new Rectangle(-1.0f, -1.0f, 1.0f, - 1.0f, -1.0f, 1.0f, - -1.0f, -1.0f, -1.0f, - 1.0f, -1.0f, -1.0f), - - new Rectangle(-1.0f, 1.0f, -1.0f, - -1.0f, 1.0f, 1.0f, - -1.0f, -1.0f, -1.0f, - -1.0f, -1.0f, -1.0f), - - new Rectangle(1.0f, 1.0f, -1.0f, - 1.0f, 1.0f, 1.0f, - 1.0f, -1.0f, -1.0f, - 1.0f, -1.0f, -1.0f) - }; - } - - private static void Window_Update(object sender, System.EventArgs e) - { - - } - - private static void Window_Render(object sender, System.EventArgs e) - { - renderer.ClearScreen(); - renderer.DrawShapes(cube); - } - - private static void Window_Destroy(object sender, System.EventArgs e) - { - foreach (Rectangle rect in cube) - { - rect.Dispose(); - } - } - } -} diff --git a/Unicity.RenderTest/Properties/AssemblyInfo.cs b/Unicity.RenderTest/Properties/AssemblyInfo.cs deleted file mode 100644 index d5a6093..0000000 --- a/Unicity.RenderTest/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die einer Assembly zugeordnet sind. -[assembly: AssemblyTitle("Unicity Render Test")] -[assembly: AssemblyDescription("Test for the Unicity renderer")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Alee Productions")] -[assembly: AssemblyProduct("Unicity Renderer Test")] -[assembly: AssemblyCopyright("Copyright © 2019 Alee Productions")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly -// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von -// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("0155c998-9189-4c19-8dcc-13499797c7ea")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, -// indem Sie "*" wie unten gezeigt eingeben: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Unicity.RenderTest/Unicity.RenderTest.csproj b/Unicity.RenderTest/Unicity.RenderTest.csproj deleted file mode 100644 index 556c185..0000000 --- a/Unicity.RenderTest/Unicity.RenderTest.csproj +++ /dev/null @@ -1,59 +0,0 @@ - - - - - Debug - AnyCPU - {0155C998-9189-4C19-8DCC-13499797C7EA} - Exe - Unicity.RenderTest - RenderTest - v4.7.2 - 512 - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - {f6ebb1f8-fca9-4a8d-a807-e877cd047908} - Unicity.Renderer - - - - \ No newline at end of file diff --git a/Unicity.Renderer/Camera.cs b/Unicity.Renderer/Camera.cs deleted file mode 100644 index b58b571..0000000 --- a/Unicity.Renderer/Camera.cs +++ /dev/null @@ -1,50 +0,0 @@ -using OpenTK; - -namespace Unicity.Renderer -{ - public enum CameraProjectionMode - { - Ortographic, - Perspective - } - - public class Camera - { - float x = 0f; - float y = 0f; - float z = 0f; - - Matrix4 projectionMatrix = Matrix4.Identity; - - CameraProjectionMode projectionMode = CameraProjectionMode.Ortographic; - - public Camera(CameraProjectionMode projectionMode = CameraProjectionMode.Ortographic) - { - this.projectionMode = projectionMode; - } - - public void Initialize() - { - switch (projectionMode) - { - case CameraProjectionMode.Ortographic: - projectionMatrix = Matrix4.CreateOrthographic(600f, 600.0f, 0.1f, 100f); - break; - case CameraProjectionMode.Perspective: - projectionMatrix = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(45f), 1f, 0.1f, 100f); - break; - - } - } - - public void UpdateView(Shader shader) - { - Matrix4 modelMatrix = Matrix4.CreateRotationX(MathHelper.DegreesToRadians(-55.0f)); - Matrix4 viewMatrix = Matrix4.CreateTranslation(0.0f, 0.0f, -8.0f); - - shader.SetUniform("model", modelMatrix); - shader.SetUniform("view", viewMatrix); - shader.SetUniform("projection", projectionMatrix); - } - } -} diff --git a/Unicity.Renderer/GraphicsRenderer.cs b/Unicity.Renderer/GraphicsRenderer.cs index 6508a4c..4a794c9 100644 --- a/Unicity.Renderer/GraphicsRenderer.cs +++ b/Unicity.Renderer/GraphicsRenderer.cs @@ -1,103 +1,45 @@ -using System; -using System.Text; -using OpenTK; +using System.IO; using OpenTK.Graphics.OpenGL4; -using Unicity.Renderer.Shapes; namespace Unicity.Renderer { - public class GraphicsRenderer : IDisposable + public class GraphicsRenderer { - public RenderWindow window { get; } - public Camera camera = null; + RenderWindow window = null; - Shader shader = null; - - public GraphicsRenderer(RenderWindow window, Camera camera) - { - this.window = window; - this.camera = camera; - - Console.WriteLine("Compiling GLSL shaders..."); - - string vertexShader = Encoding.UTF8.GetString(Properties.Resources.vertexShader); - string fragmentShader = Encoding.UTF8.GetString(Properties.Resources.fragmentShader); - shader = new Shader(vertexShader, fragmentShader); - shader.Use(); - - Console.WriteLine("Reticulating splines..."); - - GL.ClearDepth(1.0f); - GL.Enable(EnableCap.DepthTest); - GL.DepthFunc(DepthFunction.Lequal); - - camera.Initialize(); - window.Update += Window_Update; - - GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line); - } - - private void Window_Update(object sender, EventArgs e) - { - camera.UpdateView(shader); - shader.Use(); - } - - public void SetClearColor(float red, float green, float blue, float alpha) - { - GL.ClearColor(red, green, blue, alpha); - } - - public void SetDrawColor(float red, float green, float blue) + // Tests + float[] vertices = { - shader.SetUniform("color", new Vector3(red, green, blue)); - } + -0.5f, -0.5f, 0.0f, + 0.5f, -0.5f, 0.0f, + 0.0f, 0.5f, 0.0f + }; - public void DrawShape(Shape shape) - { - shape.Draw(shader, this); - } + Shader shader = null; - public void DrawShapes(Shape[] shapes) - { - foreach (Shape shape in shapes) - { - DrawShape(shape); - } - } + int VBO = 0; - public void ClearScreen() + public GraphicsRenderer(RenderWindow window) { - window.window.MakeCurrent(); - GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + this.window = window; } - bool disposed = false; - protected virtual void Dispose(bool disposing) + public void TestInit() { - // Return of already disposed - if (disposed) - { - return; - } + window.MakeCurrent(); - if (disposing) - { - // Free managed objects here - } + string vertexCode = File.ReadAllText("shaders/test.vert"); - // Dispose of any unmanaged resources - window?.Dispose(); - shader.Delete(); + shader = new Shader(vertexCode, ""); - // Set disposed flag to true - disposed = true; + VBO = GL.GenBuffer(); + GL.BindBuffer(BufferTarget.ArrayBuffer, VBO); + GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw); } - public void Dispose() + public void TestLoop() { - Dispose(true); - GC.SuppressFinalize(this); + window.MakeCurrent(); } } } diff --git a/Unicity.Renderer/Properties/AssemblyInfo.cs b/Unicity.Renderer/Properties/AssemblyInfo.cs index b86f96f..1bb3a9f 100644 --- a/Unicity.Renderer/Properties/AssemblyInfo.cs +++ b/Unicity.Renderer/Properties/AssemblyInfo.cs @@ -5,12 +5,12 @@ using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, // die einer Assembly zugeordnet sind. -[assembly: AssemblyTitle("Unicity Renderer")] -[assembly: AssemblyDescription("Renderer for the Unicity game")] +[assembly: AssemblyTitle("Unicity.Renderer")] +[assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Alee Productions")] -[assembly: AssemblyProduct("Unicity Renderer")] -[assembly: AssemblyCopyright("Copyright © 2019 Alee Productions")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Unicity.Renderer")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -20,7 +20,7 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("f6ebb1f8-fca9-4a8d-a807-e877cd047908")] +[assembly: Guid("7c0c6e9f-6bc9-4825-b657-8dace26cf4fd")] // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: // diff --git a/Unicity.Renderer/Properties/Resources.Designer.cs b/Unicity.Renderer/Properties/Resources.Designer.cs deleted file mode 100644 index c1bc96c..0000000 --- a/Unicity.Renderer/Properties/Resources.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 -// -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. -// -//------------------------------------------------------------------------------ - -namespace Unicity.Renderer.Properties { - using System; - - - /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Unicity.Renderer.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// - internal static byte[] fragmentShader { - get { - object obj = ResourceManager.GetObject("fragmentShader", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// - internal static byte[] vertexShader { - get { - object obj = ResourceManager.GetObject("vertexShader", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/Unicity.Renderer/Properties/Resources.resx b/Unicity.Renderer/Properties/Resources.resx deleted file mode 100644 index 093fbf3..0000000 --- a/Unicity.Renderer/Properties/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\fragmentShader.frag;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\vertexShader.vert;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Unicity.Renderer/RenderWindow.cs b/Unicity.Renderer/RenderWindow.cs index 2026780..4566295 100644 --- a/Unicity.Renderer/RenderWindow.cs +++ b/Unicity.Renderer/RenderWindow.cs @@ -1,6 +1,4 @@ using System; -using System.Diagnostics; -using System.Drawing; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL4; @@ -9,93 +7,67 @@ namespace Unicity.Renderer { public class RenderWindow : IDisposable { - const int UPS = 60; - - internal GameWindow window = null; - - Stopwatch loopTimer = new Stopwatch(); - - public event EventHandler Init; public event EventHandler Update; public event EventHandler Render; - public event EventHandler Destroy; - public int Width - { - get => window.ClientSize.Width; - set => window.ClientSize = new Size(value, window.ClientSize.Height); - } + GameWindow window = null; - public int Height - { - get => window.ClientSize.Height; - set => window.ClientSize = new Size(window.ClientSize.Width, value); - } + public int Width { get => window.Width; set => window.Width = value; } + public int Height { get => window.Height; set => window.Height = value; } - public string Title - { - get => window.Title; - set => window.Title = value; - } + public string Title { get => window.Title; set => window.Title = value; } - bool running = false; + bool disposed = false; public RenderWindow(int width, int height, string title) { - window = new GameWindow(width, height, GraphicsMode.Default, title, GameWindowFlags.Default); - + window = new GameWindow(width, height, GraphicsMode.Default, title, GameWindowFlags.Default, DisplayDevice.Default, 4, 0, GraphicsContextFlags.ForwardCompatible); + window.Load += Window_Load; + window.Resize += Window_Resize; window.UpdateFrame += Window_UpdateFrame; window.RenderFrame += Window_RenderFrame; - window.Unload += Window_Unload; - window.Resize += Window_Resize; } - - private void Window_UpdateFrame(object sender, FrameEventArgs e) + private void Window_Load(object sender, EventArgs e) { - Update?.Invoke(this, EventArgs.Empty); + GL.Viewport(0, 0, Width, Height); + GL.ClearColor(1.0f, 0.0f, 0.0f, 1.0f); } - private void Window_RenderFrame(object sender, FrameEventArgs e) + private void Window_Resize(object sender, EventArgs e) { - Render?.Invoke(this, EventArgs.Empty); - window.SwapBuffers(); + GL.Viewport(0, 0, Width, Height); } - private void Window_Unload(object sender, EventArgs e) + private void Window_UpdateFrame(object sender, FrameEventArgs e) { - Destroy?.Invoke(this, EventArgs.Empty); + Update?.Invoke(this, EventArgs.Empty); } - private void Window_Resize(object sender, EventArgs e) + private void Window_RenderFrame(object sender, FrameEventArgs e) { - GL.Viewport(0, 0, Width, Height); - Render?.Invoke(this, EventArgs.Empty); + GL.Clear(ClearBufferMask.ColorBufferBit); + + Update?.Invoke(this, EventArgs.Empty); + window.SwapBuffers(); } + + public void Open(double ups, double fps) + { + window.Run(ups, fps); + } - public void Open() + public void MakeCurrent() { - if (running) + if (window.IsExiting) { return; } - - Init?.Invoke(this, EventArgs.Empty); - window.VSync = VSyncMode.Off; - window.Run(UPS, 0); - - running = true; + window.MakeCurrent(); } - public double GetFPS() - { - return window.RenderFrequency; - } - - bool disposed = false; protected virtual void Dispose(bool disposing) { - // Return of already disposed if (disposed) { return; @@ -103,13 +75,12 @@ namespace Unicity.Renderer if (disposing) { - // Free managed objects here + // Dispose of managed resources } - // Dispose of any unmanaged resources + // Dispose of unmanaged resources window?.Dispose(); - // Set disposed flag to true disposed = true; } diff --git a/Unicity.Renderer/Resources/fragmentShader.frag b/Unicity.Renderer/Resources/fragmentShader.frag deleted file mode 100644 index a5941bd..0000000 --- a/Unicity.Renderer/Resources/fragmentShader.frag +++ /dev/null @@ -1,10 +0,0 @@ -#version 330 core - -out vec4 color; - -in vec4 inColor; - -void main() -{ - color = inColor; -} \ No newline at end of file diff --git a/Unicity.Renderer/Resources/vertexShader.vert b/Unicity.Renderer/Resources/vertexShader.vert deleted file mode 100644 index 330b3e0..0000000 --- a/Unicity.Renderer/Resources/vertexShader.vert +++ /dev/null @@ -1,19 +0,0 @@ -#version 330 core - -layout(location = 0) in vec3 vertexPosition_modelspace; - -uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; - -uniform vec3 color; -uniform float alpha; - -out vec4 inColor; - -void main() -{ - gl_Position = projection * view * model * vec4(vertexPosition_modelspace, 1.0); - - inColor = vec4(color, 1.0); -} \ No newline at end of file diff --git a/Unicity.Renderer/Shader.cs b/Unicity.Renderer/Shader.cs index 76393a0..6ee0b33 100644 --- a/Unicity.Renderer/Shader.cs +++ b/Unicity.Renderer/Shader.cs @@ -1,95 +1,31 @@ -using OpenTK; +using System; using OpenTK.Graphics.OpenGL4; namespace Unicity.Renderer { - public class Shader + class Shader { - int id = 0; + //int program = 0; - public Shader(string vertexShaderSource, string fragmentShaderSource) + public Shader(string vertexCode, string fragmentCode) { - int vertexShader = GL.CreateShader(ShaderType.VertexShader); - GL.ShaderSource(vertexShader, vertexShaderSource); - GL.CompileShader(vertexShader); + int vertex = GL.CreateShader(ShaderType.VertexShader); - int[] isCompiled = new int[1]; - GL.GetShader(vertexShader, ShaderParameter.CompileStatus, isCompiled); - if (isCompiled[0] == 0) - { - string infoLog = GL.GetShaderInfoLog(vertexShader); - GL.DeleteShader(vertexShader); - throw new ShaderCompilationFailedException("Failed to compile vertex shader:\n" + infoLog); - } + GL.ShaderSource(vertex, vertexCode); + GL.CompileShader(vertex); - int fragmentShader = GL.CreateShader(ShaderType.FragmentShader); - GL.ShaderSource(fragmentShader, fragmentShaderSource); - GL.CompileShader(fragmentShader); - - GL.GetShader(fragmentShader, ShaderParameter.CompileStatus, isCompiled); - if (isCompiled[0] == 0) + if (!Compiled(vertex)) { - string infoLog = GL.GetShaderInfoLog(fragmentShader); - GL.DeleteShader(fragmentShader); - GL.DeleteShader(vertexShader); - throw new ShaderCompilationFailedException("Failed to compile fragment shader:\n" + infoLog); + GL.DeleteShader(vertex); + throw new Exception("Failed to compile vertex shader: " + GL.GetShaderInfoLog(vertex)); } - - int program = GL.CreateProgram(); - - GL.AttachShader(program, vertexShader); - GL.AttachShader(program, fragmentShader); - - GL.LinkProgram(program); - - int[] isLinked = new int[1]; - GL.GetProgram(program, GetProgramParameterName.LinkStatus, isLinked); - if (isLinked[0] == 0) - { - string infoLog = GL.GetProgramInfoLog(program); - GL.DeleteProgram(program); - GL.DeleteShader(fragmentShader); - GL.DeleteShader(vertexShader); - throw new ShaderCompilationFailedException("Failed to link shader program"); - } - - GL.DetachShader(program, vertexShader); - GL.DetachShader(program, fragmentShader); - GL.DeleteShader(vertexShader); - GL.DeleteShader(fragmentShader); - - id = program; - } - - public void Use() - { - GL.UseProgram(id); - } - - public void SetUniform(string name, Matrix4 value) - { - int uniformLocation = GL.GetUniformLocation(id, name); - - GL.UniformMatrix4(uniformLocation, false, ref value); - } - - public void SetUniform(string name, Vector3 value) - { - int uniformLocation = GL.GetUniformLocation(id, name); - - GL.Uniform3(uniformLocation, ref value); - } - - public void SetUniform(string name, float value) - { - int uniformLocation = GL.GetUniformLocation(id, name); - - GL.Uniform1(uniformLocation, value); } - public void Delete() + private bool Compiled(int shader) { - GL.DeleteProgram(id); + int[] output = new int[1]; + GL.GetShader(shader, ShaderParameter.CompileStatus, output); + return output[0] != 0; } } } diff --git a/Unicity.Renderer/ShaderCompilationFailedException.cs b/Unicity.Renderer/ShaderCompilationFailedException.cs deleted file mode 100644 index ab40cea..0000000 --- a/Unicity.Renderer/ShaderCompilationFailedException.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Unicity.Renderer -{ - class ShaderCompilationFailedException : Exception - { - public ShaderCompilationFailedException(string message) : base(message) { } - } -} diff --git a/Unicity.Renderer/Shapes/Rectangle.cs b/Unicity.Renderer/Shapes/Rectangle.cs deleted file mode 100644 index 2239426..0000000 --- a/Unicity.Renderer/Shapes/Rectangle.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace Unicity.Renderer.Shapes -{ - public class Rectangle : Shape - { - Triangle rect1 = null; - Triangle rect2 = null; - - public Rectangle(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4) - { - rect1 = new Triangle(x1, y1, z1, x2, y2, z2, x3, y3, z3); - rect2 = new Triangle(x3, y3, z3, x2, y2, z2, x4, y4, z4); - } - - internal override void Draw(Shader shader, GraphicsRenderer renderer) - { - rect1.Draw(shader, renderer); - rect2.Draw(shader, renderer); - } - - public override void Dispose() - { - rect1.Dispose(); - rect2.Dispose(); - } - } -} diff --git a/Unicity.Renderer/Shapes/Shape.cs b/Unicity.Renderer/Shapes/Shape.cs deleted file mode 100644 index 8e6e322..0000000 --- a/Unicity.Renderer/Shapes/Shape.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Unicity.Renderer.Shapes -{ - public class Shape : IDisposable - { - internal virtual void Draw(Shader shader, GraphicsRenderer renderer) - { - - } - - public virtual void Dispose() - { - - } - } -} diff --git a/Unicity.Renderer/Shapes/Triangle.cs b/Unicity.Renderer/Shapes/Triangle.cs deleted file mode 100644 index 7ab94e2..0000000 --- a/Unicity.Renderer/Shapes/Triangle.cs +++ /dev/null @@ -1,50 +0,0 @@ -using OpenTK.Graphics.OpenGL4; - -namespace Unicity.Renderer.Shapes -{ - public class Triangle : Shape - { - int vao = 0; - int vbo = 0; - - float[] vertices = null; - - public Triangle(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3) - { - vertices = new float[] - { - x1, y1, z1, - x2, y2, z2, - x3, y3, z3 - }; - - vao = GL.GenVertexArray(); - vbo = GL.GenBuffer(); - - GL.BindVertexArray(vao); - GL.BindBuffer(BufferTarget.ArrayBuffer, vbo); - - GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw); - - GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0); - GL.EnableVertexAttribArray(0); - - } - - internal override void Draw(Shader shader, GraphicsRenderer renderer) - { - GL.BindVertexArray(vao); - GL.BindBuffer(BufferTarget.ArrayBuffer, vbo); - - float[] newVertices = new float[vertices.Length]; - - GL.DrawArrays(PrimitiveType.Triangles, 0, 3); - } - - public override void Dispose() - { - GL.BindBuffer(BufferTarget.ArrayBuffer, 0); - GL.DeleteBuffer(vbo); - } - } -} diff --git a/Unicity.Renderer/Unicity.Renderer.csproj b/Unicity.Renderer/Unicity.Renderer.csproj index e82117f..6ea5c1b 100644 --- a/Unicity.Renderer/Unicity.Renderer.csproj +++ b/Unicity.Renderer/Unicity.Renderer.csproj @@ -4,10 +4,10 @@ Debug AnyCPU - {F6EBB1F8-FCA9-4A8D-A807-E877CD047908} + {7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD} Library Unicity.Renderer - Renderer + Unicity.Renderer v4.7.2 512 true @@ -41,7 +41,6 @@ - @@ -50,35 +49,20 @@ - - - True - True - Resources.resx - - + - - - - - - - - - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - + + Always + + + Always + - \ No newline at end of file diff --git a/Unicity.Renderer/WindowCreationFailedException.cs b/Unicity.Renderer/WindowCreationFailedException.cs deleted file mode 100644 index 322c6e5..0000000 --- a/Unicity.Renderer/WindowCreationFailedException.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace Unicity.Renderer -{ - class WindowCreationFailedException : Exception - { - public WindowCreationFailedException(string message) : base(message) - { - - } - } -} diff --git a/Unicity.Renderer/shaders/test.frag b/Unicity.Renderer/shaders/test.frag new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Unicity.Renderer/shaders/test.frag @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Unicity.Renderer/shaders/test.vert b/Unicity.Renderer/shaders/test.vert new file mode 100644 index 0000000..c087c1a --- /dev/null +++ b/Unicity.Renderer/shaders/test.vert @@ -0,0 +1,8 @@ +#version 400 core + +layout (location = 0) in vec3 aPos; + +void main() +{ + gl_Position = vec4(aPos, 1.0); +} \ No newline at end of file diff --git a/Unicity.sln b/Unicity.sln index edd6888..5abddca 100644 --- a/Unicity.sln +++ b/Unicity.sln @@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29418.71 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unicity.RenderTest", "Unicity.RenderTest\Unicity.RenderTest.csproj", "{0155C998-9189-4C19-8DCC-13499797C7EA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unicity.Engine", "Unicity.Engine\Unicity.Engine.csproj", "{CBF47ABD-0454-496A-B3E3-848D27317C59}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unicity.Renderer", "Unicity.Renderer\Unicity.Renderer.csproj", "{F6EBB1F8-FCA9-4A8D-A807-E877CD047908}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unicity.Game", "Unicity.Game\Unicity.Game.csproj", "{4C824664-944B-4DCA-89BE-8CF16D249F51}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unicity.Renderer", "Unicity.Renderer\Unicity.Renderer.csproj", "{7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +15,18 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F6EBB1F8-FCA9-4A8D-A807-E877CD047908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6EBB1F8-FCA9-4A8D-A807-E877CD047908}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6EBB1F8-FCA9-4A8D-A807-E877CD047908}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6EBB1F8-FCA9-4A8D-A807-E877CD047908}.Release|Any CPU.Build.0 = Release|Any CPU - {0155C998-9189-4C19-8DCC-13499797C7EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0155C998-9189-4C19-8DCC-13499797C7EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0155C998-9189-4C19-8DCC-13499797C7EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0155C998-9189-4C19-8DCC-13499797C7EA}.Release|Any CPU.Build.0 = Release|Any CPU + {CBF47ABD-0454-496A-B3E3-848D27317C59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBF47ABD-0454-496A-B3E3-848D27317C59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBF47ABD-0454-496A-B3E3-848D27317C59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBF47ABD-0454-496A-B3E3-848D27317C59}.Release|Any CPU.Build.0 = Release|Any CPU + {4C824664-944B-4DCA-89BE-8CF16D249F51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C824664-944B-4DCA-89BE-8CF16D249F51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C824664-944B-4DCA-89BE-8CF16D249F51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C824664-944B-4DCA-89BE-8CF16D249F51}.Release|Any CPU.Build.0 = Release|Any CPU + {7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C0C6E9F-6BC9-4825-B657-8DACE26CF4FD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- cgit v1.2.3