diff --git a/Engine/source/lighting/lightManager.cpp b/Engine/source/lighting/lightManager.cpp index 3bb71fd97..3f93e5b20 100644 --- a/Engine/source/lighting/lightManager.cpp +++ b/Engine/source/lighting/lightManager.cpp @@ -198,7 +198,7 @@ void LightManager::setSpecialLight( LightManager::SpecialLightTypesEnum type, Li registerGlobalLight( light, NULL ); } -void LightManager::registerGlobalLights( const Frustum *frustum, bool staticLighting ) +void LightManager::registerGlobalLights( const Frustum *frustum, bool staticLighting, bool cullSceneLights) { PROFILE_SCOPE( LightManager_RegisterGlobalLights ); @@ -226,16 +226,17 @@ void LightManager::registerGlobalLights( const Frustum *frustum, bool staticLigh { // Cull the lights using the frustum. getSceneManager()->getContainer()->findObjectList( *frustum, lightMask, &activeLights ); - - for (U32 i = 0; i < activeLights.size(); ++i) - { - if (!getSceneManager()->mRenderedObjectsList.contains(activeLights[i])) - { - activeLights.erase(i); - --i; - } - } - + if (cullSceneLights) + { + for (U32 i = 0; i < activeLights.size(); ++i) + { + if (!getSceneManager()->mRenderedObjectsList.contains(activeLights[i])) + { + activeLights.erase(i); + --i; + } + } + } // Store the culling position for sun placement // later... see setSpecialLight. mCullPos = frustum->getPosition(); diff --git a/Engine/source/lighting/lightManager.h b/Engine/source/lighting/lightManager.h index 4ffa7022f..f57324801 100644 --- a/Engine/source/lighting/lightManager.h +++ b/Engine/source/lighting/lightManager.h @@ -134,7 +134,7 @@ public: virtual void registerLocalLight( LightInfo *light ); virtual void unregisterLocalLight( LightInfo *light ); - virtual void registerGlobalLights( const Frustum *frustum, bool staticlighting ); + virtual void registerGlobalLights( const Frustum *frustum, bool staticlighting, bool cullSceneLights = true ); virtual void unregisterAllLights(); /// Returns all unsorted and un-scored lights (both global and local). diff --git a/Engine/source/scene/reflector.cpp b/Engine/source/scene/reflector.cpp index ecaabc43a..871bd56bb 100644 --- a/Engine/source/scene/reflector.cpp +++ b/Engine/source/scene/reflector.cpp @@ -422,7 +422,7 @@ void CubeReflector::updateFace( const ReflectParams ¶ms, U32 faceidx ) reflectRenderState.setDiffuseCameraTransform( params.query->headMatrix ); // render scene - LIGHTMGR->registerGlobalLights( &reflectRenderState.getCullingFrustum(), false ); + LIGHTMGR->registerGlobalLights( &reflectRenderState.getCullingFrustum(), false, false ); gClientSceneGraph->renderSceneNoLights( &reflectRenderState, mDesc->objectTypeMask ); LIGHTMGR->unregisterAllLights(); diff --git a/Engine/source/scene/sceneManager.cpp b/Engine/source/scene/sceneManager.cpp index aeca87092..0abd96843 100644 --- a/Engine/source/scene/sceneManager.cpp +++ b/Engine/source/scene/sceneManager.cpp @@ -195,7 +195,7 @@ void SceneManager::renderScene( SceneRenderState* renderState, U32 objectMask, S // Get the lights for rendering the scene. PROFILE_START( SceneGraph_registerLights ); - LIGHTMGR->registerGlobalLights( &renderState->getCullingFrustum(), false ); + LIGHTMGR->registerGlobalLights( &renderState->getCullingFrustum(), false, renderState->isDiffusePass()); PROFILE_END(); // If its a diffuse pass, update the current ambient light level.