mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2025-01-10 03:51:18 +00:00
-autolevel for minimap
This commit is contained in:
parent
2eb4247587
commit
4d47b8ed5b
1 changed files with 77 additions and 2 deletions
|
@ -103,7 +103,7 @@ typedef struct minimap_s
|
|||
float *sample_offsets;
|
||||
float sharpen_boxmult;
|
||||
float sharpen_centermult;
|
||||
float boost;
|
||||
float boost, brightness, contrast;
|
||||
float *data1f;
|
||||
float *sharpendata1f;
|
||||
vec3_t mins, size;
|
||||
|
@ -331,6 +331,17 @@ static void MiniMapContrastBoost(int y)
|
|||
}
|
||||
}
|
||||
|
||||
static void MiniMapBrightnessContrast(int y)
|
||||
{
|
||||
int x;
|
||||
float *q = &minimap.data1f[y * minimap.width];
|
||||
for(x = 0; x < minimap.width; ++x)
|
||||
{
|
||||
*q = *q * minimap.contrast + minimap.brightness;
|
||||
++q;
|
||||
}
|
||||
}
|
||||
|
||||
void MiniMapMakeMinsMaxs(vec3_t mins_in, vec3_t maxs_in, float border, qboolean keepaspect)
|
||||
{
|
||||
vec3_t mins, maxs, extend;
|
||||
|
@ -568,6 +579,7 @@ int MiniMapBSPMain( int argc, char **argv )
|
|||
char basename[1024];
|
||||
char path[1024];
|
||||
char relativeMinimapFilename[1024];
|
||||
qboolean autolevel;
|
||||
float minimapSharpen;
|
||||
float border;
|
||||
byte *data4b, *p;
|
||||
|
@ -605,9 +617,12 @@ int MiniMapBSPMain( int argc, char **argv )
|
|||
keepaspect = game->miniMapKeepAspect;
|
||||
mode = game->miniMapMode;
|
||||
|
||||
autolevel = qfalse;
|
||||
minimap.samples = 1;
|
||||
minimap.sample_offsets = NULL;
|
||||
minimap.boost = 1.0;
|
||||
minimap.brightness = 0.0;
|
||||
minimap.contrast = 1.0;
|
||||
|
||||
/* process arguments */
|
||||
for( i = 1; i < (argc - 1); i++ )
|
||||
|
@ -691,12 +706,34 @@ int MiniMapBSPMain( int argc, char **argv )
|
|||
mode = MINIMAP_MODE_WHITE;
|
||||
Sys_Printf( "Writing as white alpha image\n" );
|
||||
}
|
||||
else if( !strcmp( argv[ i ], "-boost" ) )
|
||||
else if( !strcmp( argv[ i ], "-boost" ) && i < (argc - 2) )
|
||||
{
|
||||
minimap.boost = atof(argv[i + 1]);
|
||||
i++;
|
||||
Sys_Printf( "Contrast boost set to %f\n", minimap.boost );
|
||||
}
|
||||
else if( !strcmp( argv[ i ], "-brightness" ) && i < (argc - 2) )
|
||||
{
|
||||
minimap.brightness = atof(argv[i + 1]);
|
||||
i++;
|
||||
Sys_Printf( "Brightness set to %f\n", minimap.brightness );
|
||||
}
|
||||
else if( !strcmp( argv[ i ], "-contrast" ) && i < (argc - 2) )
|
||||
{
|
||||
minimap.contrast = atof(argv[i + 1]);
|
||||
i++;
|
||||
Sys_Printf( "Contrast set to %f\n", minimap.contrast );
|
||||
}
|
||||
else if( !strcmp( argv[ i ], "-autolevel" ) )
|
||||
{
|
||||
autolevel = qtrue;
|
||||
Sys_Printf( "Auto level enabled\n", border );
|
||||
}
|
||||
else if( !strcmp( argv[ i ], "-noautolevel" ) )
|
||||
{
|
||||
autolevel = qfalse;
|
||||
Sys_Printf( "Auto level disabled\n", border );
|
||||
}
|
||||
}
|
||||
|
||||
MiniMapMakeMinsMaxs(mins, maxs, border, keepaspect);
|
||||
|
@ -750,6 +787,44 @@ int MiniMapBSPMain( int argc, char **argv )
|
|||
RunThreadsOnIndividual(minimap.height, qtrue, MiniMapContrastBoost);
|
||||
}
|
||||
|
||||
if(autolevel)
|
||||
{
|
||||
Sys_Printf( "\n--- MiniMapAutoLevel (%d) ---\n", minimap.height );
|
||||
float mi = 1, ma = 0;
|
||||
float s, o;
|
||||
|
||||
// TODO threads!
|
||||
for(y = 0; y < minimap.height; ++y)
|
||||
for(x = 0; x < minimap.width; ++x)
|
||||
{
|
||||
float v = *q++;
|
||||
if(v < mi)
|
||||
mi = v;
|
||||
if(v > ma)
|
||||
ma = v;
|
||||
}
|
||||
s = 1 / (ma - mi);
|
||||
o = mi / (ma - mi);
|
||||
|
||||
// equations:
|
||||
// brightness + contrast * v
|
||||
// after autolevel:
|
||||
// brightness + contrast * (v * s - o)
|
||||
// =
|
||||
// (brightness - contrast * o) + (contrast * s) * v
|
||||
minimap.brightness = minimap.brightness - minimap.contrast * o;
|
||||
minimap.contrast *= s;
|
||||
|
||||
Sys_Printf( "Auto level: Brightness changed to %f\n", minimap.boost );
|
||||
Sys_Printf( "Auto level: Contrast changed to %f\n", minimap.contrast );
|
||||
}
|
||||
|
||||
if(minimap.brightness != 0 || minimap.contrast != 1)
|
||||
{
|
||||
Sys_Printf( "\n--- MiniMapBrightnessContrast (%d) ---\n", minimap.height );
|
||||
RunThreadsOnIndividual(minimap.height, qtrue, MiniMapBrightnessContrast);
|
||||
}
|
||||
|
||||
if(minimap.sharpendata1f)
|
||||
{
|
||||
Sys_Printf( "\n--- MiniMapSharpen (%d) ---\n", minimap.height );
|
||||
|
|
Loading…
Reference in a new issue