android: frontend: Track screen layout separately for orientation.

android framebuffer
master
bunnei 2019-07-22 14:58:54 +07:00 committed by SachinVin
parent e8f57d7e3c
commit b7a156f7c8
5 changed files with 15 additions and 5 deletions

@ -145,7 +145,8 @@ void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) {
TouchPressed(framebuffer_x, framebuffer_y); TouchPressed(framebuffer_x, framebuffer_y);
} }
void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) { void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height,
bool is_portrait_mode) {
Layout::FramebufferLayout layout; Layout::FramebufferLayout layout;
const auto layout_option = Settings::values.layout_option; const auto layout_option = Settings::values.layout_option;
const auto min_size = const auto min_size =
@ -156,6 +157,12 @@ void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height)
} else { } else {
width = std::max(width, min_size.first); width = std::max(width, min_size.first);
height = std::max(height, min_size.second); height = std::max(height, min_size.second);
// If in portrait mode, only the MobilePortrait option really makes sense
const Settings::LayoutOption layout_option = is_portrait_mode
? Settings::LayoutOption::MobilePortrait
: Settings::values.layout_option;
switch (layout_option) { switch (layout_option) {
case Settings::LayoutOption::SingleScreen: case Settings::LayoutOption::SingleScreen:
layout = Layout::SingleFrameLayout(width, height, Settings::values.swap_screen, layout = Layout::SingleFrameLayout(width, height, Settings::values.swap_screen,

@ -159,7 +159,8 @@ public:
* Convenience method to update the current frame layout * Convenience method to update the current frame layout
* Read from the current settings to determine which layout to use. * Read from the current settings to determine which layout to use.
*/ */
void UpdateCurrentFramebufferLayout(unsigned width, unsigned height); void UpdateCurrentFramebufferLayout(unsigned width, unsigned height,
bool is_portrait_mode = {});
std::unique_ptr<TextureMailbox> mailbox = nullptr; std::unique_ptr<TextureMailbox> mailbox = nullptr;

@ -33,9 +33,11 @@ void Apply() {
VideoCore::g_hw_shader_accurate_mul = values.shaders_accurate_mul; VideoCore::g_hw_shader_accurate_mul = values.shaders_accurate_mul;
VideoCore::g_use_disk_shader_cache = values.use_disk_shader_cache; VideoCore::g_use_disk_shader_cache = values.use_disk_shader_cache;
#ifndef ANDROID
if (VideoCore::g_renderer) { if (VideoCore::g_renderer) {
VideoCore::g_renderer->UpdateCurrentFramebufferLayout(); VideoCore::g_renderer->UpdateCurrentFramebufferLayout();
} }
#endif
VideoCore::g_renderer_bg_color_update_requested = true; VideoCore::g_renderer_bg_color_update_requested = true;
VideoCore::g_renderer_sampler_update_requested = true; VideoCore::g_renderer_sampler_update_requested = true;

@ -11,9 +11,9 @@
RendererBase::RendererBase(Frontend::EmuWindow& window) : render_window{window} {} RendererBase::RendererBase(Frontend::EmuWindow& window) : render_window{window} {}
RendererBase::~RendererBase() = default; RendererBase::~RendererBase() = default;
void RendererBase::UpdateCurrentFramebufferLayout() { void RendererBase::UpdateCurrentFramebufferLayout(bool is_portrait_mode) {
const Layout::FramebufferLayout& layout = render_window.GetFramebufferLayout(); const Layout::FramebufferLayout& layout = render_window.GetFramebufferLayout();
render_window.UpdateCurrentFramebufferLayout(layout.width, layout.height); render_window.UpdateCurrentFramebufferLayout(layout.width, layout.height, is_portrait_mode);
} }
void RendererBase::RefreshRasterizerSetting() { void RendererBase::RefreshRasterizerSetting() {

@ -38,7 +38,7 @@ public:
virtual void CleanupVideoDumping() = 0; virtual void CleanupVideoDumping() = 0;
/// Updates the framebuffer layout of the contained render window handle. /// Updates the framebuffer layout of the contained render window handle.
void UpdateCurrentFramebufferLayout(); void UpdateCurrentFramebufferLayout(bool is_portrait_mode = {});
// Getter/setter functions: // Getter/setter functions:
// ------------------------ // ------------------------