From cdbe50f5130aaa5eaa99c2ec8d738b89d66cf6a2 Mon Sep 17 00:00:00 2001 From: Harrison Date: Fri, 21 Feb 2020 02:04:33 -0500 Subject: [PATCH] Proper default shaders is now an embedded resource and made Shader.cs comply with this setup. --- .../Graphics/Render/Shaders/Shader.cs | 45 ++++++++++++------- RecrownedGTK/RecrownedGTK.csproj | 17 ++++++- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/RecrownedGTK/Graphics/Render/Shaders/Shader.cs b/RecrownedGTK/Graphics/Render/Shaders/Shader.cs index 731f4b1..449091f 100644 --- a/RecrownedGTK/Graphics/Render/Shaders/Shader.cs +++ b/RecrownedGTK/Graphics/Render/Shaders/Shader.cs @@ -1,7 +1,8 @@ using System; using System.IO; -using System.Text; +using System.Reflection; using OpenTK.Graphics.OpenGL; + namespace RecrownedGTK.Graphics.Render.Shaders { public class Shader : IDisposable { int handle; @@ -9,21 +10,30 @@ namespace RecrownedGTK.Graphics.Render.Shaders { get; private set; } - public Shader(string vertexPath, string fragmentPath) { - IsDisposed = false; - + + /// + /// Creates a shader program using the given paths. + /// + /// The relative path to the vertex shader file. + /// The relative path to the fragment shader file. + /// + public Shader(string pathToVertexFile, string pathToFragmentFile) : this(new StreamReader(pathToVertexFile), new StreamReader(pathToFragmentFile)) { + } + + /// + /// Creates a shader program using the given streams. + /// Automatically disposes of streams immediately after use. + /// + /// The vertex shader file stream. + /// The fragment shader file stream. + public Shader(StreamReader vertexFileStream, StreamReader fragmentFileStream) { int vertShader = 0; int fragShader = 0; - string vertShaderSource; - string fragShaderSource; - - using (StreamReader stream = new StreamReader(vertexPath, Encoding.UTF8)) { - vertShaderSource = stream.ReadToEnd(); - } - using (StreamReader stream = new StreamReader(fragmentPath, Encoding.UTF8)) { - fragShaderSource = stream.ReadToEnd(); - } + string vertShaderSource = vertexFileStream.ReadToEnd(); + string fragShaderSource = fragmentFileStream.ReadToEnd(); + fragmentFileStream.Dispose(); + vertexFileStream.Dispose(); vertShader = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource(vertShader, vertShaderSource); @@ -32,11 +42,11 @@ namespace RecrownedGTK.Graphics.Render.Shaders { string log; GL.CompileShader(vertShader); - if ((log = GL.GetShaderInfoLog(vertShader)) == "") { + if ((log = GL.GetShaderInfoLog(vertShader)) != "") { throw new ArgumentException("Error while compiling vertex shader: " + log, "vertexPath"); } GL.CompileShader(fragShader); - if ((log = GL.GetShaderInfoLog(fragShader)) == "") { + if ((log = GL.GetShaderInfoLog(fragShader)) != "") { throw new ArgumentException("Error while compiling fragment shader: " + log, "fragmentPath"); } @@ -82,7 +92,10 @@ namespace RecrownedGTK.Graphics.Render.Shaders { Dispose(false); } public static Shader CreateBasicShader() { - Shader shader = new Shader("Graphics/Render/Shader/default.vert", "Graphics/Render/Shader/default.frag"); + Assembly assembly = Assembly.GetExecutingAssembly(); + string resourceLoc = "RecrownedGTK.Graphics.Render.Shaders.{0}"; + Shader shader = new Shader(new StreamReader(assembly.GetManifestResourceStream(String.Format(resourceLoc, "default.vert"))), + new StreamReader(assembly.GetManifestResourceStream(String.Format(resourceLoc, "default.frag")))); return shader; } } diff --git a/RecrownedGTK/RecrownedGTK.csproj b/RecrownedGTK/RecrownedGTK.csproj index adeaf77..3645316 100644 --- a/RecrownedGTK/RecrownedGTK.csproj +++ b/RecrownedGTK/RecrownedGTK.csproj @@ -3,6 +3,21 @@ net48 - + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + \ No newline at end of file