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