aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs')
-rw-r--r--Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs34
1 files changed, 34 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs b/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
new file mode 100644
index 00000000..4db3cb19
--- /dev/null
+++ b/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
@@ -0,0 +1,34 @@
+using Ryujinx.Graphics.GAL.Multithreading.Commands.Window;
+using Ryujinx.Graphics.GAL.Multithreading.Model;
+using Ryujinx.Graphics.GAL.Multithreading.Resources;
+using System;
+
+namespace Ryujinx.Graphics.GAL.Multithreading
+{
+ public class ThreadedWindow : IWindow
+ {
+ private ThreadedRenderer _renderer;
+ private IWindow _impl;
+
+ public ThreadedWindow(ThreadedRenderer renderer, IWindow window)
+ {
+ _renderer = renderer;
+ _impl = window;
+ }
+
+ public void Present(ITexture texture, ImageCrop crop, Action swapBuffersCallback)
+ {
+ // If there's already a frame in the pipeline, wait for it to be presented first.
+ // This is a multithread rate limit - we can't be more than one frame behind the command queue.
+
+ _renderer.WaitForFrame();
+ _renderer.New<WindowPresentCommand>().Set(new TableRef<ThreadedTexture>(_renderer, texture as ThreadedTexture), crop, new TableRef<Action>(_renderer, swapBuffersCallback));
+ _renderer.QueueCommand();
+ }
+
+ public void SetSize(int width, int height)
+ {
+ _impl.SetSize(width, height);
+ }
+ }
+}