| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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;
- }
- }
- }
- }
|