Renderer.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using OpenTK.Graphics.OpenGL;
  2. using Ryujinx.Graphics.GAL;
  3. using Ryujinx.Graphics.Shader;
  4. namespace Ryujinx.Graphics.OpenGL
  5. {
  6. public sealed class Renderer : IRenderer
  7. {
  8. private Pipeline _pipeline;
  9. public IPipeline Pipeline => _pipeline;
  10. private readonly Counters _counters;
  11. private readonly Window _window;
  12. public IWindow Window => _window;
  13. internal TextureCopy TextureCopy { get; }
  14. public Renderer()
  15. {
  16. _pipeline = new Pipeline();
  17. _counters = new Counters();
  18. _window = new Window();
  19. TextureCopy = new TextureCopy();
  20. }
  21. public IShader CompileShader(ShaderProgram shader)
  22. {
  23. return new Shader(shader);
  24. }
  25. public IBuffer CreateBuffer(int size)
  26. {
  27. return new Buffer(size);
  28. }
  29. public IProgram CreateProgram(IShader[] shaders)
  30. {
  31. return new Program(shaders);
  32. }
  33. public ISampler CreateSampler(SamplerCreateInfo info)
  34. {
  35. return new Sampler(info);
  36. }
  37. public ITexture CreateTexture(TextureCreateInfo info)
  38. {
  39. return new TextureStorage(this, info).CreateDefaultView();
  40. }
  41. public void FlushPipelines()
  42. {
  43. GL.Finish();
  44. }
  45. public Capabilities GetCapabilities()
  46. {
  47. return new Capabilities(
  48. HwCapabilities.SupportsAstcCompression,
  49. HwCapabilities.SupportsNonConstantTextureOffset,
  50. HwCapabilities.MaximumViewportDimensions,
  51. HwCapabilities.MaximumComputeSharedMemorySize,
  52. HwCapabilities.StorageBufferOffsetAlignment);
  53. }
  54. public ulong GetCounter(CounterType type)
  55. {
  56. return _counters.GetCounter(type);
  57. }
  58. public void InitializeCounters()
  59. {
  60. _counters.Initialize();
  61. }
  62. public void ResetCounter(CounterType type)
  63. {
  64. _counters.ResetCounter(type);
  65. }
  66. public void Dispose()
  67. {
  68. TextureCopy.Dispose();
  69. _pipeline.Dispose();
  70. _window.Dispose();
  71. }
  72. }
  73. }