mark old tiles for update

This commit is contained in:
Ricardo Luís Vaz Silva 2024-12-19 19:45:37 -03:00 committed by Magnus Norddahl
commit d35195bded

View file

@ -758,6 +758,8 @@ void FDynamicLight::CollectWithinRadius(const DVector3 &opos, FSection *section,
void FDynamicLight::LinkLight()
{
bool markTiles = (Trace() && Level->levelMesh);
// mark the old light nodes
FLightNode * node;
@ -787,27 +789,62 @@ void FDynamicLight::LinkLight()
// Now delete any nodes that won't be used. These are the ones where
// m_thing is still nullptr.
node = touching_sides;
while (node)
{
if (node->lightsource == nullptr)
{
node = DeleteLightNode(node);
}
else
node = node->nextTarget;
}
node = touching_sector;
while (node)
if(markTiles)
{
if (node->lightsource == nullptr)
node = touching_sides;
while (node)
{
node = DeleteLightNode(node);
if (node->lightsource == nullptr)
{
MarkTilesForUpdate(Level, node->targLine->LightmapTiles);
node = DeleteLightNode(node);
}
else
node = node->nextTarget;
}
node = touching_sector;
while (node)
{
if (node->lightsource == nullptr)
{
for(subsector_t * ss : static_cast<FSection *>(node->targ)->subsectors)
{
MarkTilesForUpdate(Level, ss->LightmapTiles[0]);
MarkTilesForUpdate(Level, ss->LightmapTiles[1]);
}
node = DeleteLightNode(node);
}
else
node = node->nextTarget;
}
}
else
{
node = touching_sides;
while (node)
{
if (node->lightsource == nullptr)
{
node = DeleteLightNode(node);
}
else
node = node->nextTarget;
}
node = touching_sector;
while (node)
{
if (node->lightsource == nullptr)
{
node = DeleteLightNode(node);
}
else
node = node->nextTarget;
}
else
node = node->nextTarget;
}
}