]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/light.c
support -sRGBcolor for all _color keys
[xonotic/netradiant.git] / tools / quake3 / q3map2 / light.c
index f4a735ca9dab7911ff064621e8d6295e16d7c8fe..74ed5a46658848c04a941bd5e7cb455255310453 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 );
@@ -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 );
        
@@ -2083,6 +2095,12 @@ int LightMain( int argc, char **argv )
        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 );
 
@@ -2259,6 +2277,18 @@ int LightMain( int argc, char **argv )
                        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 ], "-exposure" ) )
                {
                        f = atof( argv[ i + 1 ] );