From 44de0e1df47cc3976c87273eff2693278f64e185 Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Wed, 4 Apr 2012 20:43:16 +0200 Subject: [PATCH] Honor /sim/rendering/shadows/enabled preference --- src/Main/renderer.cxx | 33 +++++++++++++++++++++++++++++++-- src/Main/renderer.hxx | 1 + 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index cdbcfaee3..2cb3c4b82 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -453,12 +453,20 @@ public: } }; +class ShadowEnabledListener : public SGPropertyChangeListener { +public: + virtual void valueChanged(SGPropertyNode* node) { + globals->get_renderer()->enableShadows(node->getBoolValue()); + } +}; + void FGRenderer::init( void ) { _classicalRenderer = !fgGetBool("/sim/rendering/rembrandt", false); _shadowMapSize = fgGetInt( "/sim/rendering/shadows/map-size", 4096 ); fgAddChangeListener( new ShadowMapSizeListener, "/sim/rendering/shadows/map-size" ); + fgAddChangeListener( new ShadowEnabledListener, "/sim/rendering/shadows/enabled" ); _scenery_loaded = fgGetNode("/sim/sceneryloaded", true); _scenery_override = fgGetNode("/sim/sceneryloaded-override", true); _panel_hotspots = fgGetNode("/sim/panel-hotspots", true); @@ -817,7 +825,10 @@ osg::Camera* FGRenderer::buildDeferredShadowCamera( flightgear::CameraInfo* info shadowSwitch->addChild( cascadeCam ); info->shadowTexGen[i] = new osg::TexGen; } - shadowSwitch->setAllChildrenOn(); + if (fgGetBool("/sim/rendering/shadows/enabled", true)) + shadowSwitch->setAllChildrenOn(); + else + shadowSwitch->setAllChildrenOff(); return mainShadowCamera; } @@ -858,7 +869,7 @@ void FGRenderer::updateShadowCamera(const flightgear::CameraInfo* info, const os up.normalize(); dir.normalize(); // cos(100 deg) == -0.17 - if (up * dir < -0.17 ) { + if (up * dir < -0.17 || !fgGetBool("/sim/rendering/shadows/enabled", true)) { shadowSwitch->setAllChildrenOff(); } else { double left,right,bottom,top,zNear,zFar; @@ -933,6 +944,24 @@ void FGRenderer::updateShadowMapSize(int mapSize) } } +void FGRenderer::enableShadows(bool enabled) +{ + for ( CameraGroup::CameraIterator ii = CameraGroup::getDefault()->camerasBegin(); + ii != CameraGroup::getDefault()->camerasEnd(); + ++ii ) + { + CameraInfo* info = ii->get(); + Camera* camera = info->getCamera(SHADOW_CAMERA); + if (camera == 0) continue; + + osg::Switch* shadowSwitch = camera->getChild(0)->asSwitch(); + if (enabled) + shadowSwitch->setAllChildrenOn(); + else + shadowSwitch->setAllChildrenOff(); + } +} + #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) diff --git a/src/Main/renderer.hxx b/src/Main/renderer.hxx index 819745538..664d6c32a 100644 --- a/src/Main/renderer.hxx +++ b/src/Main/renderer.hxx @@ -106,6 +106,7 @@ public: void updateShadowCamera(const flightgear::CameraInfo* info, const osg::Vec3d& position); void updateShadowMapSize(int mapSize); + void enableShadows(bool enabled); SGSky* getSky() const { return _sky; } -- 2.39.5