OglRenderer.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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(
  22. Buffer as OglConstBuffer,
  23. RenderTarget as OglRenderTarget,
  24. Rasterizer as OglRasterizer,
  25. Shader as OglShader);
  26. _actionsQueue = new ConcurrentQueue<Action>();
  27. }
  28. public void QueueAction(Action actionMthd)
  29. {
  30. _actionsQueue.Enqueue(actionMthd);
  31. }
  32. public void RunActions()
  33. {
  34. int count = _actionsQueue.Count;
  35. while (count-- > 0 && _actionsQueue.TryDequeue(out Action renderAction))
  36. {
  37. renderAction();
  38. }
  39. }
  40. }
  41. }