This commit is contained in:
e2dk4r 2024-10-01 11:44:27 +01:00 committed by GitHub
commit 8bf3aa1f34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 12 deletions

View File

@ -10,8 +10,8 @@ namespace Ryujinx.Graphics.Vulkan
{ {
class Window : WindowBase, IDisposable class Window : WindowBase, IDisposable
{ {
private const int SurfaceWidth = 1280; private uint _surfaceWidth = 1280;
private const int SurfaceHeight = 720; private uint _surfaceHeight = 720;
private readonly VulkanRenderer _gd; private readonly VulkanRenderer _gd;
private readonly SurfaceKHR _surface; private readonly SurfaceKHR _surface;
@ -295,15 +295,15 @@ namespace Ryujinx.Graphics.Vulkan
} }
} }
public static Extent2D ChooseSwapExtent(SurfaceCapabilitiesKHR capabilities) public Extent2D ChooseSwapExtent(SurfaceCapabilitiesKHR capabilities)
{ {
if (capabilities.CurrentExtent.Width != uint.MaxValue) if (capabilities.CurrentExtent.Width != uint.MaxValue)
{ {
return capabilities.CurrentExtent; return capabilities.CurrentExtent;
} }
uint width = Math.Max(capabilities.MinImageExtent.Width, Math.Min(capabilities.MaxImageExtent.Width, SurfaceWidth)); uint width = Math.Max(capabilities.MinImageExtent.Width, Math.Min(capabilities.MaxImageExtent.Width, _surfaceWidth));
uint height = Math.Max(capabilities.MinImageExtent.Height, Math.Min(capabilities.MaxImageExtent.Height, SurfaceHeight)); uint height = Math.Max(capabilities.MinImageExtent.Height, Math.Min(capabilities.MaxImageExtent.Height, _surfaceHeight));
return new Extent2D(width, height); return new Extent2D(width, height);
} }
@ -630,8 +630,13 @@ namespace Ryujinx.Graphics.Vulkan
public override void SetSize(int width, int height) public override void SetSize(int width, int height)
{ {
// We don't need to use width and height as we can get the size from the surface. if (width > 0 && height > 0)
_swapchainIsDirty = true; {
_surfaceWidth = (uint)width;
_surfaceHeight = (uint)height;
_swapchainIsDirty = true;
}
} }
public override void ChangeVSyncMode(bool vsyncEnabled) public override void ChangeVSyncMode(bool vsyncEnabled)

View File

@ -29,16 +29,30 @@ namespace Ryujinx.Headless.SDL2.Vulkan
protected override void InitializeRenderer() protected override void InitializeRenderer()
{ {
int width = DefaultWidth;
int height = DefaultHeight;
if (IsExclusiveFullscreen) if (IsExclusiveFullscreen)
{ {
Renderer?.Window.SetSize(ExclusiveFullscreenWidth, ExclusiveFullscreenHeight); width = ExclusiveFullscreenWidth;
MouseDriver.SetClientSize(ExclusiveFullscreenWidth, ExclusiveFullscreenHeight); height = ExclusiveFullscreenHeight;
} }
else else if (IsFullscreen)
{ {
Renderer?.Window.SetSize(DefaultWidth, DefaultHeight); // NOTE: grabbing the main display's dimensions directly as OpenGL doesn't scale along like the VulkanWindow.
MouseDriver.SetClientSize(DefaultWidth, DefaultHeight); if (SDL_GetDisplayBounds(DisplayId, out SDL_Rect displayBounds) < 0)
{
Logger.Warning?.Print(LogClass.Application, $"Could not retrieve display bounds: {SDL_GetError()}");
}
else
{
width = displayBounds.w;
height = displayBounds.h;
}
} }
Renderer?.Window.SetSize(width, height);
MouseDriver.SetClientSize(width, height);
} }
private static void BasicInvoke(Action action) private static void BasicInvoke(Action action)