vec4_t textureColor;
float alpha, alphaI, bf;
vec3_t blend;
- float st[ 2 ], lightmap[ 2 ];
- const float *radLuxel;
+ float st[ 2 ], lightmap[ 2 ], *radLuxel;
radVert_t *rv[ 3 ];
if (!bouncing)
blend[ 0 ] = i;
blend[ 1 ] = j;
blend[ 2 ] = k;
- /* Make blend inner sum = 1 */
bf = ( 1.0f / ( blend[ 0 ] + blend[ 1 ] + blend[ 2 ] ) );
VectorScale( blend, bf, blend );
/* create a blended sample */
st[ 0 ] = st[ 1 ] = 0.0f;
lightmap[ 0 ] = lightmap[ 1 ] = 0.0f;
- /* alpha and alphaI don't seem to be used anywhere*/
alphaI = 0.0f;
for ( l = 0; l < 3; l++ )
{
radLuxel = RAD_LUXEL( lightmapNum, x, y );
/* ignore unlit/unused luxels */
- if ( radLuxel[ 0 ] <= 0.0f || radLuxel[ 1 ] <= 0.0f || radLuxel[ 2 ] <= 0.0f ) {
- /* FIXME: not really sure which element of radLuxel should be checked */
+ if ( radLuxel[ 0 ] < 0.0f ) {
continue;
}
textureColor[ 3 ] = 255;
}
avgcolor = ( textureColor[ 0 ] + textureColor[ 1 ] + textureColor[ 2 ] ) / 3;
- for ( l = 0; l < 3; l++ ){
+ for ( i = 0; i < 3; i++ ){
+ color[ i ] = ( ( textureColor[ i ] * bounceColorRatio + ( avgcolor * ( 1 - bounceColorRatio ) ) ) / 255 ) * ( radLuxel[ i ] / 255 );
+ /*
+ Workaround for https://gitlab.com/xonotic/netradiant/-/issues/182
+ This loop normally uses the l iterator instead of i:
+ for ( l = 0; l < 3; l++ ){
color[ l ] = ( ( textureColor[ l ] * bounceColorRatio + ( avgcolor * ( 1 - bounceColorRatio ) ) ) / 255 ) * ( radLuxel[ l ] / 255 );
+ }
+ */
+ //Sys_Printf( "%i %i %i %i %i \n", (int) textureColor[ 0 ], (int) textureColor[ 1 ], (int) textureColor[ 2 ], (int) avgcolor, (int) color[ i ] );
}
AddPointToBounds( color, mins, maxs );
VectorAdd( average, color, average );
return qfalse;
}
- /* prevent division by zero */
- if ( plane[ lm->axisNum ] == 0 ) {
- Sys_FPrintf( SYS_WRN, "WARNING: plane[lm->axisNum] == 0\n" );
- return qfalse;
- }
-
/* check to see if we need to calculate texture->world tangent vectors */
if ( info->si->normalImage != NULL && CalcTangentVectors( 3, dv, stvStatic, ttvStatic ) ) {
stv = stvStatic;
return qfalse;
}
- /* prevent division by zero */
- if ( plane[ lm->axisNum ] == 0 ) {
- Sys_FPrintf( SYS_WRN, "WARNING: plane[lm->axisNum] == 0\n" );
- return qfalse;
- }
-
/* 4th point must fall on the plane */
dist = DotProduct( plane, dv[ 3 ]->xyz ) - plane[ 3 ];
if ( fabs( dist ) > QUAD_PLANAR_EPSILON ) {
/* clear light envelope */
light->envelope = 0;
- /* FIXME: radius may be undefined */
/* handle area lights */
if ( exactPointToPolygon && light->type == EMIT_AREA && light->w != NULL ) {
light->envelope = MAX_WORLD_COORD * 8.0f;