slow down non-fast operation but make it more accurate by not using falloff tolerance at all when -fast is not used
This commit is contained in:
parent
c30d367a12
commit
8dcd2d22e6
|
|
@ -3631,10 +3631,15 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
|
|||
|
||||
/* handle area lights */
|
||||
if( exactPointToPolygon && light->type == EMIT_AREA && light->w != NULL )
|
||||
{
|
||||
light->envelope = MAX_WORLD_COORD * 8.0f;
|
||||
|
||||
/* check for fast mode */
|
||||
if( (light->flags & LIGHT_FAST) || (light->flags & LIGHT_FAST_TEMP) )
|
||||
{
|
||||
/* ugly hack to calculate extent for area lights, but only done once */
|
||||
VectorScale( light->normal, -1.0f, dir );
|
||||
for( radius = 100.0f; radius < 130000.0f && light->envelope == 0; radius += 10.0f )
|
||||
for( radius = 100.0f; radius < MAX_WORLD_COORD * 8.0f; radius += 10.0f )
|
||||
{
|
||||
float factor;
|
||||
|
||||
|
|
@ -3643,12 +3648,13 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
|
|||
if( factor < 0.0f )
|
||||
factor *= -1.0f;
|
||||
if( (factor * light->add) <= light->falloffTolerance )
|
||||
{
|
||||
light->envelope = radius;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* check for fast mode */
|
||||
if( !(light->flags & LIGHT_FAST) && !(light->flags & LIGHT_FAST_TEMP) )
|
||||
light->envelope = MAX_WORLD_COORD * 8.0f;
|
||||
intensity = light->photons; /* hopefully not used */
|
||||
}
|
||||
else
|
||||
|
|
@ -3660,15 +3666,14 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
|
|||
/* other calcs */
|
||||
if( light->envelope <= 0.0f )
|
||||
{
|
||||
/* FIXME shouldn't we assume falloffTolerance == 0 when -fast is not used? */
|
||||
|
||||
/* solve distance for non-distance lights */
|
||||
if( !(light->flags & LIGHT_ATTEN_DISTANCE) )
|
||||
light->envelope = MAX_WORLD_COORD * 8.0f;
|
||||
|
||||
else if( (light->flags & LIGHT_FAST) || (light->flags & LIGHT_FAST_TEMP) )
|
||||
{
|
||||
/* solve distance for linear lights */
|
||||
else if( (light->flags & LIGHT_ATTEN_LINEAR ) )
|
||||
//% light->envelope = ((intensity / light->falloffTolerance) * linearScale - 1 + radius) / light->fade;
|
||||
if( (light->flags & LIGHT_ATTEN_LINEAR ) )
|
||||
light->envelope = ((intensity * linearScale) - light->falloffTolerance) / light->fade;
|
||||
|
||||
/*
|
||||
|
|
@ -3690,6 +3695,17 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
|
|||
dist = sqrt( light->photons / T );
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/* solve distance for linear lights */
|
||||
if( (light->flags & LIGHT_ATTEN_LINEAR ) )
|
||||
light->envelope = (intensity * linearScale) / light->fade;
|
||||
|
||||
/* can't cull these */
|
||||
else
|
||||
light->envelope = MAX_WORLD_COORD * 8.0f;
|
||||
}
|
||||
}
|
||||
|
||||
/* chop radius against pvs */
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user