From 7b9c4757dd09b9ac993559f7629bcc536a83a975 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Mon, 16 May 2022 21:10:29 +0000 Subject: [PATCH] UI - Scale end framebuffer blit (#3342) * Scale end framebuffer blit * fix * fix * apply changes to avalonia --- Ryujinx.Ava/AppHost.cs | 4 ++-- Ryujinx.Ava/Ui/Controls/RendererControl.cs | 9 ++++++--- Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs | 4 ---- Ryujinx/Ui/GLRenderer.cs | 8 ++++---- Ryujinx/Ui/RendererWidgetBase.cs | 13 ++++++------- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/Ryujinx.Ava/AppHost.cs b/Ryujinx.Ava/AppHost.cs index 30d725808..09163bd60 100644 --- a/Ryujinx.Ava/AppHost.cs +++ b/Ryujinx.Ava/AppHost.cs @@ -177,7 +177,7 @@ namespace Ryujinx.Ava { if (_renderer != null) { - double scale = Program.WindowScaleFactor; + double scale = _parent.PlatformImpl.RenderScaling; _renderer.Window.SetSize((int)(size.Width * scale), (int)(size.Height * scale)); } } @@ -809,7 +809,7 @@ namespace Ryujinx.Ava Width = (int)Renderer.Bounds.Width; Height = (int)Renderer.Bounds.Height; - _renderer.Window.SetSize((int)(Width * Program.WindowScaleFactor), (int)(Height * Program.WindowScaleFactor)); + _renderer.Window.SetSize((int)(Width * _parent.PlatformImpl.RenderScaling), (int)(Height * _parent.PlatformImpl.RenderScaling)); Device.Gpu.Renderer.RunLoop(() => { diff --git a/Ryujinx.Ava/Ui/Controls/RendererControl.cs b/Ryujinx.Ava/Ui/Controls/RendererControl.cs index 8321a04e3..a728946cf 100644 --- a/Ryujinx.Ava/Ui/Controls/RendererControl.cs +++ b/Ryujinx.Ava/Ui/Controls/RendererControl.cs @@ -73,10 +73,13 @@ namespace Ryujinx.Ava.Ui.Controls { SizeChanged?.Invoke(this, rect.Size); - RenderSize = rect.Size * Program.WindowScaleFactor; + if (!rect.IsEmpty) + { + RenderSize = rect.Size * VisualRoot.RenderScaling; - _glDrawOperation?.Dispose(); - _glDrawOperation = new GlDrawOperation(this); + _glDrawOperation?.Dispose(); + _glDrawOperation = new GlDrawOperation(this); + } } public override void Render(DrawingContext context) diff --git a/Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs b/Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs index 33a29be72..016fed59d 100644 --- a/Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs +++ b/Ryujinx.Ava/Ui/Windows/MainWindow.axaml.cs @@ -123,10 +123,6 @@ namespace Ryujinx.Ava.Ui.Windows CheckLaunchState(); } - if (OperatingSystem.IsLinux()) - { - Program.WindowScaleFactor = this.PlatformImpl.RenderScaling; - } _rendererWaitEvent = new AutoResetEvent(false); } diff --git a/Ryujinx/Ui/GLRenderer.cs b/Ryujinx/Ui/GLRenderer.cs index e01d7d792..45eb53cb8 100644 --- a/Ryujinx/Ui/GLRenderer.cs +++ b/Ryujinx/Ui/GLRenderer.cs @@ -114,12 +114,12 @@ namespace Ryujinx.Ui GL.BlitFramebuffer(0, 0, - AllocatedWidth, - AllocatedHeight, + WindowWidth, + WindowHeight, 0, 0, - AllocatedWidth, - AllocatedHeight, + WindowWidth, + WindowHeight, ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Linear); } diff --git a/Ryujinx/Ui/RendererWidgetBase.cs b/Ryujinx/Ui/RendererWidgetBase.cs index fc3db50b6..0d82a5c57 100644 --- a/Ryujinx/Ui/RendererWidgetBase.cs +++ b/Ryujinx/Ui/RendererWidgetBase.cs @@ -41,6 +41,8 @@ namespace Ryujinx.Ui public IRenderer Renderer { get; private set; } public bool ScreenshotRequested { get; set; } + protected int WindowWidth { get; private set; } + protected int WindowHeight { get; private set; } public static event EventHandler StatusUpdatedEvent; @@ -71,9 +73,6 @@ namespace Ryujinx.Ui private IKeyboard _keyboardInterface; private GraphicsDebugLevel _glLogLevel; private string _gpuVendorName; - - private int _windowHeight; - private int _windowWidth; private bool _isMouseInClient; public RendererWidgetBase(InputManager inputManager, GraphicsDebugLevel glLogLevel) @@ -223,10 +222,10 @@ namespace Ryujinx.Ui Gdk.Monitor monitor = Display.GetMonitorAtWindow(Window); - _windowWidth = evnt.Width * monitor.ScaleFactor; - _windowHeight = evnt.Height * monitor.ScaleFactor; + WindowWidth = evnt.Width * monitor.ScaleFactor; + WindowHeight = evnt.Height * monitor.ScaleFactor; - Renderer?.Window.SetSize(_windowWidth, _windowHeight); + Renderer?.Window.SetSize(WindowWidth, WindowHeight); return result; } @@ -307,7 +306,7 @@ namespace Ryujinx.Ui } Renderer = renderer; - Renderer?.Window.SetSize(_windowWidth, _windowHeight); + Renderer?.Window.SetSize(WindowWidth, WindowHeight); if (Renderer != null) {