Merge pull request #1653 from Areloch/twiLightZone

Corrects culling of point/spot lights
This commit is contained in:
Areloch 2016-06-21 05:10:53 -05:00 committed by GitHub
commit b7882e7280
5 changed files with 23 additions and 2 deletions

View file

@ -68,7 +68,7 @@ LightBase::LightBase()
mFlareScale( 1.0f )
{
mNetFlags.set( Ghostable | ScopeAlways );
mTypeMask = EnvironmentObjectType | LightObjectType;
mTypeMask = LightObjectType;
mLight = LightManager::createLightInfo();

View file

@ -177,7 +177,8 @@ enum SceneObjectTypeMasks
StaticShapeObjectType |
DynamicShapeObjectType |
EntityObjectType |
ZoneObjectType ), // This improves the result of zone traversals.
ZoneObjectType |
LightObjectType ), // This improves the result of zone traversals.
/// Mask for objects that should be specifically excluded from zone culling.
CULLING_EXCLUDE_TYPEMASK = ( TerrainObjectType |

View file

@ -227,6 +227,15 @@ 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;
}
}
// Store the culling position for sun placement
// later... see setSpecialLight.
mCullPos = frustum->getPosition();

View file

@ -451,6 +451,13 @@ void SceneManager::_renderScene( SceneRenderState* state, U32 objectMask, SceneZ
PROFILE_END();
//store our rendered objects into a list we can easily look up against later if required
mRenderedObjectsList.clear();
for (U32 i = 0; i < numRenderObjects; ++i)
{
mRenderedObjectsList.push_back(mBatchQueryList[i]);
}
// Render the remaining objects.
PROFILE_START( Scene_renderObjects );

View file

@ -117,6 +117,10 @@ class SceneManager
/// If true, render the AABBs of objects for debugging.
static bool smRenderBoundingBoxes;
//A cache list of objects that made it through culling, so we don't have to attempt to re-test
//visibility of objects later.
Vector< SceneObject* > mRenderedObjectsList;
protected:
/// Whether this is the client-side scene.