diff options
| author | Adrian Ulbrich <adrian.ulbrich.2003@gmail.com> | 2019-11-08 23:56:17 +0100 |
|---|---|---|
| committer | Adrian Ulbrich <adrian.ulbrich.2003@gmail.com> | 2019-11-08 23:56:17 +0100 |
| commit | 3b214e75effaca1ba67daaf29d0a94e5b0129386 (patch) | |
| tree | ee0ccd43f193f2bdaedd36dcdc944f01a75e37e3 /Unicity.Renderer/Shader.cs | |
| parent | e63155370c817a1d9c16ef798b0a55e6fe328941 (diff) | |
| download | Unicity-3b214e75effaca1ba67daaf29d0a94e5b0129386.tar.gz Unicity-3b214e75effaca1ba67daaf29d0a94e5b0129386.tar.bz2 Unicity-3b214e75effaca1ba67daaf29d0a94e5b0129386.zip | |
Started work on actual engine
Diffstat (limited to 'Unicity.Renderer/Shader.cs')
| -rw-r--r-- | Unicity.Renderer/Shader.cs | 92 |
1 files changed, 14 insertions, 78 deletions
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; } } } |
