]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/light.c
add option -nofastpoint; make old buggy behaviour default as it is typically a lot...
[xonotic/netradiant.git] / tools / quake3 / q3map2 / light.c
index 512146e771d1138f0482d0597490fb7738796b9d..db1cc576c96d2e39e8b9baf789ebfabbd5038a34 100644 (file)
@@ -388,6 +388,12 @@ void CreateEntityLights( void )
                if( _color && _color[ 0 ] )
                {
                        sscanf( _color, "%f %f %f", &light->color[ 0 ], &light->color[ 1 ], &light->color[ 2 ] );
+                       if (colorsRGB)
+                       {
+                               light->color[0] = Image_LinearFloatFromsRGBFloat(light->color[0]);
+                               light->color[1] = Image_LinearFloatFromsRGBFloat(light->color[1]);
+                               light->color[2] = Image_LinearFloatFromsRGBFloat(light->color[2]);
+                       }
                        if (!(light->flags & LIGHT_UNNORMALIZED))
                        {
                                ColorNormalize( light->color, light->color );
@@ -423,7 +429,7 @@ void CreateEntityLights( void )
                        {
                                Sys_Printf( "WARNING: light at (%i %i %i) has missing target\n",
                                        (int) light->origin[ 0 ], (int) light->origin[ 1 ], (int) light->origin[ 2 ] );
-                               intensity = intensity * pointScale;
+                               light->photons *= pointScale;
                        }
                        else
                        {
@@ -479,12 +485,12 @@ void CreateEntityLights( void )
                                }
                                else
                                {
-                                       intensity = intensity * spotScale;
+                                       light->photons *= spotScale;
                                }
                        }
                }
                else
-                       intensity = intensity * pointScale;
+                       light->photons *= pointScale;
                
                /* jitter the light */
                for( j = 1; j < numSamples; j++ )
@@ -1850,6 +1856,12 @@ void LightWorld( void )
        
        /* find the optional minimum lighting values */
        GetVectorForKey( &entities[ 0 ], "_color", color );
+       if (colorsRGB)
+       {
+               color[0] = Image_LinearFloatFromsRGBFloat(color[0]);
+               color[1] = Image_LinearFloatFromsRGBFloat(color[1]);
+               color[2] = Image_LinearFloatFromsRGBFloat(color[2]);
+       }
        if( VectorLength( color ) == 0.0f )
                VectorSet( color, 1.0, 1.0, 1.0 );
        
@@ -2077,6 +2089,18 @@ int LightMain( int argc, char **argv )
        else
                Sys_Printf( " lightmap colorspace: linear\n" );
 
+       texturesRGB = game->texturesRGB;
+       if(texturesRGB)
+               Sys_Printf( " texture colorspace: sRGB\n" );
+       else
+               Sys_Printf( " texture colorspace: linear\n" );
+
+       colorsRGB = game->colorsRGB;
+       if(colorsRGB)
+               Sys_Printf( " _color colorspace: sRGB\n" );
+       else
+               Sys_Printf( " _color colorspace: linear\n" );
+
        lightmapCompensate = game->lightmapCompensate;
        Sys_Printf( " lightning compensation: %f\n", lightmapCompensate );
 
@@ -2099,12 +2123,6 @@ int LightMain( int argc, char **argv )
        else
                Sys_Printf( " shader lightstyles hack: enabled\n" );
 
-       keepLights = game->keepLights;
-       if (keepLights == qtrue)
-               Sys_Printf( " keep lights: enabled\n" );
-       else
-               Sys_Printf( " keep lights: disabled\n" );
-
        patchShadows = game->patchShadows;
        if (patchShadows == qtrue)
                Sys_Printf( " patch shadows: enabled\n" );
@@ -2134,23 +2152,24 @@ int LightMain( int argc, char **argv )
                        f = atof( argv[ i + 1 ] );
                        pointScale *= f;
                        spotScale *= f;
-                       Sys_Printf( "Point (entity) light scaled by %f to %f\n", f, pointScale );
+                       Sys_Printf( "Spherical point (entity) light scaled by %f to %f\n", f, pointScale );
+                       Sys_Printf( "Spot point (entity) light scaled by %f to %f\n", f, spotScale );
                        i++;
                }
                
-               if( !strcmp( argv[ i ], "-pointonly" ) || !strcmp( argv[ i ], "-pointonlyscale" ) )
+               else if( !strcmp( argv[ i ], "-spherical" ) || !strcmp( argv[ i ], "-sphericalscale" ) )
                {
                        f = atof( argv[ i + 1 ] );
                        pointScale *= f;
-                       Sys_Printf( "Point (entity) light scaled by %f to %f\n", f, pointScale );
+                       Sys_Printf( "Spherical point (entity) light scaled by %f to %f\n", f, pointScale );
                        i++;
                }
                
-               if( !strcmp( argv[ i ], "-spot" ) || !strcmp( argv[ i ], "-spotscale" ) )
+               else if( !strcmp( argv[ i ], "-spot" ) || !strcmp( argv[ i ], "-spotscale" ) )
                {
                        f = atof( argv[ i + 1 ] );
                        spotScale *= f;
-                       Sys_Printf( "Point (entity) light scaled by %f to %f\n", f, spotScale );
+                       Sys_Printf( "Spot point (entity) light scaled by %f to %f\n", f, spotScale );
                        i++;
                }
                
@@ -2234,18 +2253,52 @@ int LightMain( int argc, char **argv )
                        i++;
                }
                
-               else if( !strcmp( argv[ i ], "-sRGB" ) )
+               else if( !strcmp( argv[ i ], "-sRGBlight" ) )
                {
                        lightmapsRGB = qtrue;
                        Sys_Printf( "Lighting is in sRGB\n" );
                }
 
-               else if( !strcmp( argv[ i ], "-nosRGB" ) )
+               else if( !strcmp( argv[ i ], "-nosRGBlight" ) )
                {
                        lightmapsRGB = qfalse;
                        Sys_Printf( "Lighting is linear\n" );
                }
 
+               else if( !strcmp( argv[ i ], "-sRGBtex" ) )
+               {
+                       texturesRGB = qtrue;
+                       Sys_Printf( "Textures are in sRGB\n" );
+               }
+
+               else if( !strcmp( argv[ i ], "-nosRGBtex" ) )
+               {
+                       texturesRGB = qfalse;
+                       Sys_Printf( "Textures are linear\n" );
+               }
+
+               else if( !strcmp( argv[ i ], "-sRGBcolor" ) )
+               {
+                       colorsRGB = qtrue;
+                       Sys_Printf( "Colors are in sRGB\n" );
+               }
+
+               else if( !strcmp( argv[ i ], "-nosRGBcolor" ) )
+               {
+                       colorsRGB = qfalse;
+                       Sys_Printf( "Colors are linear\n" );
+               }
+
+               else if( !strcmp( argv[ i ], "-nosRGB" ) )
+               {
+                       lightmapsRGB = qtrue;
+                       Sys_Printf( "Lighting is linear\n" );
+                       texturesRGB = qtrue;
+                       Sys_Printf( "Textures are linear\n" );
+                       colorsRGB = qtrue;
+                       Sys_Printf( "Colors are linear\n" );
+               }
+
                else if( !strcmp( argv[ i ], "-exposure" ) )
                {
                        f = atof( argv[ i + 1 ] );
@@ -2514,12 +2567,18 @@ int LightMain( int argc, char **argv )
                        Sys_Printf( "The -smooth argument is deprecated, use \"-samples 2\" instead\n" );
                }
                
+               else if( !strcmp( argv[ i ], "-nofastpoint" ) )
+               {
+                       fastpoint = qfalse;
+                       Sys_Printf( "Automatic fast mode for point lights disabled\n" );
+               }
+               
                else if( !strcmp( argv[ i ], "-fast" ) )
                {
                        fast = qtrue;
                        fastgrid = qtrue;
                        fastbounce = qtrue;
-                       Sys_Printf( "Fast mode enabled\n" );
+                       Sys_Printf( "Fast mode enabled for all area lights\n" );
                }
                
                else if( !strcmp( argv[ i ], "-faster" ) )
@@ -2711,11 +2770,6 @@ int LightMain( int argc, char **argv )
                        noStyles = qfalse;
                        Sys_Printf( "Enabling lightstyles\n" );
                }
-               else if( !strcmp( argv[ i ], "-keeplights" ))
-               {
-                       keepLights = qtrue;
-                       Sys_Printf( "Leaving light entities on map after compile\n" );
-               }
                else if( !strcmp( argv[ i ], "-cpma" ) )
                {
                        cpmaHack = qtrue;
@@ -2804,6 +2858,10 @@ int LightMain( int argc, char **argv )
 
        }
 
+       /* fix up falloff tolerance for sRGB */
+       if(lightmapsRGB)
+               falloffTolerance = Image_LinearFloatFromsRGBFloat(falloffTolerance * (1.0 / 255.0)) * 255.0;
+
        /* fix up samples count */
        if(lightRandomSamples)
        {