Move video_driver default selection to runtime

This commit is contained in:
sfan5 2023-03-05 15:55:00 +01:00
parent 67068cfaf4
commit c26e122485
8 changed files with 41 additions and 27 deletions

@ -171,7 +171,7 @@ local function formspec(tabview, name, tabdata)
.. getSettingIndex.Antialiasing() .. "]" .. .. getSettingIndex.Antialiasing() .. "]" ..
"box[8,0;3.75,4.5;#999999]" "box[8,0;3.75,4.5;#999999]"
local video_driver = core.settings:get("video_driver") local video_driver = core.get_active_driver()
local shaders_enabled = core.settings:get_bool("enable_shaders") local shaders_enabled = core.settings:get_bool("enable_shaders")
if video_driver == "opengl" then if video_driver == "opengl" then
tab_string = tab_string .. tab_string = tab_string ..

@ -1664,7 +1664,7 @@ shader_path (Shader path) path
# Note: A restart is required after changing this! # Note: A restart is required after changing this!
# OpenGL is the default for desktop, and OGLES2 for Android. # OpenGL is the default for desktop, and OGLES2 for Android.
# Shaders are supported by OpenGL and OGLES2 (experimental). # Shaders are supported by OpenGL and OGLES2 (experimental).
video_driver (Video driver) enum opengl opengl,ogles1,ogles2 video_driver (Video driver) enum opengl,ogles1,ogles2,
# Distance in nodes at which transparency depth sorting is enabled # Distance in nodes at which transparency depth sorting is enabled
# Use this to limit the performance impact of transparency depth sorting # Use this to limit the performance impact of transparency depth sorting

@ -203,7 +203,10 @@ GUI
will be added to fieldname value is set to formname itself will be added to fieldname value is set to formname itself
* if `is_file_select` is `true`, a file and not a folder will be selected * if `is_file_select` is `true`, a file and not a folder will be selected
* returns nil or selected file/folder * returns nil or selected file/folder
* `core.get_active_renderer()`: Ex: "OpenGL 4.6". * `core.get_active_driver()`:
* technical name of active video driver, e.g. "opengl"
* `core.get_active_renderer()`:
* name of current renderer, e.g. "OpenGL 4.6"
* `core.get_window_info()`: Same as server-side `get_player_window_information` API. * `core.get_window_info()`: Same as server-side `get_player_window_information` API.
-- Note that none of these things are constant, they are likely to change -- Note that none of these things are constant, they are likely to change

@ -99,22 +99,27 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
u16 fsaa = g_settings->getU16("fsaa"); u16 fsaa = g_settings->getU16("fsaa");
// Determine driver // Determine driver
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL; video::E_DRIVER_TYPE driverType;
const std::string &driverstring = g_settings->get("video_driver"); const std::string &driverstring = g_settings->get("video_driver");
std::vector<video::E_DRIVER_TYPE> drivers = std::vector<video::E_DRIVER_TYPE> drivers =
RenderingEngine::getSupportedVideoDrivers(); RenderingEngine::getSupportedVideoDrivers();
u32 i; u32 i;
for (i = 0; i != drivers.size(); i++) { for (i = 0; i != drivers.size(); i++) {
if (!strcasecmp(driverstring.c_str(), auto &driverinfo = RenderingEngine::getVideoDriverInfo(drivers[i]);
RenderingEngine::getVideoDriverInfo(drivers[i]).name.c_str())) { if (!strcasecmp(driverstring.c_str(), driverinfo.name.c_str())) {
driverType = drivers[i]; driverType = drivers[i];
break; break;
} }
} }
if (i == drivers.size()) { if (i == drivers.size()) {
errorstream << "Invalid video_driver specified; " driverType = drivers.at(0);
"defaulting to opengl" auto &name = RenderingEngine::getVideoDriverInfo(driverType).name;
<< std::endl; if (driverstring.empty()) {
infostream << "Defaulting to video_driver = " << name << std::endl;
} else {
errorstream << "Invalid video_driver specified; defaulting to "
<< name << std::endl;
}
} }
SIrrlichtCreationParameters params = SIrrlichtCreationParameters(); SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
@ -517,20 +522,20 @@ void RenderingEngine::draw_menu_scene(gui::IGUIEnvironment *guienv,
get_video_driver()->endScene(); get_video_driver()->endScene();
} }
std::vector<irr::video::E_DRIVER_TYPE> RenderingEngine::getSupportedVideoDrivers() std::vector<video::E_DRIVER_TYPE> RenderingEngine::getSupportedVideoDrivers()
{ {
// Only check these drivers. // Only check these drivers. We do not support software and D3D in any capacity.
// We do not support software and D3D in any capacity. // Order by preference (best first)
static const irr::video::E_DRIVER_TYPE glDrivers[4] = { static const video::E_DRIVER_TYPE glDrivers[] = {
irr::video::EDT_NULL, video::EDT_OPENGL,
irr::video::EDT_OPENGL, video::EDT_OGLES2,
irr::video::EDT_OGLES1, video::EDT_OGLES1,
irr::video::EDT_OGLES2, video::EDT_NULL,
}; };
std::vector<irr::video::E_DRIVER_TYPE> drivers; std::vector<video::E_DRIVER_TYPE> drivers;
for (int i = 0; i < 4; i++) { for (u32 i = 0; i < ARRLEN(glDrivers); i++) {
if (irr::IrrlichtDevice::isDriverSupported(glDrivers[i])) if (IrrlichtDevice::isDriverSupported(glDrivers[i]))
drivers.push_back(glDrivers[i]); drivers.push_back(glDrivers[i]);
} }

@ -700,7 +700,7 @@ ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client)
{ {
// disable if unsupported // disable if unsupported
if (g_settings->getBool("enable_dynamic_shadows") && ( if (g_settings->getBool("enable_dynamic_shadows") && (
g_settings->get("video_driver") != "opengl" || device->getVideoDriver()->getDriverType() != video::EDT_OPENGL ||
!g_settings->getBool("enable_shaders"))) { !g_settings->getBool("enable_shaders"))) {
g_settings->setBool("enable_dynamic_shadows", false); g_settings->setBool("enable_dynamic_shadows", false);
} }

@ -207,11 +207,7 @@ void set_default_settings()
settings->setDefault("lighting_boost_spread", "0.2"); settings->setDefault("lighting_boost_spread", "0.2");
settings->setDefault("texture_path", ""); settings->setDefault("texture_path", "");
settings->setDefault("shader_path", ""); settings->setDefault("shader_path", "");
#if ENABLE_GLES settings->setDefault("video_driver", "");
settings->setDefault("video_driver", "ogles2");
#else
settings->setDefault("video_driver", "opengl");
#endif
settings->setDefault("cinematic", "false"); settings->setDefault("cinematic", "false");
settings->setDefault("camera_smoothing", "0"); settings->setDefault("camera_smoothing", "0");
settings->setDefault("cinematic_camera_smoothing", "0.7"); settings->setDefault("cinematic_camera_smoothing", "0.7");

@ -894,7 +894,7 @@ int ModApiMainMenu::l_download_file(lua_State *L)
/******************************************************************************/ /******************************************************************************/
int ModApiMainMenu::l_get_video_drivers(lua_State *L) int ModApiMainMenu::l_get_video_drivers(lua_State *L)
{ {
std::vector<irr::video::E_DRIVER_TYPE> drivers = RenderingEngine::getSupportedVideoDrivers(); auto drivers = RenderingEngine::getSupportedVideoDrivers();
lua_newtable(L); lua_newtable(L);
for (u32 i = 0; i != drivers.size(); i++) { for (u32 i = 0; i != drivers.size(); i++) {
@ -953,6 +953,13 @@ int ModApiMainMenu::l_get_window_info(lua_State *L)
} }
/******************************************************************************/ /******************************************************************************/
int ModApiMainMenu::l_get_active_driver(lua_State *L)
{
auto drivertype = RenderingEngine::get_video_driver()->getDriverType();
lua_pushstring(L, RenderingEngine::getVideoDriverInfo(drivertype).name.c_str());
return 1;
}
int ModApiMainMenu::l_get_active_renderer(lua_State *L) int ModApiMainMenu::l_get_active_renderer(lua_State *L)
{ {
@ -1102,6 +1109,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(gettext); API_FCT(gettext);
API_FCT(get_video_drivers); API_FCT(get_video_drivers);
API_FCT(get_window_info); API_FCT(get_window_info);
API_FCT(get_active_driver);
API_FCT(get_active_renderer); API_FCT(get_active_renderer);
API_FCT(get_min_supp_proto); API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto); API_FCT(get_max_supp_proto);

@ -106,6 +106,8 @@ private:
static int l_get_window_info(lua_State *L); static int l_get_window_info(lua_State *L);
static int l_get_active_driver(lua_State *L);
static int l_get_active_renderer(lua_State *L); static int l_get_active_renderer(lua_State *L);
//filesystem //filesystem