diff options
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Shader.cs')
-rw-r--r-- | Ryujinx.Graphics.OpenGL/Shader.cs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Shader.cs b/Ryujinx.Graphics.OpenGL/Shader.cs new file mode 100644 index 00000000..f25845cf --- /dev/null +++ b/Ryujinx.Graphics.OpenGL/Shader.cs @@ -0,0 +1,49 @@ +using OpenTK.Graphics.OpenGL; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Shader; + +namespace Ryujinx.Graphics.OpenGL +{ + class Shader : IShader + { + public int Handle { get; private set; } + + private ShaderProgram _program; + + public ShaderProgramInfo Info => _program.Info; + + public ShaderStage Stage => _program.Stage; + + public Shader(ShaderProgram program) + { + _program = program; + + ShaderType type = ShaderType.VertexShader; + + switch (program.Stage) + { + case ShaderStage.Compute: type = ShaderType.ComputeShader; break; + case ShaderStage.Vertex: type = ShaderType.VertexShader; break; + case ShaderStage.TessellationControl: type = ShaderType.TessControlShader; break; + case ShaderStage.TessellationEvaluation: type = ShaderType.TessEvaluationShader; break; + case ShaderStage.Geometry: type = ShaderType.GeometryShader; break; + case ShaderStage.Fragment: type = ShaderType.FragmentShader; break; + } + + Handle = GL.CreateShader(type); + + GL.ShaderSource(Handle, program.Code); + GL.CompileShader(Handle); + } + + public void Dispose() + { + if (Handle != 0) + { + GL.DeleteShader(Handle); + + Handle = 0; + } + } + } +} |