mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2024-11-10 07:11:54 +00:00
Merge pull request #653 from illwieckz/fixinfinitebounce
q3map2/light_bounce: prevent infinite loop on obscure bias compute
This commit is contained in:
commit
8c397cb01f
1 changed files with 19 additions and 12 deletions
|
@ -195,6 +195,23 @@ static void RadClipWindingEpsilon( radWinding_t *in, vec3_t normal, vec_t dist,
|
|||
|
||||
|
||||
|
||||
/*
|
||||
Modulo1IfNegative()
|
||||
Previously the bias computation was doing:
|
||||
|
||||
while ( f < 0.0f ) {
|
||||
f += 1.0f;
|
||||
}
|
||||
|
||||
That may end in infinite loop in some case.
|
||||
It may also be slower because of useless loops.
|
||||
I don't know what that computation is for.
|
||||
-- illwieckz
|
||||
*/
|
||||
float Modulo1IfNegative( float f ){
|
||||
return f < 0.0f ? f - floor( f ) : f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
@ -204,10 +221,8 @@ static void RadClipWindingEpsilon( radWinding_t *in, vec3_t normal, vec_t dist,
|
|||
*/
|
||||
|
||||
qboolean RadSampleImage( byte *pixels, int width, int height, float st[ 2 ], float color[ 4 ] ){
|
||||
float sto[ 2 ];
|
||||
int x, y;
|
||||
|
||||
|
||||
/* clear color first */
|
||||
color[ 0 ] = color[ 1 ] = color[ 2 ] = color[ 3 ] = 255;
|
||||
|
||||
|
@ -216,18 +231,10 @@ qboolean RadSampleImage( byte *pixels, int width, int height, float st[ 2 ], flo
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
/* bias st */
|
||||
sto[ 0 ] = st[ 0 ];
|
||||
while ( sto[ 0 ] < 0.0f )
|
||||
sto[ 0 ] += 1.0f;
|
||||
sto[ 1 ] = st[ 1 ];
|
||||
while ( sto[ 1 ] < 0.0f )
|
||||
sto[ 1 ] += 1.0f;
|
||||
|
||||
/* get offsets */
|
||||
x = ( (float) width * sto[ 0 ] ) + 0.5f;
|
||||
x = ( (float) width * Modulo1IfNegative( st[ 0 ] ) ) + 0.5f;
|
||||
x %= width;
|
||||
y = ( (float) height * sto[ 1 ] ) + 0.5f;
|
||||
y = ( (float) height * Modulo1IfNegative( st[ 1 ] ) ) + 0.5f;
|
||||
y %= height;
|
||||
|
||||
/* get pixel */
|
||||
|
|
Loading…
Reference in a new issue