]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/light_ydnar.c
Merge branch 'fix-fast' into 'master'
[xonotic/netradiant.git] / tools / quake3 / q3map2 / light_ydnar.c
index c9107407e3cf9c6c0b97c6f0a7e9c68d116521b8..c75dac2e55f5705029df32059d2eec071a09031d 100644 (file)
@@ -1492,6 +1492,7 @@ float DirtForSample( trace_t *trace ){
                        /* set endpoint */
                        VectorMA( trace->origin, dirtDepth, direction, trace->end );
                        SetupTrace( trace );
+                       VectorSet(trace->color, 1.0f, 1.0f, 1.0f);
 
                        /* trace */
                        TraceLine( trace );
@@ -1514,6 +1515,7 @@ float DirtForSample( trace_t *trace ){
                        /* set endpoint */
                        VectorMA( trace->origin, dirtDepth, direction, trace->end );
                        SetupTrace( trace );
+                       VectorSet(trace->color, 1.0f, 1.0f, 1.0f);
 
                        /* trace */
                        TraceLine( trace );
@@ -1527,6 +1529,7 @@ float DirtForSample( trace_t *trace ){
        /* direct ray */
        VectorMA( trace->origin, dirtDepth, normal, trace->end );
        SetupTrace( trace );
+       VectorSet(trace->color, 1.0f, 1.0f, 1.0f);
 
        /* trace */
        TraceLine( trace );
@@ -1737,9 +1740,8 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
                origin2 = SUPER_ORIGIN( x, y );
                //%     normal2 = SUPER_NORMAL( x, y );
        }
-       else
-       {
-               Error( "Spurious lightmap S vector\n" );
+       else {
+               Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap S vector\n" );
        }
 
        VectorSubtract( origin2, origin, originVecs[ 0 ] );
@@ -1762,16 +1764,13 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
                origin2 = SUPER_ORIGIN( x, y );
                //%     normal2 = SUPER_NORMAL( x, y );
        }
-       else{
-               Sys_Printf( "WARNING: Spurious lightmap T vector\n" );
+       else {
+               Sys_FPrintf( SYS_WRN, "WARNING: Spurious lightmap T vector\n" );
        }
 
        VectorSubtract( origin2, origin, originVecs[ 1 ] );
-       //%     VectorSubtract( normal2, normal, normalVecs[ 1 ] );
 
        /* calculate new origin */
-       //%     VectorMA( origin, bx, originVecs[ 0 ], sampleOrigin );
-       //%     VectorMA( sampleOrigin, by, originVecs[ 1 ], sampleOrigin );
        for ( i = 0; i < 3; i++ )
                sampleOrigin[ i ] = sampleOrigin[ i ] + ( bx * originVecs[ 0 ][ i ] ) + ( by * originVecs[ 1 ][ i ] );
 
@@ -1782,10 +1781,6 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
        }
 
        /* calculate new normal */
-       //%     VectorMA( normal, bx, normalVecs[ 0 ], sampleNormal );
-       //%     VectorMA( sampleNormal, by, normalVecs[ 1 ], sampleNormal );
-       //%     if( VectorNormalize( sampleNormal, sampleNormal ) <= 0.0f )
-       //%             return qfalse;
        normal = SUPER_NORMAL( x, y );
        VectorCopy( normal, sampleNormal );
 
@@ -2193,7 +2188,7 @@ void IlluminateRawLightmap( int rawLightmapNum ){
 
                        /* max of MAX_LIGHTMAPS (4) styles allowed to hit a surface/lightmap */
                        if ( lightmapNum >= MAX_LIGHTMAPS ) {
-                               Sys_Printf( "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
+                               Sys_FPrintf( SYS_WRN, "WARNING: Hit per-surface style limit (%d)\n", MAX_LIGHTMAPS );
                                continue;
                        }
 
@@ -2213,7 +2208,7 @@ void IlluminateRawLightmap( int rawLightmapNum ){
                        }
 
                        /* set luxel filter radius */
-                       luxelFilterRadius = superSample * filterRadius / lm->sampleSize;
+                       luxelFilterRadius = lm->sampleSize != 0 ? superSample * filterRadius / lm->sampleSize : 0;
                        if ( luxelFilterRadius == 0 && ( filterRadius > 0.0f || filter ) ) {
                                luxelFilterRadius = 1;
                        }
@@ -2245,42 +2240,31 @@ void IlluminateRawLightmap( int rawLightmapNum ){
                                        normal = SUPER_NORMAL( x, y );
                                        flag = SUPER_FLAG( x, y );
 
-#if 0
-                                       ////////// 27's temp hack for testing edge clipping ////
-                                       if ( origin[0] == 0 && origin[1] == 0 && origin[2] == 0 ) {
-                                               lightLuxel[ 1 ] = 255;
-                                               lightLuxel[ 3 ] = 1.0f;
-                                               totalLighted++;
-                                       }
-                                       else
-#endif
-                                       {
-                                               /* set contribution count */
-                                               lightLuxel[ 3 ] = 1.0f;
+                                       /* set contribution count */
+                                       lightLuxel[ 3 ] = 1.0f;
 
-                                               /* setup trace */
-                                               trace.cluster = *cluster;
-                                               VectorCopy( origin, trace.origin );
-                                               VectorCopy( normal, trace.normal );
+                                       /* setup trace */
+                                       trace.cluster = *cluster;
+                                       VectorCopy( origin, trace.origin );
+                                       VectorCopy( normal, trace.normal );
 
-                                               /* get light for this sample */
-                                               LightContributionToSample( &trace );
-                                               VectorCopy( trace.color, lightLuxel );
+                                       /* get light for this sample */
+                                       LightContributionToSample( &trace );
+                                       VectorCopy( trace.color, lightLuxel );
 
-                                               /* add the contribution to the deluxemap */
-                                               if ( deluxemap ) {
-                                                       VectorCopy( trace.directionContribution, lightDeluxel );
-                                               }
+                                       /* add the contribution to the deluxemap */
+                                       if ( deluxemap ) {
+                                               VectorCopy( trace.directionContribution, lightDeluxel );
+                                       }
 
-                                               /* check for evilness */
-                                               if ( trace.forceSubsampling > 1.0f && ( lightSamples > 1 || lightRandomSamples ) && luxelFilterRadius == 0 ) {
-                                                       totalLighted++;
-                                                       *flag |= FLAG_FORCE_SUBSAMPLING; /* force */
-                                               }
-                                               /* add to count */
-                                               else if ( trace.color[ 0 ] || trace.color[ 1 ] || trace.color[ 2 ] ) {
+                                       /* check for evilness */
+                                       if ( trace.forceSubsampling > 1.0f && ( lightSamples > 1 || lightRandomSamples ) && luxelFilterRadius == 0 ) {
                                                        totalLighted++;
-                                               }
+                                               *flag |= FLAG_FORCE_SUBSAMPLING; /* force */
+                                       }
+                                       /* add to count */
+                                       else if ( trace.color[ 0 ] || trace.color[ 1 ] || trace.color[ 2 ] ) {
+                                               totalLighted++;
                                        }
                                }
                        }
@@ -2608,8 +2592,6 @@ void IlluminateRawLightmap( int rawLightmapNum ){
                                {
                                        /* get cluster */
                                        cluster = SUPER_CLUSTER( x, y );
-                                       //%     if( *cluster < 0 ) // TODO why not do this check? These pixels should be zero anyway
-                                       //%             continue;
 
                                        /* get particulars */
                                        luxel = SUPER_LUXEL( lightmapNum, x, y );
@@ -2733,45 +2715,6 @@ void IlluminateRawLightmap( int rawLightmapNum ){
                        }
                }
        }
-
-
-#if 0
-       // audit pass
-       for ( lightmapNum = 0; lightmapNum < MAX_LIGHTMAPS; lightmapNum++ )
-       {
-               /* early out */
-               if ( lm->superLuxels[ lightmapNum ] == NULL ) {
-                       continue;
-               }
-               for ( y = 0; y < lm->sh; y++ )
-                       for ( x = 0; x < lm->sw; x++ )
-                       {
-                               /* get cluster */
-                               cluster = SUPER_CLUSTER( x, y );
-                               luxel = SUPER_LUXEL( lightmapNum, x, y );
-                               deluxel = SUPER_DELUXEL( x, y );
-                               if ( !luxel || !deluxel || !cluster ) {
-                                       Sys_FPrintf( SYS_VRB, "WARNING: I got NULL'd.\n" );
-                                       continue;
-                               }
-                               else if ( *cluster < 0 ) {
-                                       // unmapped pixel
-                                       // should have neither deluxemap nor lightmap
-                                       if ( deluxel[3] ) {
-                                               Sys_FPrintf( SYS_VRB, "WARNING: I have written deluxe to an unmapped luxel. Sorry.\n" );
-                                       }
-                               }
-                               else
-                               {
-                                       // mapped pixel
-                                       // should have both deluxemap and lightmap
-                                       if ( deluxel[3] ) {
-                                               Sys_FPrintf( SYS_VRB, "WARNING: I forgot to write deluxe to a mapped luxel. Sorry.\n" );
-                                       }
-                               }
-                       }
-       }
-#endif
 }
 
 
@@ -3181,7 +3124,7 @@ void IlluminateVertexes( int num ){
    determines opaque brushes in the world and find sky shaders for sunlight calculations
  */
 
-void SetupBrushesFlags( int mask_any, int test_any, int mask_all, int test_all ){
+void SetupBrushesFlags( unsigned int mask_any, unsigned int test_any, unsigned int mask_all, unsigned int test_all ){
        int i, j, b;
        unsigned int compileFlags, allCompileFlags;
        qboolean inside;
@@ -3673,7 +3616,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag ){
                                else{
                                        light->flags &= ~LIGHT_FAST_TEMP;
                                }
-                               if ( fastpoint && ( light->flags != EMIT_AREA ) ) {
+                               if ( fastpoint && ( light->type != EMIT_AREA ) ) {
                                        light->flags |= LIGHT_FAST_TEMP;
                                }
                                if ( light->si && light->si->noFast ) {
@@ -3792,7 +3735,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag ){
                                        for ( i = 0; i < 3; i++ )
                                        {
                                                if ( mins[ i ] > light->origin[ i ] || maxs[ i ] < light->origin[ i ] ) {
-                                                       //% Sys_Printf( "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
+                                                       //% Sys_FPrintf( SYS_WRN, "WARNING: Light PVS bounds (%.0f, %.0f, %.0f) -> (%.0f, %.0f, %.0f)\ndo not encompass light %d (%f, %f, %f)\n",
                                                        //%     mins[ 0 ], mins[ 1 ], mins[ 2 ],
                                                        //%     maxs[ 0 ], maxs[ 1 ], maxs[ 2 ],
                                                        //%     numLights, light->origin[ 0 ], light->origin[ 1 ], light->origin[ 2 ] );
@@ -4248,6 +4191,7 @@ float FloodLightForSample( trace_t *trace, float floodLightDistance, qboolean fl
                        //VectorMA( trace->origin, 1, direction, trace->origin );
 
                        SetupTrace( trace );
+                       VectorSet(trace->color, 1.0f, 1.0f, 1.0f);
                        /* trace */
                        TraceLine( trace );
                        contribution = 1;