1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

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

View file

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