summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar san2021-07-21 20:56:42 +0200
committerGravatar GitHub2021-07-21 11:56:42 -0700
commit583a10fdedae0c1f2a787d8dffe98959afb725b5 (patch)
tree96380c8f056cede7434537d92717d204b141ca4c
parentMerge pull request #6660 from Morph1984/controller_applet_rev8 (diff)
downloadyuzu-583a10fdedae0c1f2a787d8dffe98959afb725b5.tar.gz
yuzu-583a10fdedae0c1f2a787d8dffe98959afb725b5.tar.xz
yuzu-583a10fdedae0c1f2a787d8dffe98959afb725b5.zip
yuzu-cmd: Fullscreen Improvements (#6656)
* emu_window_sdl2_vk: Use the generated SDL config On Linux, due to the way we include SDL2 as a submodule, it makes it difficult for us to specify which SDL_config.h we intended to include. Before, CMake would default to the dummy one included with SDL and ignore the generated one. This tells CMake to use the generated one. In addition, we define USING_GENERATED_CONFIG_H to throw an error in case the dummy config is used by accident. Fixes Vulkan not working on Linux yuzu-cmd. * emu_window_sdl2_vk: Specify the window manager if it should be supported The original language "not implemented" is wrong if the implementation exists but is not compiled. This causes a bit of a debugging headache when it goes wrong. Log it if the window manager is known before exiting. * sdl_impl, emu_window: Remove clang ignore Fixed upstream by libsdl-org/SDL@25fc40b0bd44c484051064bc6b945ea9943f88dd * Enable fullscreen support for Vulkan on yuzu-cmd Hooked up the existing SDL2 logic for fullscreen support in the Vulkan window of yuzu-cmd. * Change fullscreen logic to attempt desktop resolution first on yuzu-cmd Changed the order in which we attempt to switch to fullscreen. First try desktop resolution first, if it fails fall back to streched fullscreen using windowed resolution. Co-authored-by: lat9nq <22451773+lat9nq@users.noreply.github.com> Co-authored-by: san <san+gitkraken@smederijmerlijn.nl>
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2.cpp12
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp6
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h2
-rw-r--r--src/yuzu_cmd/yuzu.cpp2
4 files changed, 13 insertions, 9 deletions
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp
index 896181f0b..8dfc09393 100644
--- a/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp
+++ b/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp
@@ -122,12 +122,6 @@ void EmuWindow_SDL2::OnResize() {
122} 122}
123 123
124void EmuWindow_SDL2::Fullscreen() { 124void EmuWindow_SDL2::Fullscreen() {
125 if (SDL_SetWindowFullscreen(render_window, SDL_WINDOW_FULLSCREEN) == 0) {
126 return;
127 }
128
129 LOG_ERROR(Frontend, "Fullscreening failed: {}", SDL_GetError());
130
131 // Try a different fullscreening method 125 // Try a different fullscreening method
132 LOG_INFO(Frontend, "Attempting to use borderless fullscreen..."); 126 LOG_INFO(Frontend, "Attempting to use borderless fullscreen...");
133 if (SDL_SetWindowFullscreen(render_window, SDL_WINDOW_FULLSCREEN_DESKTOP) == 0) { 127 if (SDL_SetWindowFullscreen(render_window, SDL_WINDOW_FULLSCREEN_DESKTOP) == 0) {
@@ -136,6 +130,12 @@ void EmuWindow_SDL2::Fullscreen() {
136 130
137 LOG_ERROR(Frontend, "Borderless fullscreening failed: {}", SDL_GetError()); 131 LOG_ERROR(Frontend, "Borderless fullscreening failed: {}", SDL_GetError());
138 132
133 if (SDL_SetWindowFullscreen(render_window, SDL_WINDOW_FULLSCREEN) == 0) {
134 return;
135 }
136
137 LOG_ERROR(Frontend, "Fullscreening failed: {}", SDL_GetError());
138
139 // Fallback algorithm: Maximise window. 139 // Fallback algorithm: Maximise window.
140 // Works on all systems (unless something is seriously wrong), so no fallback for this one. 140 // Works on all systems (unless something is seriously wrong), so no fallback for this one.
141 LOG_INFO(Frontend, "Falling back on a maximised window..."); 141 LOG_INFO(Frontend, "Falling back on a maximised window...");
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp
index 152e56db8..d1473dbab 100644
--- a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp
+++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp
@@ -24,7 +24,7 @@
24#include <SDL.h> 24#include <SDL.h>
25#include <SDL_syswm.h> 25#include <SDL_syswm.h>
26 26
27EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsystem) 27EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsystem, bool fullscreen)
28 : EmuWindow_SDL2{input_subsystem} { 28 : EmuWindow_SDL2{input_subsystem} {
29 const std::string window_title = fmt::format("yuzu {} | {}-{} (Vulkan)", Common::g_build_name, 29 const std::string window_title = fmt::format("yuzu {} | {}-{} (Vulkan)", Common::g_build_name,
30 Common::g_scm_branch, Common::g_scm_desc); 30 Common::g_scm_branch, Common::g_scm_desc);
@@ -42,6 +42,10 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsyste
42 42
43 SetWindowIcon(); 43 SetWindowIcon();
44 44
45 if (fullscreen) {
46 Fullscreen();
47 }
48
45 switch (wm.subsystem) { 49 switch (wm.subsystem) {
46#ifdef SDL_VIDEO_DRIVER_WINDOWS 50#ifdef SDL_VIDEO_DRIVER_WINDOWS
47 case SDL_SYSWM_TYPE::SDL_SYSWM_WINDOWS: 51 case SDL_SYSWM_TYPE::SDL_SYSWM_WINDOWS:
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h
index bdfdc3c6f..de53844f0 100644
--- a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h
+++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h
@@ -19,7 +19,7 @@ class InputSubsystem;
19 19
20class EmuWindow_SDL2_VK final : public EmuWindow_SDL2 { 20class EmuWindow_SDL2_VK final : public EmuWindow_SDL2 {
21public: 21public:
22 explicit EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsystem); 22 explicit EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsystem, bool fullscreen);
23 ~EmuWindow_SDL2_VK() override; 23 ~EmuWindow_SDL2_VK() override;
24 24
25 std::unique_ptr<Core::Frontend::GraphicsContext> CreateSharedContext() const override; 25 std::unique_ptr<Core::Frontend::GraphicsContext> CreateSharedContext() const override;
diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp
index 9607cdcb1..ac4ea88d3 100644
--- a/src/yuzu_cmd/yuzu.cpp
+++ b/src/yuzu_cmd/yuzu.cpp
@@ -175,7 +175,7 @@ int main(int argc, char** argv) {
175 emu_window = std::make_unique<EmuWindow_SDL2_GL>(&input_subsystem, fullscreen); 175 emu_window = std::make_unique<EmuWindow_SDL2_GL>(&input_subsystem, fullscreen);
176 break; 176 break;
177 case Settings::RendererBackend::Vulkan: 177 case Settings::RendererBackend::Vulkan:
178 emu_window = std::make_unique<EmuWindow_SDL2_VK>(&input_subsystem); 178 emu_window = std::make_unique<EmuWindow_SDL2_VK>(&input_subsystem, fullscreen);
179 break; 179 break;
180 } 180 }
181 181