OGLRenderer.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Concurrent;
  3. namespace Ryujinx.Graphics.Gal.OpenGL
  4. {
  5. public class OGLRenderer : IGalRenderer
  6. {
  7. public IGalConstBuffer Buffer { get; private set; }
  8. public IGalRenderTarget RenderTarget { get; private set; }
  9. public IGalRasterizer Rasterizer { get; private set; }
  10. public IGalShader Shader { get; private set; }
  11. public IGalPipeline Pipeline { get; private set; }
  12. public IGalTexture Texture { get; private set; }
  13. private ConcurrentQueue<Action> ActionsQueue;
  14. public OGLRenderer()
  15. {
  16. Buffer = new OGLConstBuffer();
  17. Texture = new OGLTexture();
  18. RenderTarget = new OGLRenderTarget(Texture as OGLTexture);
  19. Rasterizer = new OGLRasterizer();
  20. Shader = new OGLShader(Buffer as OGLConstBuffer);
  21. Pipeline = new OGLPipeline(Buffer as OGLConstBuffer, Rasterizer as OGLRasterizer, Shader as OGLShader);
  22. ActionsQueue = new ConcurrentQueue<Action>();
  23. }
  24. public void QueueAction(Action ActionMthd)
  25. {
  26. ActionsQueue.Enqueue(ActionMthd);
  27. }
  28. public void RunActions()
  29. {
  30. int Count = ActionsQueue.Count;
  31. while (Count-- > 0 && ActionsQueue.TryDequeue(out Action RenderAction))
  32. {
  33. RenderAction();
  34. }
  35. }
  36. }
  37. }