From 90a3a9f371129f14353ab9cb5fd22844dc6ca7ae Mon Sep 17 00:00:00 2001 From: Dario Date: Fri, 21 Feb 2025 21:05:16 -0300 Subject: [PATCH] Potential fix for DPI scaling. --- UnleashedRecomp/gpu/rhi/plume_vulkan.cpp | 2 +- UnleashedRecomp/gpu/video.cpp | 26 +++++++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp index a181eab3..477a431a 100644 --- a/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp +++ b/UnleashedRecomp/gpu/rhi/plume_vulkan.cpp @@ -2344,7 +2344,7 @@ namespace plume { dstWidth = rect.right - rect.left; dstHeight = rect.bottom - rect.top; # elif defined(SDL_VULKAN_ENABLED) - SDL_GetWindowSize(renderWindow, (int *)(&dstWidth), (int *)(&dstHeight)); + SDL_GetWindowSizeInPixels(renderWindow, (int *)(&dstWidth), (int *)(&dstHeight)); # elif defined(__ANDROID__) dstWidth = ANativeWindow_getWidth(renderWindow); dstHeight = ANativeWindow_getHeight(renderWindow); diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp index f21f2ce6..42f122c1 100644 --- a/UnleashedRecomp/gpu/video.cpp +++ b/UnleashedRecomp/gpu/video.cpp @@ -2415,19 +2415,25 @@ static void DrawImGui() // we can adjust the mouse events before ImGui processes them. uint32_t width = g_swapChain->getWidth(); uint32_t height = g_swapChain->getHeight(); - - if (width != Video::s_viewportWidth || height != Video::s_viewportHeight) + float mousePosScaleX = float(width) / float(GameWindow::s_width); + float mousePosScaleY = float(height) / float(GameWindow::s_height); + float mousePosOffsetX = (width - Video::s_viewportWidth) / 2.0f; + float mousePosOffsetY = (height - Video::s_viewportHeight) / 2.0f; + for (int i = 0; i < io.Ctx->InputEventsQueue.Size; i++) { - float mousePosOffsetX = (width - Video::s_viewportWidth) / 2.0f; - float mousePosOffsetY = (height - Video::s_viewportHeight) / 2.0f; - - for (int i = 0; i < io.Ctx->InputEventsQueue.Size; i++) + auto& e = io.Ctx->InputEventsQueue[i]; + if (e.Type == ImGuiInputEventType_MousePos) { - auto& e = io.Ctx->InputEventsQueue[i]; - if (e.Type == ImGuiInputEventType_MousePos) + if (e.MousePos.PosX != -FLT_MAX) { - if (e.MousePos.PosX != -FLT_MAX) e.MousePos.PosX -= mousePosOffsetX; - if (e.MousePos.PosY != -FLT_MAX) e.MousePos.PosY -= mousePosOffsetY; + e.MousePos.PosX *= mousePosScaleX; + e.MousePos.PosX -= mousePosOffsetX; + } + + if (e.MousePos.PosY != -FLT_MAX) + { + e.MousePos.PosY *= mousePosScaleY; + e.MousePos.PosY -= mousePosOffsetY; } } }