Fix game viewport size to not include DPI scale (screen-space uses it)

#2976
This commit is contained in:
Wojtek Figat
2025-02-26 20:55:57 +01:00
parent 2d956ebb36
commit 809fd2653a
3 changed files with 13 additions and 4 deletions

View File

@@ -246,11 +246,16 @@ Ray Camera::ConvertMouseToRay(const Float2& mousePosition, const Viewport& viewp
Viewport Camera::GetViewport() const
{
Viewport result = Viewport(Float2::Zero);
float dpiScale = Platform::GetDpiScale();
#if USE_EDITOR
// Editor
if (Editor::Managed)
{
result.Size = Editor::Managed->GetGameWindowSize();
if (auto* window = Editor::Managed->GetGameWindow())
dpiScale = window->GetDpiScale();
}
#else
// Game
auto mainWin = Engine::MainWindow;
@@ -258,9 +263,13 @@ Viewport Camera::GetViewport() const
{
const auto size = mainWin->GetClientSize();
result.Size = size;
dpiScale = mainWin->GetDpiScale();
}
#endif
// Remove DPI scale (game viewport coords are unscaled)
result.Size /= dpiScale;
// Fallback to the default value
if (result.Size.MinValue() <= ZeroTolerance)
result.Size = Float2(1280, 720);