Add option to use original fullscreen code for vulkan
This commit is contained in:
@@ -16,6 +16,7 @@ struct GEConfig
|
||||
bool m_disable_npot_texture;
|
||||
bool m_convert_irrlicht_mesh;
|
||||
bool m_texture_compression;
|
||||
bool m_vulkan_fullscreen_desktop;
|
||||
std::unordered_set<std::string> m_ondemand_load_texture_paths;
|
||||
float m_render_scale;
|
||||
};
|
||||
|
||||
@@ -11,6 +11,7 @@ GEConfig g_config =
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
{},
|
||||
1.0f
|
||||
};
|
||||
|
||||
@@ -92,9 +92,13 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters& param)
|
||||
|
||||
#ifndef MOBILE_STK
|
||||
// Prevent fullscreen minimizes when losing focus
|
||||
if (CreationParams.Fullscreen &&
|
||||
CreationParams.DriverType != video::EDT_VULKAN)
|
||||
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
|
||||
if (CreationParams.Fullscreen)
|
||||
{
|
||||
if (CreationParams.DriverType != video::EDT_VULKAN)
|
||||
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
|
||||
else if (!GE::getGEConfig()->m_vulkan_fullscreen_desktop)
|
||||
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
|
||||
}
|
||||
#endif
|
||||
|
||||
u32 init_flags = SDL_INIT_TIMER | SDL_INIT_VIDEO;
|
||||
@@ -336,7 +340,7 @@ bool versionCorrect(int major, int minor)
|
||||
extern "C" void update_fullscreen_desktop(int val)
|
||||
{
|
||||
GE::GEVulkanDriver* gevk = GE::getVKDriver();
|
||||
if (!gevk)
|
||||
if (!gevk || !GE::getGEConfig()->m_vulkan_fullscreen_desktop)
|
||||
return;
|
||||
SDL_Window* window = gevk->getWindow();
|
||||
|
||||
@@ -422,14 +426,13 @@ bool CIrrDeviceSDL::createWindow()
|
||||
|
||||
if (CreationParams.Fullscreen)
|
||||
{
|
||||
#ifndef MOBILE_STK
|
||||
if (CreationParams.DriverType == video::EDT_VULKAN)
|
||||
if (CreationParams.DriverType == video::EDT_VULKAN &&
|
||||
GE::getGEConfig()->m_vulkan_fullscreen_desktop)
|
||||
{
|
||||
flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
CreationParams.Fullscreen = false;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
flags |= SDL_WINDOW_FULLSCREEN;
|
||||
}
|
||||
|
||||
|
||||
@@ -722,6 +722,16 @@ namespace UserConfigParams
|
||||
&m_video_group, "Render video driver to use, at the moment gl or directx9 is supported.") );
|
||||
#endif
|
||||
|
||||
#if defined(MOBILE_STK)
|
||||
PARAM_PREFIX BoolUserConfigParam m_vulkan_fullscreen_desktop
|
||||
PARAM_DEFAULT(BoolUserConfigParam(false, "vulkan_fullscreen_desktop",
|
||||
&m_video_group, "Use SDL_WINDOW_FULLSCREEN_DESKTOP for vulkan device"));
|
||||
#else
|
||||
PARAM_PREFIX BoolUserConfigParam m_vulkan_fullscreen_desktop
|
||||
PARAM_DEFAULT(BoolUserConfigParam(true, "vulkan_fullscreen_desktop",
|
||||
&m_video_group, "Use SDL_WINDOW_FULLSCREEN_DESKTOP for vulkan device"));
|
||||
#endif
|
||||
|
||||
// ---- Recording
|
||||
PARAM_PREFIX GroupUserConfigParam m_recording_group
|
||||
PARAM_DEFAULT(GroupUserConfigParam("Recording",
|
||||
|
||||
@@ -416,6 +416,8 @@ void IrrDriver::initDevice()
|
||||
UserConfigParams::m_texture_compression;
|
||||
GE::getGEConfig()->m_render_scale =
|
||||
UserConfigParams::m_scale_rtts_factor;
|
||||
GE::getGEConfig()->m_vulkan_fullscreen_desktop =
|
||||
UserConfigParams::m_vulkan_fullscreen_desktop;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
||||
@@ -317,9 +317,11 @@ void OptionsScreenVideo::init()
|
||||
assert( rememberWinposText != NULL );
|
||||
#endif
|
||||
|
||||
bool is_vulkan = false;
|
||||
bool is_vulkan_fullscreen_desktop = false;
|
||||
#ifndef SERVER_ONLY
|
||||
is_vulkan = GE::getDriver()->getDriverType() == video::EDT_VULKAN;
|
||||
is_vulkan_fullscreen_desktop =
|
||||
GE::getDriver()->getDriverType() == video::EDT_VULKAN &&
|
||||
GE::getGEConfig()->m_vulkan_fullscreen_desktop;
|
||||
#endif
|
||||
|
||||
// --- get resolution list from irrlicht the first time
|
||||
@@ -366,7 +368,7 @@ void OptionsScreenVideo::init()
|
||||
}
|
||||
|
||||
// Vulkan use fullscreen desktop so only show current screen size
|
||||
if (is_vulkan)
|
||||
if (is_vulkan_fullscreen_desktop)
|
||||
{
|
||||
found_config_res = false;
|
||||
m_resolutions.clear();
|
||||
@@ -378,7 +380,7 @@ void OptionsScreenVideo::init()
|
||||
{
|
||||
r.width = UserConfigParams::m_real_width;
|
||||
r.height = UserConfigParams::m_real_height;
|
||||
r.fullscreen = is_vulkan;
|
||||
r.fullscreen = is_vulkan_fullscreen_desktop;
|
||||
m_resolutions.push_back(r);
|
||||
|
||||
if (r.width == 1024 && r.height == 768)
|
||||
@@ -471,8 +473,8 @@ void OptionsScreenVideo::init()
|
||||
// disabled)
|
||||
bool in_game = StateManager::get()->getGameState() == GUIEngine::INGAME_MENU;
|
||||
|
||||
res->setActive(!in_game || is_vulkan);
|
||||
full->setActive(!in_game || is_vulkan);
|
||||
res->setActive(!in_game || is_vulkan_fullscreen_desktop);
|
||||
full->setActive(!in_game || is_vulkan_fullscreen_desktop);
|
||||
applyBtn->setActive(!in_game);
|
||||
#ifndef SERVER_ONLY
|
||||
gfx->setActive(!in_game && CVS->isGLSL());
|
||||
@@ -480,7 +482,7 @@ void OptionsScreenVideo::init()
|
||||
if (getWidget<SpinnerWidget>("scale_rtts")->isActivated())
|
||||
{
|
||||
getWidget<SpinnerWidget>("scale_rtts")->setActive(!in_game ||
|
||||
is_vulkan);
|
||||
GE::getDriver()->getDriverType() == video::EDT_VULKAN);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -883,7 +885,8 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name,
|
||||
|
||||
rememberWinpos->setActive(!fullscreen->getState());
|
||||
#ifndef SERVER_ONLY
|
||||
if (GE::getDriver()->getDriverType() == video::EDT_VULKAN)
|
||||
if (GE::getDriver()->getDriverType() == video::EDT_VULKAN &&
|
||||
GE::getGEConfig()->m_vulkan_fullscreen_desktop)
|
||||
{
|
||||
UserConfigParams::m_fullscreen = fullscreen->getState();
|
||||
update_fullscreen_desktop(UserConfigParams::m_fullscreen);
|
||||
|
||||
Reference in New Issue
Block a user