/ src / Ryujinx.Graphics.OpenGL / Effects / ShaderHelper.cs
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  }