Show a dialog and revert if device is not vulkan capable

This commit is contained in:
Benau
2022-09-21 10:33:54 +08:00
parent dd511638db
commit cfd7fa662b
2 changed files with 56 additions and 39 deletions

View File

@@ -53,6 +53,7 @@
#include "graphics/stk_text_billboard.hpp"
#include "graphics/stk_tex_manager.hpp"
#include "graphics/sun.hpp"
#include "guiengine/dialog_queue.hpp"
#include "guiengine/engine.hpp"
#include "guiengine/message_queue.hpp"
#include "guiengine/modaldialog.hpp"
@@ -75,6 +76,7 @@
#include "physics/physics.hpp"
#include "scriptengine/property_animator.hpp"
#include "states_screens/dialogs/confirm_resolution_dialog.hpp"
#include "states_screens/dialogs/message_dialog.hpp"
#include "states_screens/state_manager.hpp"
#include "tracks/track_manager.hpp"
#include "tracks/track.hpp"
@@ -394,43 +396,7 @@ void IrrDriver::initDevice()
GE::setShaderFolder(file_manager->getShadersDir());
#endif
SIrrlichtCreationParameters params;
video::E_DRIVER_TYPE driver_created = video::EDT_NULL;
if (std::string(UserConfigParams::m_render_driver) == "gl")
{
#if defined(USE_GLES2)
driver_created = video::EDT_OGLES2;
#else
driver_created = video::EDT_OPENGL;
#endif
}
else if (std::string(UserConfigParams::m_render_driver) == "directx9")
{
driver_created = video::EDT_DIRECT3D9;
}
else if (std::string(UserConfigParams::m_render_driver) == "vulkan")
{
driver_created = video::EDT_VULKAN;
#ifndef SERVER_ONLY
GE::getGEConfig()->m_texture_compression =
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
{
Log::warn("IrrDriver", "Unknown driver %s, revert to gl",
UserConfigParams::m_render_driver.c_str());
UserConfigParams::m_render_driver.revertToDefaults();
#if defined(USE_GLES2)
driver_created = video::EDT_OGLES2;
#else
driver_created = video::EDT_OPENGL;
#endif
}
core::stringw display_msg;
m_logger_level = irr::ELL_INFORMATION;
#ifndef __SWITCH__
@@ -523,6 +489,44 @@ void IrrDriver::initDevice()
params.ForceLegacyDevice = (UserConfigParams::m_force_legacy_device ||
UserConfigParams::m_gamepad_visualisation);
begin:
video::E_DRIVER_TYPE driver_created = video::EDT_NULL;
if (std::string(UserConfigParams::m_render_driver) == "gl")
{
#if defined(USE_GLES2)
driver_created = video::EDT_OGLES2;
#else
driver_created = video::EDT_OPENGL;
#endif
}
else if (std::string(UserConfigParams::m_render_driver) == "directx9")
{
driver_created = video::EDT_DIRECT3D9;
}
else if (std::string(UserConfigParams::m_render_driver) == "vulkan")
{
driver_created = video::EDT_VULKAN;
#ifndef SERVER_ONLY
GE::getGEConfig()->m_texture_compression =
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
{
Log::warn("IrrDriver", "Unknown driver %s, revert to gl",
UserConfigParams::m_render_driver.c_str());
UserConfigParams::m_render_driver.revertToDefaults();
#if defined(USE_GLES2)
driver_created = video::EDT_OGLES2;
#else
driver_created = video::EDT_OPENGL;
#endif
}
// Try 32 and, upon failure, 24 then 16 bit per pixels
for (int bits=32; bits>15; bits -=8)
{
@@ -576,6 +580,12 @@ void IrrDriver::initDevice()
}
*/
m_device = createDeviceEx(params);
if (!m_device && driver_created == video::EDT_VULKAN)
{
display_msg = L"Vulkan unsupported";
UserConfigParams::m_render_driver.revertToDefaults();
goto begin;
}
if(m_device)
break;
@@ -853,6 +863,13 @@ void IrrDriver::initDevice()
#endif
if (GUIEngine::isNoGraphics())
return;
if (!display_msg.empty())
{
MessageDialog *dialog =
new MessageDialog(display_msg, /*from queue*/ true);
GUIEngine::DialogQueue::get()->pushDialog(dialog);
}
} // initDevice
// ----------------------------------------------------------------------------

View File

@@ -58,8 +58,8 @@ ModalDialog::ModalDialog(const float percentWidth, const float percentHeight,
m_percent_width = percentWidth;
m_percent_height = percentHeight;
m_irrlicht_window = NULL;
m_was_resizable = GUIEngine::getDevice()->isResizable();
GUIEngine::getDevice()->setResizable(false);
m_was_resizable = irr_driver->getDevice()->isResizable();
irr_driver->getDevice()->setResizable(false);
} // ModalDialog
// ----------------------------------------------------------------------------