Shader.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. public Shader(ShaderStage stage, string code)
  10. {
  11. ShaderType type = stage switch
  12. {
  13. ShaderStage.Compute => ShaderType.ComputeShader,
  14. ShaderStage.Vertex => ShaderType.VertexShader,
  15. ShaderStage.TessellationControl => ShaderType.TessControlShader,
  16. ShaderStage.TessellationEvaluation => ShaderType.TessEvaluationShader,
  17. ShaderStage.Geometry => ShaderType.GeometryShader,
  18. ShaderStage.Fragment => ShaderType.FragmentShader,
  19. _ => ShaderType.VertexShader
  20. };
  21. Handle = GL.CreateShader(type);
  22. GL.ShaderSource(Handle, code);
  23. GL.CompileShader(Handle);
  24. }
  25. public void Dispose()
  26. {
  27. if (Handle != 0)
  28. {
  29. GL.DeleteShader(Handle);
  30. Handle = 0;
  31. }
  32. }
  33. }
  34. }