aboutsummaryrefslogtreecommitdiff
path: root/src/client/renderingengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/renderingengine.cpp')
-rw-r--r--src/client/renderingengine.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index e12833c21..1392b5567 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -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]);
}