ShaderHelper.cs
1 using OpenTK.Graphics.OpenGL; 2 using Ryujinx.Common.Logging; 3 4 namespace Ryujinx.Graphics.OpenGL.Effects 5 { 6 internal static class ShaderHelper 7 { 8 public static int CompileProgram(string shaderCode, ShaderType shaderType) 9 { 10 return CompileProgram(new string[] { shaderCode }, shaderType); 11 } 12 13 public static int CompileProgram(string[] shaders, ShaderType shaderType) 14 { 15 var shader = GL.CreateShader(shaderType); 16 GL.ShaderSource(shader, shaders.Length, shaders, (int[])null); 17 GL.CompileShader(shader); 18 19 GL.GetShader(shader, ShaderParameter.CompileStatus, out int isCompiled); 20 if (isCompiled == 0) 21 { 22 string log = GL.GetShaderInfoLog(shader); 23 Logger.Error?.Print(LogClass.Gpu, $"Failed to compile effect shader:\n\n{log}\n"); 24 GL.DeleteShader(shader); 25 return 0; 26 } 27 28 var program = GL.CreateProgram(); 29 GL.AttachShader(program, shader); 30 GL.LinkProgram(program); 31 32 GL.DetachShader(program, shader); 33 GL.DeleteShader(shader); 34 35 return program; 36 } 37 } 38 }