X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=tools%2Fquake3%2Fq3map2%2Fmain.c;h=f9017d5f938f1444e536979a3b0e9a4f6897885e;hb=aef478a99a9e9262ce1c79978df94ee4534aa42b;hp=efef64e96c42d7303b4cf7e1b2897e91aed34140;hpb=32f2674d1756be364b85622ce0030cf8923ec8e9;p=xonotic%2Fnetradiant.git diff --git a/tools/quake3/q3map2/main.c b/tools/quake3/q3map2/main.c index efef64e9..f9017d5f 100644 --- a/tools/quake3/q3map2/main.c +++ b/tools/quake3/q3map2/main.c @@ -75,7 +75,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; @@ -303,6 +303,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; @@ -350,67 +361,7 @@ determines solid non-sky brushes in the world void MiniMapSetupBrushes( void ) { - int i, b, compileFlags; - bspBrush_t *brush; - bspShader_t *shader; - shaderInfo_t *si; - - - /* note it */ - Sys_FPrintf( SYS_VRB, "--- MiniMapSetupBrushes ---\n" ); - - /* allocate */ - if( opaqueBrushes == NULL ) - opaqueBrushes = safe_malloc( numBSPBrushes / 8 + 1 ); - - /* clear */ - memset( opaqueBrushes, 0, numBSPBrushes / 8 + 1 ); - numOpaqueBrushes = 0; - - /* walk the list of worldspawn brushes */ - for( i = 0; i < minimap.model->numBSPBrushes; i++ ) - { - /* get brush */ - b = minimap.model->firstBSPBrush + i; - brush = &bspBrushes[ b ]; - -#if 0 - /* check all sides */ - compileFlags = 0; - for( j = 0; j < brush->numSides; j++ ) - { - /* do bsp shader calculations */ - side = &bspBrushSides[ brush->firstSide + j ]; - shader = &bspShaders[ side->shaderNum ]; - - /* get shader info */ - si = ShaderInfoForShader( shader->shader ); - if( si == NULL ) - continue; - - /* or together compile flags */ - compileFlags |= si->compileFlags; - } -#else - shader = &bspShaders[ brush->shaderNum ]; - si = ShaderInfoForShader( shader->shader ); - if( si == NULL ) - compileFlags = 0; - else - compileFlags = si->compileFlags; -#endif - - /* determine if this brush is solid */ - if( (compileFlags & (C_SOLID | C_SKY)) == C_SOLID ) - { - opaqueBrushes[ b >> 3 ] |= (1 << (b & 7)); - numOpaqueBrushes++; - maxOpaqueBrush = i; - } - } - - /* emit some statistics */ - Sys_FPrintf( SYS_VRB, "%9d solid brushes\n", numOpaqueBrushes ); + SetupBrushesFlags(C_SOLID | C_SKY, C_SOLID); } qboolean MiniMapEvaluateSampleOffsets(int *bestj, int *bestk, float *bestval) @@ -540,6 +491,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; @@ -577,9 +529,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++ ) @@ -663,12 +618,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); @@ -722,6 +699,45 @@ 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! + q = minimap.data1f; + 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.brightness ); + 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 ); @@ -989,8 +1005,8 @@ int AnalyzeBSP( int argc, char **argv ) lump = (byte*) header + offset; lumpInt = LittleLong( (int) *((int*) lump) ); lumpFloat = LittleFloat( (float) *((float*) lump) ); - memcpy( lumpString, (char*) lump, (length < 1024 ? length : 1024) ); - lumpString[ 1024 ] = '\0'; + memcpy( lumpString, (char*) lump, ((size_t)length < sizeof(lumpString) ? (size_t)length : sizeof(lumpString)-1) ); + lumpString[ sizeof(lumpString)-1 ] = '\0'; /* print basic lump info */ Sys_Printf( "Lump: %d\n", i ); @@ -1472,6 +1488,9 @@ void PseudoCompileBSP(qboolean need_tree) entity->firstDrawSurf = numMapDrawSurfs; + ClearMetaTriangles(); + PatchMapDrawSurfs(entity); + if(mapEntityNum == 0 && need_tree) { faces = MakeStructuralBSPFaceList(entities[0].brushes); @@ -1504,7 +1523,16 @@ void PseudoCompileBSP(qboolean need_tree) } } + if(meta) + { + ClassifyEntitySurfaces(entity); + MakeEntityDecals(entity); + MakeEntityMetaTriangles(entity); + SmoothMetaTriangles(); + MergeMetaTriangles(); + } FilterDrawsurfsIntoTree(entity, tree); + FilterStructuralBrushesIntoTree(entity, tree); FilterDetailBrushesIntoTree(entity, tree); @@ -1525,19 +1553,20 @@ int ConvertBSPMain( int argc, char **argv ) int (*convertFunc)( char * ); game_t *convertGame; char ext[1024]; - qboolean map_allowed, force_bsp; + qboolean map_allowed, force_bsp, force_map; /* set default */ convertFunc = ConvertBSPToASE; convertGame = NULL; - map_allowed = qtrue; + map_allowed = qfalse; force_bsp = qfalse; + force_map = qfalse; /* arg checking */ if( argc < 1 ) { - Sys_Printf( "Usage: q3map -scale [-v] \n" ); + Sys_Printf( "Usage: q3map -convert -format [-shadesasbitmap|-lightmapsastexcoord|-deluxemapsastexcoord] [-readbsp|-readmap [-meta|-patchmeta]] \n" ); return 0; } @@ -1553,6 +1582,11 @@ int ConvertBSPMain( int argc, char **argv ) convertFunc = ConvertBSPToASE; map_allowed = qfalse; } + else if( !Q_stricmp( argv[ i ], "obj" ) ) + { + convertFunc = ConvertBSPToOBJ; + map_allowed = qfalse; + } else if( !Q_stricmp( argv[ i ], "map_bp" ) ) { convertFunc = ConvertBSPToMap_BP; @@ -1585,8 +1619,24 @@ int ConvertBSPMain( int argc, char **argv ) } else if( !strcmp( argv[ i ], "-shadersasbitmap" ) ) shadersAsBitmap = qtrue; - else if( !strcmp( argv[ i ], "-forcereadbsp" ) ) + else if( !strcmp( argv[ i ], "-lightmapsastexcoord" ) ) + lightmapsAsTexcoord = qtrue; + else if( !strcmp( argv[ i ], "-deluxemapsastexcoord" ) ) + { + lightmapsAsTexcoord = qtrue; + deluxemap = qtrue; + } + else if( !strcmp( argv[ i ], "-readbsp" ) ) force_bsp = qtrue; + else if( !strcmp( argv[ i ], "-readmap" ) ) + force_map = qtrue; + else if( !strcmp( argv[ i ], "-meta" ) ) + meta = qtrue; + else if( !strcmp( argv[ i ], "-patchmeta" ) ) + { + meta = qtrue; + patchMeta = qtrue; + } } LoadShaderInfo(); @@ -1594,7 +1644,11 @@ int ConvertBSPMain( int argc, char **argv ) /* clean up map name */ strcpy(source, ExpandArg(argv[i])); ExtractFileExtension(source, ext); - if(!Q_stricmp(ext, "map") && !force_bsp) + + if(!map_allowed && !force_map) + force_bsp = qtrue; + + if(force_map || (!force_bsp && !Q_stricmp(ext, "map") && map_allowed)) { if(!map_allowed) Sys_Printf("WARNING: the requested conversion should not be done from .map files. Compile a .bsp first.\n");