also new option: -sRGBtex, and renamed -sRGB to -sRGBlight

This commit is contained in:
Rudolf Polzer 2011-10-29 16:33:46 +02:00
parent aaa68ca620
commit e8f27310d6
25 changed files with 66 additions and 7 deletions

View File

@ -1 +0,0 @@
../../../branch-manager

View File

@ -683,6 +683,7 @@ int BSPMain( int argc, char **argv )
maxSurfaceVerts = game->maxSurfaceVerts; maxSurfaceVerts = game->maxSurfaceVerts;
maxSurfaceIndexes = game->maxSurfaceIndexes; maxSurfaceIndexes = game->maxSurfaceIndexes;
emitFlares = game->emitFlares; emitFlares = game->emitFlares;
texturesRGB = game->texturesRGB;
/* process arguments */ /* process arguments */
for( i = 1; i < (argc - 1); i++ ) for( i = 1; i < (argc - 1); i++ )
@ -918,6 +919,16 @@ int BSPMain( int argc, char **argv )
Sys_Printf( "Debug portal surfaces enabled\n" ); Sys_Printf( "Debug portal surfaces enabled\n" );
debugPortals = qtrue; debugPortals = qtrue;
} }
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 ], "-altsplit" ) ) else if( !strcmp( argv[ i ], "-altsplit" ) )
{ {
Sys_Printf( "Alternate BSP splitting (by 27) enabled\n" ); Sys_Printf( "Alternate BSP splitting (by 27) enabled\n" );

View File

@ -64,6 +64,7 @@ game_t struct
0, /* lightmap width/height */ 0, /* lightmap width/height */
0, /* lightmap gamma */ 0, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
0, /* lightmap exposure */ 0, /* lightmap exposure */
0, /* lightmap compensate */ 0, /* lightmap compensate */
0, /* lightgrid scale */ 0, /* lightgrid scale */

View File

@ -55,6 +55,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
200.0f, /* lightmap exposure */ 200.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
0.3f, /* lightgrid scale */ 0.3f, /* lightgrid scale */

View File

@ -55,6 +55,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.2f, /* lightmap gamma */ 1.2f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
200.0f, /* lightmap exposure */ 200.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
0.3f, /* lightgrid scale */ 0.3f, /* lightgrid scale */

View File

@ -114,6 +114,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -149,6 +149,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qtrue, /* lightmap sRGB */ qtrue, /* lightmap sRGB */
qfalse, /* texture sRGB (yes, this is incorrect, but we better match ET:UT) */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -68,6 +68,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -65,6 +65,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -64,6 +64,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -55,6 +55,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
200.0f, /* lightmap exposure */ 200.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
0.4f, /* lightgrid scale */ 0.4f, /* lightgrid scale */

View File

@ -116,6 +116,7 @@ game_t struct
512, /* lightmap width/height */ 512, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -113,6 +113,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -65,6 +65,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -85,6 +85,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -140,6 +140,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -113,6 +113,7 @@ game_t struct
512, /* lightmap width/height */ 512, /* lightmap width/height */
2.0f, /* lightmap gamma */ 2.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -71,6 +71,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -130,6 +130,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -67,6 +67,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -64,6 +64,7 @@ game_t struct
128, /* lightmap width/height */ 128, /* lightmap width/height */
1.0f, /* lightmap gamma */ 1.0f, /* lightmap gamma */
qfalse, /* lightmap sRGB */ qfalse, /* lightmap sRGB */
qfalse, /* texture sRGB */
1.0f, /* lightmap exposure */ 1.0f, /* lightmap exposure */
1.0f, /* lightmap compensate */ 1.0f, /* lightmap compensate */
1.0f, /* lightgrid scale */ 1.0f, /* lightgrid scale */

View File

@ -2077,6 +2077,12 @@ int LightMain( int argc, char **argv )
else else
Sys_Printf( " lightmap colorspace: linear\n" ); Sys_Printf( " lightmap colorspace: linear\n" );
texturesRGB = game->texturesRGB;
if(texturesRGB)
Sys_Printf( " texture colorspace: sRGB\n" );
else
Sys_Printf( " texture colorspace: linear\n" );
lightmapCompensate = game->lightmapCompensate; lightmapCompensate = game->lightmapCompensate;
Sys_Printf( " lightning compensation: %f\n", lightmapCompensate ); Sys_Printf( " lightning compensation: %f\n", lightmapCompensate );
@ -2235,18 +2241,30 @@ int LightMain( int argc, char **argv )
i++; i++;
} }
else if( !strcmp( argv[ i ], "-sRGB" ) ) else if( !strcmp( argv[ i ], "-sRGBlight" ) )
{ {
lightmapsRGB = qtrue; lightmapsRGB = qtrue;
Sys_Printf( "Lighting is in sRGB\n" ); Sys_Printf( "Lighting is in sRGB\n" );
} }
else if( !strcmp( argv[ i ], "-nosRGB" ) ) else if( !strcmp( argv[ i ], "-nosRGBlight" ) )
{ {
lightmapsRGB = qfalse; lightmapsRGB = qfalse;
Sys_Printf( "Lighting is linear\n" ); 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 ], "-exposure" ) ) else if( !strcmp( argv[ i ], "-exposure" ) )
{ {
f = atof( argv[ i + 1 ] ); f = atof( argv[ i + 1 ] );

View File

@ -233,6 +233,14 @@ qboolean RadSampleImage( byte *pixels, int width, int height, float st[ 2 ], flo
pixels += (y * width * 4) + (x * 4); pixels += (y * width * 4) + (x * 4);
VectorCopy( pixels, color ); VectorCopy( pixels, color );
color[ 3 ] = pixels[ 3 ]; color[ 3 ] = pixels[ 3 ];
if(texturesRGB)
{
color[0] = Image_LinearFloatFromsRGBFloat(color[0] * (1.0 / 255.0)) * 255.0;
color[1] = Image_LinearFloatFromsRGBFloat(color[1] * (1.0 / 255.0)) * 255.0;
color[2] = Image_LinearFloatFromsRGBFloat(color[2] * (1.0 / 255.0)) * 255.0;
}
return qtrue; return qtrue;
} }

View File

@ -44,7 +44,6 @@ ColorToBytes()
ydnar: moved to here 2001-02-04 ydnar: moved to here 2001-02-04
*/ */
#define Image_sRGBFloatFromLinear(c) (((c) < 0.8014848f) ? (c) * 0.05046875f : 1.055f * (float)pow((c)*(1.0f/256.0f), 1.0f/2.4f) - 0.055f)
void ColorToBytes( const float *color, byte *colorBytes, float scale ) void ColorToBytes( const float *color, byte *colorBytes, float scale )
{ {
int i; int i;
@ -125,9 +124,9 @@ void ColorToBytes( const float *color, byte *colorBytes, float scale )
/* sRGB lightmaps */ /* sRGB lightmaps */
if(lightmapsRGB) if(lightmapsRGB)
{ {
sample[0] = floor(Image_sRGBFloatFromLinear(sample[0]) * 255.0 + 0.5); sample[0] = floor(Image_sRGBFloatFromLinearFloat(sample[0] * (1.0 / 255.0)) * 255.0 + 0.5);
sample[1] = floor(Image_sRGBFloatFromLinear(sample[1]) * 255.0 + 0.5); sample[1] = floor(Image_sRGBFloatFromLinearFloat(sample[1] * (1.0 / 255.0)) * 255.0 + 0.5);
sample[2] = floor(Image_sRGBFloatFromLinear(sample[2]) * 255.0 + 0.5); sample[2] = floor(Image_sRGBFloatFromLinearFloat(sample[2] * (1.0 / 255.0)) * 255.0 + 0.5);
} }
/* store it off */ /* store it off */

View File

@ -566,6 +566,7 @@ typedef struct game_s
int lightmapSize; /* bsp lightmap width/height */ int lightmapSize; /* bsp lightmap width/height */
float lightmapGamma; /* default lightmap gamma */ float lightmapGamma; /* default lightmap gamma */
qboolean lightmapsRGB; /* default lightmap sRGB mode */ qboolean lightmapsRGB; /* default lightmap sRGB mode */
qboolean texturesRGB; /* default texture sRGB mode */
float lightmapExposure; /* default lightmap exposure */ float lightmapExposure; /* default lightmap exposure */
float lightmapCompensate; /* default lightmap compensate value */ float lightmapCompensate; /* default lightmap compensate value */
float gridScale; /* vortex: default lightgrid scale (affects both directional and ambient spectres) */ float gridScale; /* vortex: default lightgrid scale (affects both directional and ambient spectres) */
@ -2298,6 +2299,7 @@ Q_EXTERN qboolean inGrid Q_ASSIGN(0);
/* ydnar: lightmap gamma/compensation */ /* ydnar: lightmap gamma/compensation */
Q_EXTERN float lightmapGamma Q_ASSIGN( 1.0f ); Q_EXTERN float lightmapGamma Q_ASSIGN( 1.0f );
Q_EXTERN float lightmapsRGB Q_ASSIGN( qfalse ); Q_EXTERN float lightmapsRGB Q_ASSIGN( qfalse );
Q_EXTERN float texturesRGB Q_ASSIGN( qfalse );
Q_EXTERN float lightmapExposure Q_ASSIGN( 1.0f ); Q_EXTERN float lightmapExposure Q_ASSIGN( 1.0f );
Q_EXTERN float lightmapCompensate Q_ASSIGN( 1.0f ); Q_EXTERN float lightmapCompensate Q_ASSIGN( 1.0f );
@ -2540,5 +2542,8 @@ Q_EXTERN bspAdvertisement_t bspAds[ MAX_MAP_ADVERTISEMENTS ];
#define AUTOEXPAND_BY_REALLOC_BSP(suffix, def) AUTOEXPAND_BY_REALLOC(bsp##suffix, numBSP##suffix, allocatedBSP##suffix, def) #define AUTOEXPAND_BY_REALLOC_BSP(suffix, def) AUTOEXPAND_BY_REALLOC(bsp##suffix, numBSP##suffix, allocatedBSP##suffix, def)
#define Image_LinearFloatFromsRGBFloat(c) (((c) <= 0.04045f) ? (c) * (1.0f / 12.92f) : (float)pow(((c) + 0.055f)*(1.0f/1.055f), 2.4f))
#define Image_sRGBFloatFromLinearFloat(c) (((c) < 0.0031308f) ? (c) * 12.92f : 1.055f * (float)pow((c), 1.0f/2.4f) - 0.055f)
/* end marker */ /* end marker */
#endif #endif