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
{
private const int SurfaceWidth = 1280;
private const int SurfaceHeight = 720;
private uint _surfaceWidth = 1280;
private uint _surfaceHeight = 720;
private readonly VulkanRenderer _gd;
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)
{
return capabilities.CurrentExtent;
}
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 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));
return new Extent2D(width, height);
}
@ -630,9 +630,14 @@ namespace Ryujinx.Graphics.Vulkan
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)
{
_surfaceWidth = (uint)width;
_surfaceHeight = (uint)height;
_swapchainIsDirty = true;
}
}
public override void ChangeVSyncMode(bool vsyncEnabled)
{

View File

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