Shader.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using OpenTK.Graphics.OpenGL;
  2. using Ryujinx.Graphics.GAL;
  3. using Ryujinx.Graphics.Shader;
  4. namespace Ryujinx.Graphics.OpenGL
  5. {
  6. class Shader : IShader
  7. {
  8. public int Handle { get; private set; }
  9. private ShaderProgram _program;
  10. public ShaderProgramInfo Info => _program.Info;
  11. public ShaderStage Stage => _program.Stage;
  12. public Shader(ShaderProgram program)
  13. {
  14. _program = program;
  15. ShaderType type = ShaderType.VertexShader;
  16. switch (program.Stage)
  17. {
  18. case ShaderStage.Compute: type = ShaderType.ComputeShader; break;
  19. case ShaderStage.Vertex: type = ShaderType.VertexShader; break;
  20. case ShaderStage.TessellationControl: type = ShaderType.TessControlShader; break;
  21. case ShaderStage.TessellationEvaluation: type = ShaderType.TessEvaluationShader; break;
  22. case ShaderStage.Geometry: type = ShaderType.GeometryShader; break;
  23. case ShaderStage.Fragment: type = ShaderType.FragmentShader; break;
  24. }
  25. Handle = GL.CreateShader(type);
  26. GL.ShaderSource(Handle, program.Code);
  27. GL.CompileShader(Handle);
  28. }
  29. public void Dispose()
  30. {
  31. if (Handle != 0)
  32. {
  33. GL.DeleteShader(Handle);
  34. Handle = 0;
  35. }
  36. }
  37. }
  38. }