Shader.cs 1.2 KB

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