From 3226189d8226db7ace1d6af07106a59ee47cdc96 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Thu, 11 Dec 2014 20:18:00 -0500 Subject: [PATCH] Force disable shadows and GI when OpenGL is not recent enough. Fixes #1722 --- src/graphics/irr_driver.cpp | 8 ++++++++ .../dialogs/custom_video_settings.cpp | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 613589200..6beb981cd 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -607,6 +607,14 @@ void IrrDriver::initDevice() { Log::info("irr_driver", "GLSL supported."); } + + if (!supportGeometryShader()) + { + // these options require geometry shaders + UserConfigParams::m_shadows = 0; + UserConfigParams::m_gi = false; + } + // m_glsl might be reset in rtt if an error occurs. if(m_glsl) { diff --git a/src/states_screens/dialogs/custom_video_settings.cpp b/src/states_screens/dialogs/custom_video_settings.cpp index 3dbe33623..05c5c277e 100644 --- a/src/states_screens/dialogs/custom_video_settings.cpp +++ b/src/states_screens/dialogs/custom_video_settings.cpp @@ -106,6 +106,12 @@ void CustomVideoSettingsDialog::beforeAddingWidgets() cb_tex_cmp->setState(false); cb_tex_cmp->setDeactivated(); } + + if (!irr_driver->supportGeometryShader()) + { + shadows->setDeactivated(); + getWidget("global_illumination")->setDeactivated(); + } } // ----------------------------------------------------------------------------- @@ -123,7 +129,7 @@ GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::s UserConfigParams::m_motionblur = advanced_pipeline && getWidget("motionblur")->getState(); - if (advanced_pipeline) + if (advanced_pipeline && irr_driver->supportGeometryShader()) { UserConfigParams::m_shadows = getWidget("shadows")->getValue(); @@ -143,7 +149,8 @@ GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::s advanced_pipeline && getWidget("lightshaft")->getState(); UserConfigParams::m_gi = - advanced_pipeline && getWidget("global_illumination")->getState(); + advanced_pipeline && irr_driver->supportGeometryShader() && + getWidget("global_illumination")->getState(); UserConfigParams::m_glow = advanced_pipeline && getWidget("glow")->getState(); @@ -236,5 +243,11 @@ void CustomVideoSettingsDialog::updateActivation() getWidget("glow")->setDeactivated(); getWidget("bloom")->setDeactivated(); } + + if (!irr_driver->supportGeometryShader()) + { + getWidget("shadows")->setDeactivated(); + getWidget("global_illumination")->setDeactivated(); + } } // updateActivation