diff options
Diffstat (limited to 'Ryujinx.Ava/AppHost.cs')
-rw-r--r-- | Ryujinx.Ava/AppHost.cs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/Ryujinx.Ava/AppHost.cs b/Ryujinx.Ava/AppHost.cs index bd9c808e..7e3cddc8 100644 --- a/Ryujinx.Ava/AppHost.cs +++ b/Ryujinx.Ava/AppHost.cs @@ -12,6 +12,7 @@ using Ryujinx.Audio.Integration; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; +using Ryujinx.Ava.Ui.Backend.Vulkan; using Ryujinx.Ava.Ui.Controls; using Ryujinx.Ava.Ui.Models; using Ryujinx.Ava.Ui.Vulkan; @@ -334,6 +335,8 @@ namespace Ryujinx.Ava return; } + AvaloniaLocator.Current.GetService<VulkanPlatformInterface>()?.MainSurface.Display.ChangeVSyncMode(true); + _isStopped = true; _isActive = false; } @@ -596,12 +599,13 @@ namespace Ryujinx.Ava if (Program.UseVulkan) { var vulkan = AvaloniaLocator.Current.GetService<VulkanPlatformInterface>(); + renderer = new VulkanRenderer(vulkan.Instance.InternalHandle, - vulkan.Device.InternalHandle, + vulkan.MainSurface.Device.InternalHandle, vulkan.PhysicalDevice.InternalHandle, - vulkan.Device.Queue.InternalHandle, + vulkan.MainSurface.Device.Queue.InternalHandle, vulkan.PhysicalDevice.QueueFamilyIndex, - vulkan.Device.Lock); + vulkan.MainSurface.Device.Lock); } else { @@ -775,7 +779,10 @@ namespace Ryujinx.Ava Width = (int)e.Width; Height = (int)e.Height; - SetRendererWindowSize(e); + if (!Program.UseVulkan) + { + SetRendererWindowSize(e); + } } private void MainLoop() @@ -815,12 +822,11 @@ namespace Ryujinx.Ava _renderer.ScreenCaptured += Renderer_ScreenCaptured; - if (!Program.UseVulkan) - { - (_renderer as OpenGLRenderer).InitializeBackgroundContext(SPBOpenGLContext.CreateBackgroundContext((Renderer as OpenGLRendererControl).GameContext)); + (_renderer as OpenGLRenderer)?.InitializeBackgroundContext(SPBOpenGLContext.CreateBackgroundContext((Renderer as OpenGLRendererControl).GameContext)); - Renderer.MakeCurrent(); - } + Renderer.MakeCurrent(); + + AvaloniaLocator.Current.GetService<VulkanPlatformInterface>()?.MainSurface?.Display?.ChangeVSyncMode(Device.EnableDeviceVsync); Device.Gpu.Renderer.Initialize(_glLogLevel); @@ -837,8 +843,6 @@ namespace Ryujinx.Ava Renderer.Start(); - Renderer.QueueRender(); - while (_isActive) { if (Device.WaitFifo()) @@ -889,6 +893,16 @@ namespace Ryujinx.Ava $"FIFO: {Device.Statistics.GetFifoPercent():00.00} %", $"GPU: {_renderer.GetHardwareInfo().GpuVendor}")); + if (Program.UseVulkan) + { + var platformInterface = AvaloniaLocator.Current.GetService<VulkanPlatformInterface>(); + if (platformInterface.MainSurface.Display.IsSurfaceChanged()) + { + SetRendererWindowSize(new Size(Width, Height)); + return; + } + } + Renderer.Present(image); } @@ -970,6 +984,9 @@ namespace Ryujinx.Ava { case KeyboardHotkeyState.ToggleVSync: Device.EnableDeviceVsync = !Device.EnableDeviceVsync; + + AvaloniaLocator.Current.GetService<VulkanPlatformInterface>()?.MainSurface?.Display?.ChangeVSyncMode(Device.EnableDeviceVsync); + break; case KeyboardHotkeyState.Screenshot: ScreenshotRequested = true; |