mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Merge pull request #1653 from Areloch/twiLightZone
Corrects culling of point/spot lights
This commit is contained in:
commit
b7882e7280
|
|
@ -68,7 +68,7 @@ LightBase::LightBase()
|
|||
mFlareScale( 1.0f )
|
||||
{
|
||||
mNetFlags.set( Ghostable | ScopeAlways );
|
||||
mTypeMask = EnvironmentObjectType | LightObjectType;
|
||||
mTypeMask = LightObjectType;
|
||||
|
||||
mLight = LightManager::createLightInfo();
|
||||
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue