diff options
author | bunnei <bunneidev@gmail.com> | 2020-02-18 04:02:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-18 04:02:18 +0100 |
commit | 72d4c6fee0eed8bad5686f1db6043446900020d9 (patch) | |
tree | 70114ee835cd2e666290a678742d164ffe7fdd3f /src/core | |
parent | Merge pull request #3429 from brianclinkenbeard/fix-cmake-sdl2-arch (diff) | |
parent | Add 4:3 aspect ratio and address feedback (diff) | |
download | yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar.gz yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar.bz2 yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar.lz yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar.xz yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.tar.zst yuzu-72d4c6fee0eed8bad5686f1db6043446900020d9.zip |
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/frontend/framebuffer_layout.cpp | 21 | ||||
-rw-r--r-- | src/core/frontend/framebuffer_layout.h | 15 | ||||
-rw-r--r-- | src/core/settings.h | 1 |
3 files changed, 34 insertions, 3 deletions
diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp index d6d2cf3f0..2dc795d56 100644 --- a/src/core/frontend/framebuffer_layout.cpp +++ b/src/core/frontend/framebuffer_layout.cpp @@ -27,9 +27,9 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height) { // so just calculate them both even if the other isn't showing. FramebufferLayout res{width, height}; - const float emulation_aspect_ratio{static_cast<float>(ScreenUndocked::Height) / - ScreenUndocked::Width}; - const auto window_aspect_ratio = static_cast<float>(height) / width; + const float window_aspect_ratio = static_cast<float>(height) / width; + const float emulation_aspect_ratio = EmulationAspectRatio( + static_cast<AspectRatio>(Settings::values.aspect_ratio), window_aspect_ratio); const Common::Rectangle<u32> screen_window_area{0, 0, width, height}; Common::Rectangle<u32> screen = MaxRectangle(screen_window_area, emulation_aspect_ratio); @@ -58,4 +58,19 @@ FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale) { return DefaultFrameLayout(width, height); } +float EmulationAspectRatio(AspectRatio aspect, float window_aspect_ratio) { + switch (aspect) { + case AspectRatio::Default: + return static_cast<float>(ScreenUndocked::Height) / ScreenUndocked::Width; + case AspectRatio::R4_3: + return 3.0f / 4.0f; + case AspectRatio::R21_9: + return 9.0f / 21.0f; + case AspectRatio::StretchToWindow: + return window_aspect_ratio; + default: + return static_cast<float>(ScreenUndocked::Height) / ScreenUndocked::Width; + } +} + } // namespace Layout diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h index d2370adde..1d39c1faf 100644 --- a/src/core/frontend/framebuffer_layout.h +++ b/src/core/frontend/framebuffer_layout.h @@ -18,6 +18,13 @@ enum ScreenDocked : u32 { HeightDocked = 1080, }; +enum class AspectRatio { + Default, + R4_3, + R21_9, + StretchToWindow, +}; + /// Describes the layout of the window framebuffer struct FramebufferLayout { u32 width{ScreenUndocked::Width}; @@ -48,4 +55,12 @@ FramebufferLayout DefaultFrameLayout(u32 width, u32 height); */ FramebufferLayout FrameLayoutFromResolutionScale(u32 res_scale); +/** + * Convenience method to determine emulation aspect ratio + * @param aspect Represents the index of aspect ratio stored in Settings::values.aspect_ratio + * @param window_aspect_ratio Current window aspect ratio + * @return Emulation render window aspect ratio + */ +float EmulationAspectRatio(AspectRatio aspect, float window_aspect_ratio); + } // namespace Layout diff --git a/src/core/settings.h b/src/core/settings.h index e1a9a0ffa..f837d3fbc 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -429,6 +429,7 @@ struct Values { int vulkan_device; float resolution_factor; + int aspect_ratio; bool use_frame_limit; u16 frame_limit; bool use_disk_shader_cache; |