mirror of
https://github.com/TTimo/GtkRadiant.git
synced 2025-01-10 12:01:10 +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 *sample_offsets;
|
||||||
float sharpen_boxmult;
|
float sharpen_boxmult;
|
||||||
float sharpen_centermult;
|
float sharpen_centermult;
|
||||||
float boost;
|
float boost, brightness, contrast;
|
||||||
float *data1f;
|
float *data1f;
|
||||||
float *sharpendata1f;
|
float *sharpendata1f;
|
||||||
vec3_t mins, size;
|
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)
|
void MiniMapMakeMinsMaxs(vec3_t mins_in, vec3_t maxs_in, float border, qboolean keepaspect)
|
||||||
{
|
{
|
||||||
vec3_t mins, maxs, extend;
|
vec3_t mins, maxs, extend;
|
||||||
|
@ -568,6 +579,7 @@ int MiniMapBSPMain( int argc, char **argv )
|
||||||
char basename[1024];
|
char basename[1024];
|
||||||
char path[1024];
|
char path[1024];
|
||||||
char relativeMinimapFilename[1024];
|
char relativeMinimapFilename[1024];
|
||||||
|
qboolean autolevel;
|
||||||
float minimapSharpen;
|
float minimapSharpen;
|
||||||
float border;
|
float border;
|
||||||
byte *data4b, *p;
|
byte *data4b, *p;
|
||||||
|
@ -605,9 +617,12 @@ int MiniMapBSPMain( int argc, char **argv )
|
||||||
keepaspect = game->miniMapKeepAspect;
|
keepaspect = game->miniMapKeepAspect;
|
||||||
mode = game->miniMapMode;
|
mode = game->miniMapMode;
|
||||||
|
|
||||||
|
autolevel = qfalse;
|
||||||
minimap.samples = 1;
|
minimap.samples = 1;
|
||||||
minimap.sample_offsets = NULL;
|
minimap.sample_offsets = NULL;
|
||||||
minimap.boost = 1.0;
|
minimap.boost = 1.0;
|
||||||
|
minimap.brightness = 0.0;
|
||||||
|
minimap.contrast = 1.0;
|
||||||
|
|
||||||
/* process arguments */
|
/* process arguments */
|
||||||
for( i = 1; i < (argc - 1); i++ )
|
for( i = 1; i < (argc - 1); i++ )
|
||||||
|
@ -691,12 +706,34 @@ int MiniMapBSPMain( int argc, char **argv )
|
||||||
mode = MINIMAP_MODE_WHITE;
|
mode = MINIMAP_MODE_WHITE;
|
||||||
Sys_Printf( "Writing as white alpha image\n" );
|
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]);
|
minimap.boost = atof(argv[i + 1]);
|
||||||
i++;
|
i++;
|
||||||
Sys_Printf( "Contrast boost set to %f\n", minimap.boost );
|
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);
|
MiniMapMakeMinsMaxs(mins, maxs, border, keepaspect);
|
||||||
|
@ -750,6 +787,44 @@ int MiniMapBSPMain( int argc, char **argv )
|
||||||
RunThreadsOnIndividual(minimap.height, qtrue, MiniMapContrastBoost);
|
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)
|
if(minimap.sharpendata1f)
|
||||||
{
|
{
|
||||||
Sys_Printf( "\n--- MiniMapSharpen (%d) ---\n", minimap.height );
|
Sys_Printf( "\n--- MiniMapSharpen (%d) ---\n", minimap.height );
|
||||||
|
|
Loading…
Reference in a new issue