From 451c48406d2064f1411c23b8f26ca29d96db7c26 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Wed, 28 Oct 2020 17:32:59 +1000 Subject: [PATCH] libretro: Fix runtime aspect ratio changes not applying --- src/core/host_display.h | 1 + src/duckstation-libretro/libretro_host_interface.cpp | 11 ++++++++++- src/duckstation-libretro/libretro_host_interface.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/core/host_display.h b/src/core/host_display.h index 3bd7f414b..8c1e17886 100644 --- a/src/core/host_display.h +++ b/src/core/host_display.h @@ -89,6 +89,7 @@ public: virtual void SetVSync(bool enabled) = 0; const s32 GetDisplayTopMargin() const { return m_display_top_margin; } + const float GetDisplayAspectRatio() const { return m_display_aspect_ratio; } void ClearDisplayTexture() { diff --git a/src/duckstation-libretro/libretro_host_interface.cpp b/src/duckstation-libretro/libretro_host_interface.cpp index ce35ed8d5..c487d9c3b 100644 --- a/src/duckstation-libretro/libretro_host_interface.cpp +++ b/src/duckstation-libretro/libretro_host_interface.cpp @@ -103,6 +103,8 @@ bool LibretroHostInterface::Initialize() LoadSettings(); FixIncompatibleSettings(true); UpdateLogging(); + + m_last_aspect_ratio = Settings::GetDisplayAspectRatioValue(g_settings.display_aspect_ratio); return true; } @@ -226,7 +228,7 @@ void LibretroHostInterface::GetSystemAVInfo(struct retro_system_av_info* info, b std::memset(info, 0, sizeof(*info)); - info->geometry.aspect_ratio = Settings::GetDisplayAspectRatioValue(g_settings.display_aspect_ratio); + info->geometry.aspect_ratio = m_last_aspect_ratio; info->geometry.base_width = 320; info->geometry.base_height = 240; info->geometry.max_width = GPU::VRAM_WIDTH * resolution_scale; @@ -334,6 +336,13 @@ void LibretroHostInterface::retro_run_frame() System::RunFrame(); + const float aspect_ratio = m_display->GetDisplayAspectRatio(); + if (aspect_ratio != m_last_aspect_ratio) + { + m_last_aspect_ratio = aspect_ratio; + UpdateGeometry(); + } + m_display->Render(); } diff --git a/src/duckstation-libretro/libretro_host_interface.h b/src/duckstation-libretro/libretro_host_interface.h index 18bf0a612..f48c188f2 100644 --- a/src/duckstation-libretro/libretro_host_interface.h +++ b/src/duckstation-libretro/libretro_host_interface.h @@ -97,6 +97,8 @@ private: bool m_rumble_interface_valid = false; bool m_supports_input_bitmasks = false; bool m_interfaces_initialized = false; + + float m_last_aspect_ratio = 4.0f / 3.0f; }; extern LibretroHostInterface g_libretro_host_interface;