mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2024-11-13 00:24:29 +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 ] ){
|
qboolean RadSampleImage( byte *pixels, int width, int height, float st[ 2 ], float color[ 4 ] ){
|
||||||
float sto[ 2 ];
|
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
|
|
||||||
/* clear color first */
|
/* clear color first */
|
||||||
color[ 0 ] = color[ 1 ] = color[ 2 ] = color[ 3 ] = 255;
|
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;
|
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 */
|
/* get offsets */
|
||||||
x = ( (float) width * sto[ 0 ] ) + 0.5f;
|
x = ( (float) width * Modulo1IfNegative( st[ 0 ] ) ) + 0.5f;
|
||||||
x %= width;
|
x %= width;
|
||||||
y = ( (float) height * sto[ 1 ] ) + 0.5f;
|
y = ( (float) height * Modulo1IfNegative( st[ 1 ] ) ) + 0.5f;
|
||||||
y %= height;
|
y %= height;
|
||||||
|
|
||||||
/* get pixel */
|
/* get pixel */
|
||||||
|
|
Loading…
Reference in a new issue