aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.OpenGL/Window.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.OpenGL/Window.cs')
-rw-r--r--Ryujinx.Graphics.OpenGL/Window.cs16
1 files changed, 13 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.OpenGL/Window.cs b/Ryujinx.Graphics.OpenGL/Window.cs
index da214553..f7f75f4e 100644
--- a/Ryujinx.Graphics.OpenGL/Window.cs
+++ b/Ryujinx.Graphics.OpenGL/Window.cs
@@ -27,11 +27,12 @@ namespace Ryujinx.Graphics.OpenGL
{
GL.Disable(EnableCap.FramebufferSrgb);
- CopyTextureToFrameBufferRGB(0, GetCopyFramebufferHandleLazy(), (TextureView)texture, crop);
+ CopyTextureToFrameBufferRGB(0, GetCopyFramebufferHandleLazy(), (TextureView)texture, crop, swapBuffersCallback);
GL.Enable(EnableCap.FramebufferSrgb);
- swapBuffersCallback();
+ // Restore unpack alignment to 4, as performance overlays such as RTSS may change this to load their resources.
+ GL.PixelStore(PixelStoreParameter.UnpackAlignment, 4);
}
public void SetSize(int width, int height)
@@ -40,7 +41,7 @@ namespace Ryujinx.Graphics.OpenGL
_height = height;
}
- private void CopyTextureToFrameBufferRGB(int drawFramebuffer, int readFramebuffer, TextureView view, ImageCrop crop)
+ private void CopyTextureToFrameBufferRGB(int drawFramebuffer, int readFramebuffer, TextureView view, ImageCrop crop, Action swapBuffersCallback)
{
(int oldDrawFramebufferHandle, int oldReadFramebufferHandle) = ((Pipeline)_renderer.Pipeline).GetBoundFramebuffers();
@@ -139,11 +140,20 @@ namespace Ryujinx.Graphics.OpenGL
((Pipeline)_renderer.Pipeline).RestoreComponentMask(i);
}
+ // Set clip control, viewport and the framebuffer to the output to placate overlays and OBS capture.
+ GL.ClipControl(ClipOrigin.LowerLeft, ClipDepthMode.NegativeOneToOne);
+ GL.Viewport(0, 0, _width, _height);
+ GL.BindFramebuffer(FramebufferTarget.Framebuffer, drawFramebuffer);
+
+ swapBuffersCallback();
+
GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, oldReadFramebufferHandle);
GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, oldDrawFramebufferHandle);
+ ((Pipeline)_renderer.Pipeline).RestoreClipControl();
((Pipeline)_renderer.Pipeline).RestoreScissor0Enable();
((Pipeline)_renderer.Pipeline).RestoreRasterizerDiscard();
+ ((Pipeline)_renderer.Pipeline).RestoreViewport0();
if (viewConverted != view)
{