From 883e0051fdf99ca375e570c81aff20a502ed7470 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 29 Oct 2023 12:13:38 +0100 Subject: [PATCH] Shader.cs - Added 'SetUniform2' and added 2nd 'Create' function to not only create vertex and fragment shader --- PCK-Studio/Rendering/Shader.cs | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/PCK-Studio/Rendering/Shader.cs b/PCK-Studio/Rendering/Shader.cs index 52f22d6b..5b2f03f1 100644 --- a/PCK-Studio/Rendering/Shader.cs +++ b/PCK-Studio/Rendering/Shader.cs @@ -37,6 +37,12 @@ namespace PckStudio.Rendering GL.Uniform1(location, value); } + public void SetUniform2(string name, Vector2 value) + { + int location = GetUniformLocation(name); + GL.Uniform2(location, value); + } + public void SetUniform4(string name, Vector4 value) { int location = GetUniformLocation(name); @@ -76,30 +82,42 @@ namespace PckStudio.Rendering { GL.GetShader(shaderId, ShaderParameter.InfoLogLength, out int length); GL.GetShaderInfoLog(shaderId, length, out _, out string infoLog); - Trace.TraceError(infoLog); GL.DeleteShader(shaderId); + Trace.Fail(infoLog); return 0; } return shaderId; } public static Shader Create(string vertexSource, string fragmentSource) + { + return Create( + new KeyValuePair(ShaderType.VertexShader, vertexSource), + new KeyValuePair(ShaderType.FragmentShader, fragmentSource) + ); + } + + public static Shader Create(params KeyValuePair[] shaderSources) { int programId = GL.CreateProgram(); - int vertexShader = CompileShader(ShaderType.VertexShader, vertexSource); - int fragmentShader = CompileShader(ShaderType.FragmentShader, fragmentSource); - - GL.AttachShader(programId, vertexShader); - GL.AttachShader(programId, fragmentShader); + var shaderIds = new List(shaderSources.Length); + foreach (var shaderSource in shaderSources) + { + int shaderId = CompileShader(shaderSource.Key, shaderSource.Value); + GL.AttachShader(programId, shaderId); + shaderIds.Add(shaderId); + } GL.LinkProgram(programId); GL.ValidateProgram(programId); Debug.WriteLine(GL.GetProgramInfoLog(programId), category: nameof(Shader)); - GL.DeleteShader(vertexShader); - GL.DeleteShader(fragmentShader); + foreach (var shaderId in shaderIds) + { + GL.DeleteShader(shaderId); + } return new Shader(programId); }