|
|
@@ -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)
|
|
|
{
|