//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void RunThreadsOn(int workcnt, qboolean showpacifier, void (*func)(int)) { int start, end; Log_Print("no multi-threading\n"); dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; start = I_FloatTime(); #ifdef NeXT if (pacifier) { setbuf(stdout, NULL); } #endif func(0); end = I_FloatTime(); if (pacifier) { printf(" (%i)\n", end - start); } } //end of the function RunThreadsOn
void PrintFinish (void) { char Str[20]; if (start != 0) { end = I_FloatTime (); SecToStr ((end - start + 0.5), Str, true); logprintf ("\nElapsed time : %s\n", Str); } fclose (logfile); }
void ScrnShutDown(void) { long int now = (long)I_FloatTime(); long int diff = now - StartTime; EndText(); if (LogFile != NULL) { fflush(LogFile); fclose(LogFile); } printf("Ctrl+C hit. Aborting compile after %02ld:%02ld:%02ld.\n", diff / 360, (diff / 60) % 59, diff % 59 /* * , TotalAlloc */ ); exit(1); }
void InitWork(int numwork,int print) { int i,j; sprint=print; if (!print) return; start=I_FloatTime(); if (numwork<=60) per_dot=1; else per_dot=numwork/60+1; j=numwork/per_dot; // if (numwork%per_dot) j++; printf("[ %i %*c]\b",per_dot,j,' '); for (i=0;i<j;i++) printf("\b"); fflush(stdout); wleft=per_dot; }
/* ================== main ================== */ int main (int argc, char **argv) { int i; double start, end; char sourcename[1024]; char destname[1024]; // malloc_debug (15); // // check command line flags // for (i=1 ; i<argc ; i++) { if (argv[i][0] != '-') break; else if (!strcmp (argv[i],"-draw")) drawflag = true; else if (!strcmp (argv[i],"-notjunc")) notjunc = true; else if (!strcmp (argv[i],"-nofill")) nofill = true; else if (!strcmp (argv[i],"-noclip")) noclip = true; else if (!strcmp (argv[i],"-onlyents")) onlyents = true; else if (!strcmp (argv[i],"-verbose")) allverbose = true; else if (!strcmp (argv[i],"-usehulls")) usehulls = true; // don't fork -- use the existing files else if (!strcmp (argv[i],"-hullnum")) { hullnum = atoi(argv[i+1]); i++; } else if (!strcmp (argv[i],"-subdivide")) { subdivide_size = atoi(argv[i+1]); i++; } else Error ("qbsp: Unknown option '%s'", argv[i]); } if (i != argc - 2 && i != argc - 1) Error ("usage: qbsp [options] sourcefile [destfile]\noptions: -nojunc -nofill -threads[124] -draw -onlyents -verbose -proj <projectpath>"); SetQdirFromPath (argv[i]); // // let forked processes change name for ps status // argv0 = argv[0]; // // create destination name if not specified // strcpy (sourcename, argv[i]); DefaultExtension (sourcename, ".map"); if (i != argc - 2) { strcpy (destname, argv[i]); StripExtension (destname); strcat (destname, ".bsp"); printf ("outputfile: %s\n", destname); } else strcpy (destname, argv[i+1]); // // do it! // start = I_FloatTime (); ProcessFile (sourcename, destname); end = I_FloatTime (); printf ("%5.1f seconds elapsed\n", end-start); return 0; }
int GetThreadWork() { int r, f, i; double ct, finish, finish2, finish3; ThreadLock(); if (dispatch == 0) { oldf = 0; } if (dispatch > workcount) { Developer(DEVELOPER_LEVEL_ERROR, "dispatch > workcount!!!\n"); ThreadUnlock(); return -1; } if (dispatch == workcount) { Developer(DEVELOPER_LEVEL_MESSAGE, "dispatch == workcount, work is complete\n"); ThreadUnlock(); return -1; } if (dispatch < 0) { Developer(DEVELOPER_LEVEL_ERROR, "negative dispatch!!!\n"); ThreadUnlock(); return -1; } f = THREADTIMES_SIZE * dispatch / workcount; if (pacifier) { printf("\r%6d /%6d", dispatch, workcount); #ifdef ZHLT_PROGRESSFILE // AJM if (g_progressfile) { } #endif if (f != oldf) { ct = I_FloatTime(); /* Fill in current time for threadtimes record */ for (i = oldf; i <= f; i++) { if (threadtimes[i] < 1) { threadtimes[i] = ct; } } oldf = f; if (f > 10) { finish = (ct - threadtimes[0]) * (THREADTIMES_SIZEf - f) / f; finish2 = 10.0 * (ct - threadtimes[f - 10]) * (THREADTIMES_SIZEf - f) / THREADTIMES_SIZEf; finish3 = THREADTIMES_SIZEf * (ct - threadtimes[f - 1]) * (THREADTIMES_SIZEf - f) / THREADTIMES_SIZEf; if (finish > 1.0) { printf(" (%d%%: est. time to completion %ld/%ld/%ld secs) ", f, (long)(finish), (long)(finish2), (long)(finish3)); #ifdef ZHLT_PROGRESSFILE // AJM if (g_progressfile) { } #endif } else { printf(" (%d%%: est. time to completion <1 sec) ", f); #ifdef ZHLT_PROGRESSFILE // AJM if (g_progressfile) { } #endif } } } } else { if (f != oldf) { oldf = f; switch (f) { case 10: case 20: case 30: case 40: case 50: case 60: case 70: case 80: case 90: case 100: /* case 5: case 15: case 25: case 35: case 45: case 55: case 65: case 75: case 85: case 95: */ printf("%d%%...", f); default: break; } } } r = dispatch; dispatch++; ThreadUnlock(); return r; }
/* ConvertBspToASE() exports an 3d studio ase file from the bsp */ int ConvertBspToASE(int argc, char **argv) { int i; double start, end; char source[1024]; char dest[1024]; Sys_Printf("---- convert map to ase ----\n"); for(i = 1; i < argc; i++) { if(!strcmp(argv[i], "-threads")) { numthreads = atoi(argv[i + 1]); i++; } else if(!strcmp(argv[i], "-v")) { Sys_Printf("verbose = true\n"); verbose = qtrue; } else if(!strcmp(argv[i], "-connect")) { Broadcast_Setup(argv[++i]); } else if(argv[i][0] == '-') Error("Unknown option \"%s\"", argv[i]); else break; } if(i != argc - 1) { Error("usage: xmap -bsp2ase [-<switch> [-<switch> ...]] <mapname.bsp>\n" "\n" "Switches:\n" " v = verbose output\n"); //" quake1 = convert from QuakeWorld to XreaL\n" //" quake2 = convert from Quake2 to XreaL\n" //" quake3 = convert from Quake3 to XreaL\n" //" quake4 = convert from Quake4 to XreaL\n"); } start = I_FloatTime(); ThreadSetDefault(); SetQdirFromPath(argv[i]); strcpy(source, ExpandArg(argv[i])); StripExtension(source); DefaultExtension(source, ".bsp"); // start from scratch LoadShaderInfo(); Sys_Printf("reading %s\n", source); LoadBSPFile(source); ParseEntities(); // strcpy(dest, ExpandArg(argv[i])); StripExtension(dest); strcat(dest, "_converted"); DefaultExtension(dest, ".ase"); WriteASEFile(dest); end = I_FloatTime(); Sys_Printf("%5.0f seconds elapsed\n", end - start); // shut down connection Broadcast_Shutdown(); return 0; }
/* * ================== * main * light modelfile * ================== */ int main(int argc, const char **argv) { int i, bsp_version; double start; double end; char source[1024]; init_log("light.log"); logprint("----- TyrLight v0.99e -----\n" #if 0 "** Beta version " __DATE__ " " __TIME__ "\n" #endif ); numthreads = GetDefaultThreads(); for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-threads")) { numthreads = atoi(argv[i + 1]); i++; } else if (!strcmp(argv[i], "-extra")) { extrasamples = true; logprint("extra sampling enabled\n"); } else if (!strcmp(argv[i], "-dist")) { scaledist = atof(argv[i + 1]); i++; } else if (!strcmp(argv[i], "-range")) { rangescale = atof(argv[i + 1]); i++; } else if (!strcmp(argv[i], "-light")) { worldminlight = atof(argv[i + 1]); i++; } else if (!strcmp(argv[i], "-compress")) { compress_ents = true; logprint("light entity compression enabled\n"); } else if (!strcmp(argv[i], "-colored") || !strcmp(argv[i], "-coloured")) { colored = true; } else if (!strcmp(argv[i], "-bsp30")) { bsp30 = true; } else if (!strcmp(argv[i], "-lit")) { litfile = true; } else if (!strcmp(argv[i], "-nominlimit")) { nominlimit = true; } else if (argv[i][0] == '-') Error("Unknown option \"%s\"", argv[i]); else break; } if (numthreads > 1) logprint("running with %d threads\n", numthreads); // Switch on colored flag if specifying -lit or -bsp30 if (bsp30 || litfile) colored = true; // Check the colored options if (colored) { if (!bsp30 && !litfile) { logprint("colored output format not specified -> using bsp 30\n"); bsp30 = true; } else if (bsp30 && litfile) { Error("Two colored output formats specified"); } else if (litfile) { logprint("colored output format: lit\n"); } else if (bsp30) { logprint("colored output format: bsp30\n"); } } if (i != argc - 1) Error("usage: light [-threads num] [-light num] [-extra]\n" " [-colored] [-bsp30] [-lit]\n" " [-nocount] [-compress] [-nominlimit] bspfile\n"); start = I_FloatTime(); strcpy(source, argv[i]); StripExtension(source); DefaultExtension(source, ".bsp"); bsp_version = LoadBSPFile(source); LoadEntities(); MakeTnodes(); FindFaceOffsets(); LightWorld(); WriteEntitiesToString(); if (colored && bsp30) WriteBSPFile(source, 30); else WriteBSPFile(source, bsp_version); if (colored && litfile) WriteLitFile(source, LIT_VERSION); end = I_FloatTime(); logprint("%5.1f seconds elapsed\n", end - start); close_log(); return 0; }
int main( int argc, char **argv ) { int i, r; double start, end; /* we want consistent 'randomness' */ srand( 0 ); /* start timer */ start = I_FloatTime(); /* this was changed to emit version number over the network */ printf( Q3MAP_VERSION "\n" ); /* set exit call */ atexit( ExitQ3Map ); /* read general options first */ for( i = 1; i < argc; i++ ) { /* -connect */ if( !strcmp( argv[ i ], "-connect" ) ) { argv[ i ] = NULL; i++; Broadcast_Setup( argv[ i ] ); argv[ i ] = NULL; } /* verbose */ else if( !strcmp( argv[ i ], "-v" ) ) { verbose = qtrue; argv[ i ] = NULL; } /* force */ else if( !strcmp( argv[ i ], "-force" ) ) { force = qtrue; argv[ i ] = NULL; } /* patch subdivisions */ else if( !strcmp( argv[ i ], "-subdivisions" ) ) { argv[ i ] = NULL; i++; patchSubdivisions = atoi( argv[ i ] ); argv[ i ] = NULL; if( patchSubdivisions <= 0 ) patchSubdivisions = 1; } /* threads */ else if( !strcmp( argv[ i ], "-threads" ) ) { argv[ i ] = NULL; i++; numthreads = atoi( argv[ i ] ); argv[ i ] = NULL; } } /* init model library */ PicoInit(); PicoSetMallocFunc( safe_malloc ); PicoSetFreeFunc( free ); PicoSetPrintFunc( PicoPrintFunc ); PicoSetLoadFileFunc( PicoLoadFileFunc ); PicoSetFreeFileFunc( free ); /* set number of threads */ ThreadSetDefault(); /* generate sinusoid jitter table */ for( i = 0; i < MAX_JITTERS; i++ ) { jitters[ i ] = sin( i * 139.54152147 ); //% Sys_Printf( "Jitter %4d: %f\n", i, jitters[ i ] ); } /* we print out two versions, q3map's main version (since it evolves a bit out of GtkRadiant) and we put the GtkRadiant version to make it easy to track with what version of Radiant it was built with */ Sys_Printf( "Q3Map - v1.0r (c) 1999 Id Software Inc.\n" ); Sys_Printf( "Q3Map (ydnar) - v" Q3MAP_VERSION "\n" ); Sys_Printf( "GtkRadiant - v" RADIANT_VERSION " " __DATE__ " " __TIME__ "\n" ); Sys_Printf( "%s\n", Q3MAP_MOTD ); /* ydnar: new path initialization */ InitPaths( &argc, argv ); /* check if we have enough options left to attempt something */ if( argc < 2 ) Error( "Usage: %s [general options] [options] mapfile", argv[ 0 ] ); /* fixaas */ if( !strcmp( argv[ 1 ], "-fixaas" ) ) r = FixAAS( argc - 1, argv + 1 ); /* analyze */ else if( !strcmp( argv[ 1 ], "-analyze" ) ) r = AnalyzeBSP( argc - 1, argv + 1 ); /* info */ else if( !strcmp( argv[ 1 ], "-info" ) ) r = BSPInfo( argc - 2, argv + 2 ); /* vis */ else if( !strcmp( argv[ 1 ], "-vis" ) ) r = VisMain( argc - 1, argv + 1 ); /* light */ else if( !strcmp( argv[ 1 ], "-light" ) ) r = LightMain( argc - 1, argv + 1 ); /* vlight */ else if( !strcmp( argv[ 1 ], "-vlight" ) ) { Sys_Printf( "WARNING: VLight is no longer supported, defaulting to -light -fast instead\n\n" ); argv[ 1 ] = "-fast"; /* eek a hack */ r = LightMain( argc, argv ); } /* ydnar: lightmap export */ else if( !strcmp( argv[ 1 ], "-export" ) ) r = ExportLightmapsMain( argc - 1, argv + 1 ); /* ydnar: lightmap import */ else if( !strcmp( argv[ 1 ], "-import" ) ) r = ImportLightmapsMain( argc - 1, argv + 1 ); /* ydnar: bsp scaling */ else if( !strcmp( argv[ 1 ], "-scale" ) ) r = ScaleBSPMain( argc - 1, argv + 1 ); /* ydnar: bsp conversion */ else if( !strcmp( argv[ 1 ], "-convert" ) ) r = ConvertBSPMain( argc - 1, argv + 1 ); /* ydnar: otherwise create a bsp */ else r = BSPMain( argc, argv ); /* emit time */ end = I_FloatTime(); Sys_Printf( "%9.0f seconds elapsed\n", end - start ); /* shut down connection */ Broadcast_Shutdown(); /* return any error code */ return r; }
void WriteData (int crc) { def_t *def; ddef_t *dd; dprograms_t progs; char tname[1024]; int h; unsigned int i; int size; for (def = pr.def_head.next ; def ; def = def->next) { if ((def->type->type == ev_field) && def->constant) { dd = &fields[numfielddefs]; numfielddefs++; dd->type = def->type->aux_type->type == ev_int ? ev_float : def->type->aux_type->type; if (def->save == 0) { strcpy(tname, def->name); strcat(tname, "__"); dd->s_name = CopyString(tname, 0); } else dd->s_name = CopyString (def->name, 0); dd->ofs = G_INT(def->ofs); } else if (pr_optimize_constant_names && def->constant && (def->type->type != ev_function)) { num_constant_names += strlen(def->name) + 1; num_constant_names += sizeof(ddef_t); continue; } else if (pr_optimize_unreferenced && pr_global_refs[def->ofs] <= 0) { if (!(def->type->type != ev_function)) { num_unreferenced += 1; continue; } } else if (pr_optimize_unreferenced && def->type->type == ev_vector) { if (pr_global_refs[def->ofs] + pr_global_refs[def->ofs + 1] + pr_global_refs[def->ofs +1] == 3) { num_unreferenced += 3; def = def->next; // def_x def = def->next; // def_y def = def->next; // def_z continue; } } dd = &globals[numglobaldefs]; dd->type = def->type->type == ev_int ? ev_float : def->type->type; if (def->save && ( dd->type != ev_field || def->constant != 1)) dd->type |= DEF_SAVEGLOBAL; if (def->name) { if (pr_optimize_locals && (def->scope || !(STRCMP(def->name, "IMMEDIATE")))) { num_locals_saved += strlen(def->name); dd->s_name = 0; } else dd->s_name = CopyString (def->name, 0); } dd->ofs = def->ofs; numglobaldefs++; } strofs = (strofs+3)&~3; if (strofs > INT_MAX) PR_ParseWarning(122, "strofs exceeds INT_MAX by %i", strofs - INT_MAX); if (numstatements > INT_MAX) PR_ParseWarning(123, "numstatements exceeds INT_MAX by %i", numstatements - INT_MAX); if (numfunctions > SHRT_MAX) PR_ParseWarning(124, "numfunctions exceeds SHRT_MAX by %i", numfunctions - SHRT_MAX); if (numglobaldefs > SHRT_MAX) PR_ParseWarning(125, "numglobaldefs exceeds SHRT_MAX by %i", numglobaldefs - SHRT_MAX); if (numfielddefs > SHRT_MAX) PR_ParseWarning(126, "numfielddefs exceeds SHRT_MAX by %i", numfielddefs - SHRT_MAX); if (numpr_globals > SHRT_MAX) PR_ParseWarning(127, "numpr_globals exceeds SHRT_MAX by %i", numpr_globals - SHRT_MAX); if (crc != NQ_PROGHEADER_CRC && crc != QW_PROGHEADER_CRC) PR_ParseWarning(208, "System defs do match internal crcs."); if (summary) { summary_print("----------- Summary -----------\n"); i = I_FloatTime() - StartTime; summary_print (" %02i:%02i elapsed time\n", (i / 60) % 59, i % 59); summary_print ("%6i strofs (MAX: %6i)\n", strofs, MAX_STRINGS ); summary_print ("%6i numstatements (MAX: %6i)\n", numstatements, MAX_STATEMENTS); summary_print ("%6i numfunctions (MAX: %6i)\n", numfunctions, SHRT_MAX); summary_print ("%6i numglobaldefs (MAX: %6i)\n", numglobaldefs, SHRT_MAX); summary_print ("%6i numfielddefs (MAX: %6i)\n", numfielddefs, SHRT_MAX); summary_print ("%6i numpr_globals (MAX: %6i)\n", numpr_globals, SHRT_MAX); } h = SafeOpenWrite (destfile); SafeWrite (h, &progs, sizeof(progs)); progs.ofs_strings = lseek (h, 0, SEEK_CUR); progs.numstrings = strofs; SafeWrite (h, strings, strofs); progs.ofs_statements = lseek (h, 0, SEEK_CUR); progs.numstatements = numstatements; for (i=0 ; i<numstatements ; i++) { statements[i].op = LittleShort(statements[i].op); statements[i].a = LittleShort(statements[i].a); statements[i].b = LittleShort(statements[i].b); statements[i].c = LittleShort(statements[i].c); } SafeWrite (h, statements, numstatements*sizeof(dstatement_t)); progs.ofs_functions = lseek (h, 0, SEEK_CUR); progs.numfunctions = numfunctions; for (i=0 ; i<numfunctions ; i++) { functions[i].first_statement = LittleLong (functions[i].first_statement); functions[i].parm_start = LittleLong (functions[i].parm_start); functions[i].s_name = LittleLong (functions[i].s_name < 0 || functions[i].s_name > strofs ? 0 : functions[i].s_name); functions[i].s_file = LittleLong (functions[i].s_file < 0 || functions[i].s_file > strofs ? 0 : functions[i].s_file); functions[i].numparms = LittleLong (functions[i].numparms > MAX_PARMS ? MAX_PARMS : functions[i].numparms); functions[i].locals = LittleLong (functions[i].locals); } SafeWrite (h, functions, numfunctions*sizeof(dfunction_t)); progs.ofs_globaldefs = lseek (h, 0, SEEK_CUR); progs.numglobaldefs = numglobaldefs; for (i=0 ; i<numglobaldefs ; i++) { globals[i].type = LittleShort (globals[i].type); globals[i].ofs = LittleShort (globals[i].ofs); globals[i].s_name = LittleLong (globals[i].s_name); } SafeWrite (h, globals, numglobaldefs*sizeof(ddef_t)); progs.ofs_fielddefs = lseek (h, 0, SEEK_CUR); progs.numfielddefs = numfielddefs; for (i=0 ; i<numfielddefs ; i++) { fields[i].type = LittleShort (fields[i].type); fields[i].ofs = LittleShort (fields[i].ofs); fields[i].s_name = LittleLong (fields[i].s_name < 0 || fields[i].s_name > strofs ? 0: fields[i].s_name); } SafeWrite (h, fields, numfielddefs*sizeof(ddef_t)); progs.ofs_globals = lseek (h, 0, SEEK_CUR); progs.numglobals = numpr_globals; for (i=0 ; i<numpr_globals ; i++) ((int *)pr_globals)[i] = LittleLong (((int *)pr_globals)[i]); SafeWrite (h, pr_globals, numpr_globals*4); i = (int)lseek(h, 0, SEEK_CUR); if (summary) summary_print ("%6i TOTAL SIZE\n", i); size = (i+16)&(~15); progs.entityfields = pr.size_fields; progs.version = PROG_VERSION; progs.crc = crc; if (summary) { summary_print("%6i Progheader CRC ", crc); if (crc == NQ_PROGHEADER_CRC) summary_print("( Quake )\n"); else if (crc == QW_PROGHEADER_CRC) summary_print("(Quake World)\n"); else summary_print("( UNKNOWN )\n"); } // byte swap the header and write it out for (i=0 ; i<sizeof(progs)/4 ; i++) ((int *)&progs)[i] = LittleLong ( ((int *)&progs)[i] ); lseek (h, 0, SEEK_SET); SafeWrite (h, &progs, sizeof(progs)); // look for progs if ((def = PR_GetDef(&type_entity, "progs", NULL, false, 0, 0))) { lseek(h, progs.ofs_globals + 4 * def->ofs, SEEK_SET); i = - (size + 112); SafeWrite (h, &i, 4); } for (def = pr.def_head.next ; def ; def = def->next) { if (def->type->arraysize) { lseek(h, progs.ofs_globals + 4 * def->ofs, SEEK_SET); i = (-(size + 112)) + progs.ofs_globals + 4 * (def->arraystart); //printf("filled in %s with %i\n", def->name, def->arraystart); SafeWrite (h, &i, 4); } } if (summary) { summary_print ("%6i precache_sounds(MAX: %6i)\n", numsounds, MAX_SOUNDS); summary_print ("%6i precache_models(MAX: %6i)\n", nummodels, MAX_MODELS); } close (h); if (summary) { if (pr_optimize_eliminate_temps || pr_optimize_shorten_ifs || pr_optimize_nonvec_parms || pr_optimize_constant_names || pr_optimize_defs || pr_optimize_hash_strings || pr_optimize_locals || pr_optimize_function_names || pr_optimize_filenames || pr_optimize_unreferenced || pr_optimize_logicops || pr_optimize_recycle || pr_optimize_constant_arithmetic) { summary_print("----------- Optimization Summary -----------\n"); if (pr_optimize_eliminate_temps) summary_print("%d stores shortened\n", num_stores_shortened); if (pr_optimize_shorten_ifs) summary_print("%d ifs shortened\n", num_ifs_shortened); if (pr_optimize_nonvec_parms) summary_print("%d non-vector parms\n", num_nonvec_parms); if (pr_optimize_constant_names) summary_print("%d bytes of constant defs/names eliminated\n", num_constant_names); if (pr_optimize_defs) summary_print("%d duplicate defs eliminated\n", num_defs); if (pr_optimize_hash_strings) summary_print("%d bytes of duplicate strings eliminated\n", num_strings); if (pr_optimize_locals) summary_print("%d bytes of immediate and local names eliminated\n", num_locals_saved); if (pr_optimize_function_names) summary_print("%d bytes of function names eliminated\n", num_funcs_saved); if (pr_optimize_filenames) summary_print("%d bytes of filenames eliminated\n", num_files_saved); if (pr_optimize_unreferenced) summary_print("%d unreferenced global defs eliminated\n", num_unreferenced); if (pr_optimize_logicops) summary_print("%d logic jumps added\n", num_logic_jumps); if (pr_optimize_recycle) summary_print("%d temporary globals recycled\n", num_recycled); if (pr_optimize_constant_arithmetic) summary_print("%d constant arithmetic statements eliminated\n", num_constant_ops_saved); } } }
/* ============ main ============ */ int main (int argc, char **argv) { char *src2; int p, crc; double start, stop; int i; FILE *input; start = I_FloatTime (); myargc = argc; myargv = argv; for (i=1;i<argc;i++) { if (!strcmp(argv[i],"-h")) { printf ("%s [-o destfile] file\n",argv[0]); return 0; } if (!strcmp(argv[i],"-o")) { strcpy(destfile,argv[++i]); continue; } if (!strcmp(argv[i],"-p")) { strcpy(defsfile,argv[++i]); continue; } if (!strcmp(argv[i],"-asm")) { i++; continue; } break; } InitData (); if (!destfile[0]) strcpy(destfile,"progs.dat"); if (!defsfile[0]) strcpy(defsfile,"progdefs.h"); printf ("outputfile: %s\n", destfile); pr_dumpasm = false; PR_BeginCompilation (malloc (0x100000), 0x100000); // compile all the files if (i==argc || !strcmp(argv[i],"-")) input=stdin; else { char buf[1024]; char *cc; cc=getenv("CC"); if (!cc) cc="gcc"; sprintf(buf,"%s -x c -E %s",cc,argv[i]); input=popen(buf,"r"); if (!input) Error("failed to open pipe to cpp ('%s')",buf); } { int size=0; src2=NULL; while (!feof(input)) { src2=Q_realloc(src2,size+1024); size+=fread(&src2[size],1,1024,input); } src2=Q_realloc(src2,size+1); src2[size]=0; } if (input!=stdin) pclose(input); if (!PR_CompileFile (src2)) return 1; if (!PR_FinishCompilation ()) Error ("compilation errors"); p = CheckParm ("-asm"); if (p) PrintFunction (argv[++p]); // write progdefs.h crc = PR_WriteProgdefs (defsfile); // write data file WriteData (crc); // write files.dat #ifdef FILES_DAT WriteFiles (); #endif stop = I_FloatTime (); printf ("%i seconds elapsed.\n", (int)(stop-start)); return 0; }
/* =========== main =========== */ int main (int argc, char **argv) { char portalfile[1024]; char source[1024]; char name[1024]; int i; double start, end; printf ("---- vis ----\n"); verbose = false; for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i], "-fast")) { printf ("fastvis = true\n"); fastvis = true; } else if (!strcmp(argv[i], "-level")) { testlevel = atoi(argv[i+1]); printf ("testlevel = %i\n", testlevel); i++; } else if (!strcmp(argv[i], "-v")) { printf ("verbose = true\n"); verbose = true; } else if (!strcmp (argv[i],"-nosort")) { printf ("nosort = true\n"); nosort = true; } else if (!strcmp (argv[i],"-tmpin")) strcpy (inbase, "/tmp"); else if (!strcmp (argv[i],"-tmpout")) strcpy (outbase, "/tmp"); else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile"); start = I_FloatTime (); ThreadSetDefault (); strcpy (source, argv[i]); StripExtension (source); DefaultExtension (source, ".bsp"); sprintf (name, "%s%s", inbase, source); printf ("reading %s\n", name); LoadBSPFile (name); if (numnodes == 0 || numfaces == 0) Error ("Empty map"); sprintf (portalfile, "%s%s", inbase, ExpandArg(argv[i])); StripExtension (portalfile); strcat (portalfile, ".prt"); printf ("reading %s\n", portalfile); LoadPortals (portalfile); CalcVis (); CalcPHS (); visdatasize = vismap_p - dvisdata; printf ("visdatasize:%i compressed from %i\n", visdatasize, originalvismapsize*2); sprintf (name, "%s%s", outbase, source); printf ("writing %s\n", name); WriteBSPFile (name); end = I_FloatTime (); printf ("%5.1f seconds elapsed\n", end-start); return 0; }
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void RunThreadsOn(int workcnt, qboolean showpacifier, void (*func)(int)) { int threadid[MAX_THREADS]; HANDLE threadhandle[MAX_THREADS]; int i; int start, end; Log_Print("Win32 multi-threading\n"); start = I_FloatTime(); dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; threaded = true; if (numthreads == -1) { ThreadSetDefault(); } if (numthreads < 1 || numthreads > MAX_THREADS) { numthreads = 1; } // // run threads in parallel // InitializeCriticalSection(&crit); numwaitingthreads = 0; if (numthreads == 1) // use same thread { func(0); } //end if else { // printf("starting %d threads\n", numthreads); for (i = 0; i < numthreads; i++) { threadhandle[i] = CreateThread( NULL, // LPSECURITY_ATTRIBUTES lpsa, 0, // DWORD cbStack, (LPTHREAD_START_ROUTINE)func, // LPTHREAD_START_ROUTINE lpStartAddr, (LPVOID)i, // LPVOID lpvThreadParm, 0, // DWORD fdwCreate, &threadid[i]); // printf("started thread %d\n", i); } //end for for (i = 0; i < numthreads; i++) WaitForSingleObject(threadhandle[i], INFINITE); } //end else DeleteCriticalSection(&crit); threaded = false; end = I_FloatTime(); if (pacifier) { printf(" (%i)\n", end - start); } } //end of the function RunThreadsOn
int BspMain(int argc, char **argv) { int i; double start, end; char path[1024]; Sys_Printf("---- bsp ----\n"); for(i = 1; i < argc; i++) { if(!strcmp(argv[i], "-threads")) { numthreads = atoi(argv[i + 1]); i++; } else if(!strcmp(argv[i], "-glview")) { glview = qtrue; } else if(!strcmp(argv[i], "-v")) { Sys_Printf("verbose = true\n"); verbose = qtrue; } else if(!strcmp(argv[i], "-draw")) { Sys_Printf("drawflag = true\n"); drawFlag = qtrue; } else if(!strcmp(argv[i], "-debugsurfaces")) { Sys_Printf("emitting debug surfaces\n"); debugSurfaces = qtrue; } else if(!strcmp(argv[i], "-nowater")) { Sys_Printf("nowater = true\n"); noliquids = qtrue; } else if(!strcmp(argv[i], "-nodetail")) { Sys_Printf("nodetail = true\n"); nodetail = qtrue; } else if(!strcmp(argv[i], "-fulldetail")) { Sys_Printf("fulldetail = true\n"); fulldetail = qtrue; } else if(!strcmp(argv[i], "-onlyents")) { Sys_Printf("onlyents = true\n"); onlyents = qtrue; } else if(!strcmp(argv[i], "-onlytextures")) { Sys_Printf("onlytextures = true\n"); // FIXME: make work again! onlytextures = qtrue; } else if(!strcmp(argv[i], "-micro")) { microvolume = atof(argv[i + 1]); Sys_Printf("microvolume = %f\n", microvolume); i++; } else if(!strcmp(argv[i], "-nofog")) { Sys_Printf("nofog = true\n"); nofog = qtrue; } else if(!strcmp(argv[i], "-nosubdivide")) { Sys_Printf("nosubdivide = true\n"); nosubdivide = qtrue; } else if(!strcmp(argv[i], "-leaktest")) { Sys_Printf("leaktest = true\n"); leaktest = qtrue; } else if(!strcmp(argv[i], "-nocurves")) { nocurves = qtrue; Sys_Printf("no curve brushes\n"); } else if(!strcmp(argv[i], "-nodoors")) { nodoors = qtrue; Sys_Printf("no door entities\n"); } else if(!strcmp(argv[i], "-notjunc")) { notjunc = qtrue; Sys_Printf("no tjunction fixing\n"); } else if(!strcmp(argv[i], "-expand")) { testExpand = qtrue; Sys_Printf("Writing expanded.map.\n"); } else if(!strcmp(argv[i], "-showseams")) { showseams = qtrue; Sys_Printf("Showing seams on terrain.\n"); } else if(!strcmp(argv[i], "-tmpout")) { strcpy(outbase, "/tmp"); } else if(!strcmp(argv[i], "-fakemap")) { fakemap = qtrue; Sys_Printf("will generate fakemap.map\n"); } else if(!strcmp(argv[i], "-samplesize")) { samplesize = atoi(argv[i + 1]); if(samplesize < 1) samplesize = 1; i++; Sys_Printf("lightmap sample size is %dx%d units\n", samplesize, samplesize); } else if(!strcmp(argv[i], "-connect")) { Broadcast_Setup(argv[++i]); } else if(argv[i][0] == '-') Error("Unknown option \"%s\"", argv[i]); else break; } if(i != argc - 1) { Error("usage: xmap -map2bsp [-<switch> [-<switch> ...]] <mapname.map>\n" "\n" "Switches:\n" " v = verbose output\n" " threads <X> = set number of threads to X\n" " nocurves = don't emit bezier surfaces\n" " nodoors = disable door entities\n" //" breadthfirst = breadth first bsp building\n" //" nobrushmerge = don't merge brushes\n" " noliquids = don't write liquids to map\n" //" nocsg = disables brush chopping\n" //" glview = output a GL view\n" " draw = enables mini BSP viewer\n" //" noweld = disables weld\n" //" noshare = disables sharing\n" " notjunc = disables juncs\n" " nowater = disables water brushes\n" //" noprune = disables node prunes\n" //" nomerge = disables face merging\n" " nofog = disables fogs\n" " nosubdivide = disables subdivision of draw surfaces\n" " nodetail = disables detail brushes\n" " fulldetail = enables full detail\n" " onlyents = only compile entities with bsp\n" " micro <volume>\n" " = sets the micro volume to the given float\n" " leaktest = perform a leak test\n" //" chop <subdivide_size>\n" //" = sets the subdivide size to the given float\n" " samplesize <N> = set the lightmap pixel size to NxN units\n"); } start = I_FloatTime(); ThreadSetDefault(); SetQdirFromPath(argv[i]); strcpy(source, ExpandArg(argv[i])); StripExtension(source); // delete portal and line files sprintf(path, "%s.prt", source); remove(path); sprintf(path, "%s.lin", source); remove(path); strcpy(name, ExpandArg(argv[i])); if(strcmp(name + strlen(name) - 4, ".reg")) { // if we are doing a full map, delete the last saved region map sprintf(path, "%s.reg", source); remove(path); DefaultExtension(name, ".map"); // might be .reg } // if onlyents, just grab the entites and resave if(onlyents) { OnlyEnts(); // shut down connection Broadcast_Shutdown(); return 0; } // if onlytextures, just grab the textures and resave if(onlytextures) { OnlyTextures(); // shut down connection Broadcast_Shutdown(); return 0; } // start from scratch LoadShaderInfo(); LoadMapFile(name); ProcessModels(); SetModelNumbers(); EndBSPFile(); end = I_FloatTime(); Sys_Printf("%5.0f seconds elapsed\n", end - start); // shut down connection Broadcast_Shutdown(); return 0; }
int main (int argc, char **argv) { int i, j; int hull; entity_t *ent; char source[1024]; char name[1024]; double start, end; printf( "qcsg.exe v2.8 (%s)\n", __DATE__ ); printf ("---- qcsg ----\n" ); for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i],"-glview")) { glview = true; } else if (!strcmp(argv[i], "-v")) { printf ("verbose = true\n"); verbose = true; } else if (!strcmp(argv[i], "-draw")) { printf ("drawflag = true\n"); drawflag = true; } else if (!strcmp(argv[i], "-noclip")) { printf ("noclip = true\n"); noclip = true; } else if (!strcmp(argv[i], "-onlyents")) { printf ("onlyents = true\n"); onlyents = true; } else if (!strcmp(argv[i], "-nowadtextures")) { printf ("wadtextures = false\n"); wadtextures = false; } else if (!strcmp(argv[i], "-wadinclude")) { pszWadInclude[nWadInclude++] = strdup( argv[i + 1] ); i++; } else if( !strcmp( argv[ i ], "-proj" ) ) { strcpy( qproject, argv[ i + 1 ] ); i++; } else if (!strcmp(argv[i], "-hullfile")) { hullfile = true; strcpy( qhullfile, argv[i + 1] ); i++; } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: qcsg [-nowadtextures] [-wadinclude <name>] [-draw] [-glview] [-noclip] [-onlyents] [-proj <name>] [-threads #] [-v] [-hullfile <name>] mapfile"); SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL); start = I_FloatTime (); CheckHullFile( hullfile, qhullfile ); ThreadSetDefault (); SetQdirFromPath (argv[i]); strcpy (source, ExpandArg (argv[i])); COM_FixSlashes(source); StripExtension (source); strcpy (name, ExpandArg (argv[i])); DefaultExtension (name, ".map"); // might be .reg // // if onlyents, just grab the entites and resave // if (onlyents && !glview) { char out[1024]; int old_entities; sprintf (out, "%s.bsp", source); LoadBSPFile (out); // Get the new entity data from the map file LoadMapFile (name); // Write it all back out again. WriteBSP (source); end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); return 0; } // // start from scratch // LoadMapFile (name); RunThreadsOnIndividual (nummapbrushes, true, CreateBrush); BoundWorld (); qprintf ("%5i map planes\n", nummapplanes); for (i=0 ; i<NUM_HULLS ; i++) { char name[1024]; if (glview) sprintf (name, "%s.gl%i",source, i); else sprintf (name, "%s.p%i",source, i); out[i] = fopen (name, "w"); if (!out[i]) Error ("Couldn't open %s",name); } ProcessModels (); qprintf ("%5i csg faces\n", c_csgfaces); qprintf ("%5i used faces\n", c_outfaces); qprintf ("%5i tiny faces\n", c_tiny); qprintf ("%5i tiny clips\n", c_tiny_clip); for (i=0 ; i<NUM_HULLS ; i++) fclose (out[i]); if (!glview) { EmitPlanes (); WriteBSP (source); } end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); return 0; }
/* ============== main ============== */ int main (int argc, char **argv) { int i; char path[1024]; char *basedir; double starttime, endtime; printf ("Qdata Plus : "__TIME__" "__DATE__"\n"); starttime = I_FloatTime(); basedir = NULL; TK_Init(); ExpandWildcards (&argc, &argv); for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i], "-archive")) { // -archive f:/quake2/release/dump_11_30 archive = true; strcpy (archivedir, argv[i+1]); printf ("Archiving source to: %s\n", archivedir); i++; } else if (!strcmp(argv[i], "-release")) { g_release = true; strcpy (g_releasedir, argv[i+1]); printf ("Copy output to: %s\n", g_releasedir); i++; } else if (!strcmp(argv[i], "-base")) { i++; basedir = argv[i]; } else if (!strcmp(argv[i], "-compress")) { g_compress_pak = true; printf ("Compressing pakfile\n"); } else if (!strcmp(argv[i], "-pak")) { g_release = true; g_pak = true; printf ("Building pakfile: %s\n", argv[i+1]); BeginPak (argv[i+1]); i++; } else if (!strcmp(argv[i], "-only")) { strcpy (g_only, argv[i+1]); printf ("Only grabbing %s\n", g_only); i++; } else if (!strcmpi(argv[i], "-keypress")) { g_dokeypress = true; } else if (!strcmp(argv[i], "-3ds")) { do3ds = true; printf ("loading .3ds files\n"); } else if (!strcmp(argv[i], "-materialfile")) { strcpy(g_materialFile, argv[i+1]); printf("Setting material file to %s\n", g_materialFile); i++; } /* else if (!strcmpi(argv[i], "-newgen")) { if (i < argc-4) { printf("run new triangle grouping routine here\n"); NewGen(argv[i+1],argv[i+2],atoi(argv[i+3]),atoi(argv[i+4])); } else { printf("qdata -newskin <base.hrc> <skin.pcx> width height\n"); } return 0; } */ else if (!strcmpi(argv[i], "-genskin")) { i++; if (i < argc-3) { GenSkin(argv[i],argv[i+1],atol(argv[i+2]),atol(argv[i+3])); } else { printf("qdata -genskin <base.hrc> <skin.pcx> <desired width> <desired height>\n"); } return 0; } else if (!strcmpi(argv[i], "-noopts")) { g_no_opimizations = true; printf("not performing optimizations\n"); } else if (!strcmpi(argv[i], "-md2")) { g_forcemodel = MODEL_MD2; } else if (!strcmpi(argv[i], "-fm")) { g_forcemodel = MODEL_FM; } else if (!strcmpi(argv[i], "-verbose")) { g_verbose = true; } else if (!strcmpi(argv[i], "-oldskin")) { g_allow_newskin = false; } else if (!strcmpi(argv[i], "-ignoreUV")) { g_ignoreTriUV = true; } else if (!strcmpi(argv[i], "-publish")) { g_publishOutput = true; } else if (!strcmpi(argv[i], "-nomkdir")) { g_nomkdir = true; } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i >= argc) { Error ("usage: qdata [-archive <directory>]\n" " [-release <directory>]\n" " [-base <directory>]\n" " [-compress]\n" " [-pak <file>]\n" " [-only <model>]\n" " [-keypress]\n" " [-3ds]\n" " [-materialfile <file>]\n" " [-noopts]\n" " [-md2]\n" " [-fm]\n" " [-verbose]\n" " [-ignoreUV]\n" " [-oldskin]\n" " [-publish]\n" " [-nomkdir]\n" " file.qdt\n" "or\n" " qdata -genskin <base.hrc> <skin.pcx> <desired width> <desired height>"); } if (do3ds) trifileext = ext_3ds; else trifileext = ext_tri; for ( ; i<argc ; i++) { printf ("--------------- %s ---------------\n", argv[i]); // load the script strcpy (path, argv[i]); DefaultExtension (path, ".qdt"); DefaultExtension(g_materialFile, ".mat"); SetQdirFromPath (path); printf("workingdir='%s'\n", gamedir); if (basedir) { qdir[0] = 0; g_outputDir = basedir; } printf("outputdir='%s'\n", g_outputDir); QFile_ReadMaterialTypes(g_materialFile); LoadScriptFile (ExpandArg(path)); // // parse it // ParseScript (); // write out the last model FinishModel (); FMFinishModel (); FinishSprite (); } if (total_textures) { printf("\n"); printf("Total textures processed: %d\n",total_textures); printf("Average size: %d x %d\n",total_x / total_textures, total_y / total_textures); } if (g_pak) FinishPak (); endtime = I_FloatTime(); printf("Time elapsed: %f\n", endtime-starttime); if (g_dokeypress) { printf("Success! ... Hit a key: "); getchar(); } return 0; }
/* * ============= * RunThreadsOn * ============= */ void RunThreadsOn(int workcnt, bool showpacifier, q_threadfunction func) { int i; pthread_t work_threads[MAX_THREADS]; pthread_addr_t status; pthread_attr_t attrib; double start, end; threadstart = I_FloatTime(); start = threadstart; for (i = 0; i < THREADTIMES_SIZE; i++) { threadtimes[i] = 0; } dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; threaded = true; q_entry = func; if (pacifier) { setbuf(stdout, NULL); } threads_InitCrit(); if (pthread_attr_init(&attrib) == -1) { Error("pthread_attr_init failed"); } #ifdef _POSIX_THREAD_ATTR_STACKSIZE if (pthread_attr_setstacksize(&attrib, 0x400000) == -1) { Error("pthread_attr_setstacksize failed"); } #endif for (i = 0; i < g_numthreads; i++) { if (pthread_create(&work_threads[i], &attrib, ThreadEntryStub, (void*)i) == -1) { Error("pthread_create failed"); } } for (i = 0; i < g_numthreads; i++) { if (pthread_join(work_threads[i], &status) == -1) { Error("pthread_join failed"); } } threads_UninitCrit(); q_entry = NULL; threaded = false; end = I_FloatTime(); if (pacifier) { printf("\r%60s\r", ""); } Log(" (%.2f seconds)\n", end - start); }
/* ======== main light modelfile ======== */ int main (int argc, char **argv) { int i; double start, end; char source[1024]; printf ("----- LightFaces ----\n"); for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i],"-extra")) { extrasamples = true; printf ("extra sampling enabled\n"); } else if (!strcmp(argv[i],"-dist")) { scaledist = atof (argv[i+1]); i++; } else if (!strcmp(argv[i],"-range")) { rangescale = atof (argv[i+1]); i++; } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: light [-threads num] [-extra] bspfile"); InitThreads (); start = I_FloatTime (); strcpy (source, argv[i]); StripExtension (source); DefaultExtension (source, ".bsp"); LoadBSPFile (source); LoadEntities (); MakeTnodes (&dmodels[0]); LightWorld (); WriteEntitiesToString (); WriteBSPFile (source); end = I_FloatTime (); printf ("%5.1f seconds elapsed\n", end-start); return 0; }
void RunThreadsOn(int workcnt, qboolean showpacifier, void(*func)(ptrdiff_t)) { ptrdiff_t i; pthread_t work_threads[MAX_THREADS]; pthread_addr_t status; pthread_attr_t attrib; int start, end; start = I_FloatTime(); dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; threaded = true; q_entry = func; if (pacifier) setbuf(stdout, NULL); pthread_mutexattr_t mattrib; if (!my_mutex) { my_mutex = (pthread_mutex_t*)malloc(sizeof(*my_mutex)); if (pthread_mutexattr_init(&mattrib) == -1) { Error("pthread_mutex_attr_init failed"); } if (pthread_mutex_init(my_mutex, &mattrib) == -1) { Error("pthread_mutex_init failed"); } } if (pthread_attr_init(&attrib) == -1) { Error("pthread_attr_init failed"); } #ifdef _POSIX_THREAD_ATTR_STACKSIZE if (pthread_attr_setstacksize(&attrib, 0x400000) == -1) { Error("pthread_attr_setstacksize failed"); } #endif for (i = 0; i < numthreads; i++) { if (pthread_create(&work_threads[i], &attrib, ThreadEntryStub, (void*)i) == -1) { Error("pthread_create failed"); } } for (i = 0; i < numthreads; i++) { if (pthread_join(work_threads[i], &status) == -1) { Error("pthread_join failed"); } } free(my_mutex); my_mutex = NULL; q_entry = NULL; threaded = false; end = I_FloatTime(); if (pacifier) printf (" (%i)\n", end-start); }
void I_BeginTime( void ) { beginTime = I_FloatTime(); }
/* ============ main ============ */ int main (int argc, char **argv) { int i; double start, end; char path[1024]; #ifndef FIXTEXONLY printf ("---- qbsp3 ----\n"); #else printf("---- Map Fix Texture Capitals ----\n"); #endif for (i=1 ; i<argc ; i++) { #ifndef FIXTEXONLY if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i],"-glview")) { glview = true; } else if (!strcmp(argv[i], "-v")) { printf ("verbose = true\n"); verbose = true; } else if (!strcmp(argv[i], "-draw")) { printf ("drawflag = true\n"); drawflag = true; } else if (!strcmp(argv[i], "-noweld")) { printf ("noweld = true\n"); noweld = true; } else if (!strcmp(argv[i], "-nocsg")) { printf ("nocsg = true\n"); nocsg = true; } else if (!strcmp(argv[i], "-noshare")) { printf ("noshare = true\n"); noshare = true; } else if (!strcmp(argv[i], "-notjunc")) { printf ("notjunc = true\n"); notjunc = true; } else if (!strcmp(argv[i], "-nowater")) { printf ("nowater = true\n"); nowater = true; } else if (!strcmp(argv[i], "-noopt")) { printf ("noopt = true\n"); noopt = true; } else if (!strcmp(argv[i], "-noprune")) { printf ("noprune = true\n"); noprune = true; } else if (!strcmp(argv[i], "-nofill")) { printf ("nofill = true\n"); nofill = true; } else if (!strcmp(argv[i], "-nomerge")) { printf ("nomerge = true\n"); nomerge = true; } else if (!strcmp(argv[i], "-nosubdiv")) { printf ("nosubdiv = true\n"); nosubdiv = true; } else if (!strcmp(argv[i], "-nodetail")) { printf ("nodetail = true\n"); nodetail = true; } else if (!strcmp(argv[i], "-fulldetail")) { printf ("fulldetail = true\n"); fulldetail = true; } else if (!strcmp(argv[i], "-onlyents")) { printf ("onlyents = true\n"); onlyents = true; } //hypo else #endif if (!strcmp(argv[i], "-onlytextures")) { printf("onlytextures = true\n"); onlytextures = true; } //hypo end #ifndef FIXTEXONLY else if (!strcmp(argv[i], "-micro")) { microvolume = atof(argv[i+1]); printf ("microvolume = %f\n", microvolume); i++; } else if (!strcmp(argv[i], "-leaktest")) { printf ("leaktest = true\n"); leaktest = true; } else if (!strcmp(argv[i], "-verboseentities")) { printf ("verboseentities = true\n"); verboseentities = true; } else if (!strcmp(argv[i], "-chop")) { subdivide_size = atof(argv[i+1]); printf ("subdivide_size = %f\n", subdivide_size); i++; } else if (!strcmp(argv[i], "-block")) { block_xl = block_xh = atoi(argv[i+1]); block_yl = block_yh = atoi(argv[i+2]); printf ("block: %i,%i\n", block_xl, block_yl); i+=2; } else if (!strcmp(argv[i], "-blocks")) { block_xl = atoi(argv[i+1]); block_yl = atoi(argv[i+2]); block_xh = atoi(argv[i+3]); block_yh = atoi(argv[i+4]); printf ("blocks: %i,%i to %i,%i\n", block_xl, block_yl, block_xh, block_yh); i+=4; } else if (!strcmp (argv[i],"-tmpout")) { strcpy (outbase, "/tmp"); } #endif else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: qbsp3 [options] mapfile"); start = I_FloatTime (); ThreadSetDefault (); numthreads = 1; // multiple threads aren't helping... //hypo if (onlytextures) { strcpy(source, ExpandArg(argv[i])); StripExtension(source); mapHasCapitals = 0; } #ifndef FIXTEXONLY else //hypo end { SetQdirFromPath(argv[i]); strcpy(source, ExpandArg(argv[i])); StripExtension(source); // delete portal and line files sprintf(path, "%s.prt", source); remove(path); sprintf(path, "%s.lin", source); remove(path); strcpy(name, ExpandArg(argv[i])); DefaultExtension(name, ".map"); // might be .reg } #endif // // if onlyents, just grab the entites and resave // #ifndef FIXTEXONLY if (onlyents) { char out[1024]; sprintf (out, "%s.bsp", source); LoadBSPFile (out); num_entities = 0; LoadMapFile (name); SetModelNumbers (); SetLightStyles (); UnparseEntities (); WriteBSPFile (out); } //hypo write textures else #endif if (onlytextures) { char out[1024]; char mapFix[1024]; sprintf(out, "%s.bsp", source); LoadBSPFile(out); if (mapHasCapitals) { StripExtension(out); sprintf(mapFix, "%s_fix.bsp", out); printf("map has %i capitals. Writing... %s\n", mapHasCapitals, mapFix); WriteBSPFile(mapFix); } else printf("map is fine\n"); } //hypo end #ifndef FIXTEXONLY else { // // start from scratch // LoadMapFile (name); SetModelNumbers (); SetLightStyles (); ProcessModels (); } end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); #endif return 0; }
double I_EndTime( void ) { return ( I_FloatTime() - beginTime ); }
int main (int argc, char **argv) { int i; double start, end; printf( "qrad.exe v 1.5 (%s)\n", __DATE__ ); printf ("----- Radiosity ----\n"); verbose = true; // Originally FALSE smoothing_threshold = cos(45.0*(Q_PI/180)); // Originally zero. for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-dump")) dumppatches = true; else if (!strcmp(argv[i],"-bounce")) { if ( ++i < argc ) { numbounce = atoi (argv[i]); if ( numbounce < 0 ) { fprintf(stderr, "Error: expected non-negative value after '-bounce'\n" ); return 1; } } else { fprintf( stderr, "Error: expected a value after '-bounce'\n" ); return 1; } } else if (!strcmp(argv[i],"-verbose")) { verbose = true; } else if (!strcmp(argv[i],"-terse")) { verbose = false; } else if (!strcmp(argv[i],"-threads")) { if ( ++i < argc ) { numthreads = atoi (argv[i]); if ( numthreads <= 0 ) { fprintf(stderr, "Error: expected positive value after '-threads'\n" ); return 1; } } else { fprintf( stderr, "Error: expected a value after '-threads'\n" ); return 1; } } else if (!strcmp(argv[i],"-maxchop")) { if ( ++i < argc ) { maxchop = (float)atof (argv[i]); if ( maxchop < 2 ) { fprintf(stderr, "Error: expected positive value after '-maxchop'\n" ); return 1; } } else { fprintf( stderr, "Error: expected a value after '-maxchop'\n" ); return 1; } } else if (!strcmp(argv[i],"-chop")) { if ( ++i < argc ) { minchop = (float)atof (argv[i]); if ( minchop < 1 ) { fprintf(stderr, "Error: expected positive value after '-chop'\n" ); return 1; } if ( minchop < 32 ) { fprintf(stderr, "WARNING: Chop values below 32 are not recommended. Use -extra instead.\n"); } } else { fprintf( stderr, "Error: expected a value after '-chop'\n" ); return 1; } } else if (!strcmp(argv[i],"-scale")) { if ( ++i < argc ) { lightscale = (float)atof (argv[i]); } else { fprintf( stderr, "Error: expected a value after '-scale'\n" ); return 1; } } else if (!strcmp(argv[i],"-ambient")) { if ( i+3 < argc ) { ambient[0] = (float)atof (argv[++i]) * 128; ambient[1] = (float)atof (argv[++i]) * 128; ambient[2] = (float)atof (argv[++i]) * 128; } else { fprintf( stderr, "Error: expected three color values after '-ambient'\n" ); return 1; } } else if( !strcmp(argv[i], "-proj") ) { if ( ++i < argc && *argv[i] ) strcpy( qproject, argv[i] ); else { fprintf(stderr, "Error: expected path name after '-proj'\n" ); return 1; } } else if ( !strcmp(argv[i], "-maxlight") ) { if ( ++i < argc && *argv[i] ) { maxlight = (float)atof (argv[i]) * 128; if ( maxlight <= 0 ) { fprintf(stderr, "Error: expected positive value after '-maxlight'\n" ); return 1; } } else { fprintf( stderr, "Error: expected a value after '-maxlight'\n" ); return 1; } } else if ( !strcmp(argv[i], "-lights" ) ) { if ( ++i < argc && *argv[i] ) { strcpy( designer_lights, argv[i] ); } else { fprintf( stderr, "Error: expected a filepath after '-lights'\n" ); return 1; } } else if ( !strcmp(argv[i], "-inc" ) ) { incremental = true; } else if (!strcmp(argv[i],"-gamma")) { if ( ++i < argc ) { gamma = (float)atof (argv[i]); } else { fprintf( stderr, "Error: expected a value after '-gamma'\n" ); return 1; } } else if (!strcmp(argv[i],"-dlight")) { if ( ++i < argc ) { dlight_threshold = (float)atof (argv[i]); } else { fprintf( stderr, "Error: expected a value after '-dlight'\n" ); return 1; } } else if (!strcmp(argv[i],"-extra")) { extra = true; } else if (!strcmp(argv[i],"-sky")) { if ( ++i < argc ) { indirect_sun = (float)atof (argv[i]); } else { fprintf( stderr, "Error: expected a value after '-gamma'\n" ); return 1; } } else if (!strcmp(argv[i],"-smooth")) { if ( ++i < argc ) { smoothing_threshold = (float)cos(atof(argv[i])*(Q_PI/180.0)); } else { fprintf( stderr, "Error: expected an angle after '-smooth'\n" ); return 1; } } else if (!strcmp(argv[i],"-coring")) { if ( ++i < argc ) { coring = (float)atof( argv[i] ); } else { fprintf( stderr, "Error: expected a light threshold after '-coring'\n" ); return 1; } } else if (!strcmp(argv[i],"-notexscale")) { texscale = false; } else { break; } } ThreadSetDefault (); if (maxlight > 255) maxlight = 255; if (i != argc - 1) Error ("usage: qrad [-dump] [-inc] [-bounce n] [-threads n] [-verbose] [-terse] [-chop n] [-maxchop n] [-scale n] [-ambient red green blue] [-proj file] [-maxlight n] [-threads n] [-lights file] [-gamma n] [-dlight n] [-extra] [-smooth n] [-coring n] [-notexscale] bspfile"); start = I_FloatTime (); strcpy (source, argv[i]); StripExtension (source); SetQdirFromPath (source); // Set the required global lights filename strcat( strcpy( global_lights, gamedir ), "lights.rad" ); if ( _access( global_lights, 0x04) == -1 ) { // try looking in qproject strcat( strcpy( global_lights, qproject ), "lights.rad" ); if ( _access( global_lights, 0x04) == -1 ) { // try looking in the directory we were run from GetModuleFileName( NULL, global_lights, sizeof( global_lights ) ); ExtractFilePath( global_lights, global_lights ); strcat( global_lights, "lights.rad" ); } } // Set the optional level specific lights filename DefaultExtension( strcpy( level_lights, source ), ".rad" ); if ( _access( level_lights, 0x04) == -1 ) *level_lights = 0; ReadLightFile(global_lights); // Required if ( *designer_lights ) ReadLightFile(designer_lights); // Command-line if ( *level_lights ) ReadLightFile(level_lights); // Optional & implied strcpy(incrementfile, source); DefaultExtension(incrementfile, ".r0"); DefaultExtension(source, ".bsp"); LoadBSPFile (source); ParseEntities (); if (!visdatasize) { printf ("No vis information, direct lighting only.\n"); numbounce = 0; ambient[0] = ambient[1] = ambient[2] = 0.1f; } RadWorld (); if (verbose) PrintBSPFileSizes (); WriteBSPFile (source); if ( incremental ) { if ( !IsIncremental(incrementfile) ) { SaveIncremental(incrementfile); } } else { unlink(incrementfile); } end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); return 0; }
int main (int argc, char **argv) { int i; double start, end; char path[1024]; _printf ("Q3Map v1.0s (c) 1999 Id Software Inc.\n"); _printf ("OMmap (su44) - v0.1\n"); if ( argc < 2 ) { Error ("usage: q3map [options] mapfile"); } // check for general program options if (!strcmp(argv[1], "-info")) { Bspinfo( argc - 2, argv + 2 ); return 0; } if (!strcmp(argv[1], "-light")) { LightMain( argc - 1, argv + 1 ); return 0; } if (!strcmp(argv[1], "-vlight")) { VLightMain( argc - 1, argv + 1 ); return 0; } if (!strcmp(argv[1], "-vsound")) { VSoundMain( argc - 1, argv + 1 ); return 0; } if (!strcmp(argv[1], "-vis")) { VisMain( argc - 1, argv + 1 ); return 0; } // do a bsp if nothing else was specified _printf ("---- q3map ----\n"); tempsource[0] = '\0'; for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-tempname")) { strcpy(tempsource, argv[++i]); } else if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i],"-glview")) { glview = qtrue; } else if (!strcmp(argv[i], "-v")) { _printf ("verbose = true\n"); verbose = qtrue; } else if (!strcmp(argv[i], "-draw")) { _printf ("drawflag = true\n"); drawflag = qtrue; } else if (!strcmp(argv[i], "-nowater")) { _printf ("nowater = true\n"); nowater = qtrue; } else if (!strcmp(argv[i], "-noopt")) { _printf ("noopt = true\n"); noopt = qtrue; } else if (!strcmp(argv[i], "-nofill")) { _printf ("nofill = true\n"); nofill = qtrue; } else if (!strcmp(argv[i], "-nodetail")) { _printf ("nodetail = true\n"); nodetail = qtrue; } else if (!strcmp(argv[i], "-fulldetail")) { _printf ("fulldetail = true\n"); fulldetail = qtrue; } else if (!strcmp(argv[i], "-onlyents")) { _printf ("onlyents = true\n"); onlyents = qtrue; } else if (!strcmp(argv[i], "-onlytextures")) { _printf ("onlytextures = true\n"); // FIXME: make work again! onlytextures = qtrue; } else if (!strcmp(argv[i], "-micro")) { microvolume = atof(argv[i+1]); _printf ("microvolume = %f\n", microvolume); i++; } else if (!strcmp(argv[i], "-nofog")) { _printf ("nofog = true\n"); nofog = qtrue; } else if (!strcmp(argv[i], "-nosubdivide")) { _printf ("nosubdivide = true\n"); nosubdivide = qtrue; } else if (!strcmp(argv[i], "-leaktest")) { _printf ("leaktest = true\n"); leaktest = qtrue; } else if (!strcmp(argv[i], "-verboseentities")) { _printf ("verboseentities = true\n"); verboseentities = qtrue; } else if (!strcmp(argv[i], "-nocurves")) { noCurveBrushes = qtrue; _printf ("no curve brushes\n"); } else if (!strcmp(argv[i], "-notjunc")) { notjunc = qtrue; _printf ("no tjunction fixing\n"); } else if (!strcmp(argv[i], "-expand")) { testExpand = qtrue; _printf ("Writing expanded.map.\n"); } else if (!strcmp(argv[i], "-showseams")) { showseams = qtrue; _printf ("Showing seams on terrain.\n"); } else if (!strcmp (argv[i],"-tmpout")) { strcpy (outbase, "/tmp"); } else if (!strcmp (argv[i],"-fakemap")) { fakemap = qtrue; _printf( "will generate fakemap.map\n"); } else if (!strcmp(argv[i], "-samplesize")) { samplesize = atoi(argv[i+1]); if (samplesize < 1) samplesize = 1; i++; _printf("lightmap sample size is %dx%d units\n", samplesize, samplesize); } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: q3map [options] mapfile"); start = I_FloatTime (); ThreadSetDefault (); //numthreads = 1; // multiple threads aren't helping because of heavy malloc use SetQdirFromPath (argv[i]); #ifdef _WIN32 InitPakFile(gamedir, NULL); #endif strcpy (source, ExpandArg (argv[i])); StripExtension (source); // delete portal and line files sprintf (path, "%s.prt", source); remove (path); sprintf (path, "%s.lin", source); remove (path); strcpy (name, ExpandArg (argv[i])); if ( strcmp(name + strlen(name) - 4, ".reg" ) ) { // if we are doing a full map, delete the last saved region map sprintf (path, "%s.reg", source); remove (path); DefaultExtension (name, ".map"); // might be .reg } // // if onlyents, just grab the entites and resave // if ( onlyents ) { OnlyEnts(); return 0; } // // if onlytextures, just grab the textures and resave // if ( onlytextures ) { OnlyTextures(); return 0; } // // start from scratch // LoadShaderInfo(); // load original file from temp spot in case it was renamed by the editor on the way in if (strlen(tempsource) > 0) { LoadMapFile (tempsource); } else { LoadMapFile (name); } SetModelNumbers (); SetLightStyles (); ProcessModels (); EndBSPFile(); end = I_FloatTime (); _printf ("%5.0f seconds elapsed\n", end-start); // remove temp name if appropriate if (strlen(tempsource) > 0) { remove(tempsource); } return 0; }
int main (int argc, char **argv) { int i, comp = 0; char outputpath[MAX_PATH] = ""; char filename[MAX_PATH] = "unknown"; quakefile_t *qfiles = NULL, *qf; double start_time; myargc = argc; myargv = argv; start_time = I_FloatTime(); Log_Open("bspc.log"); //open a log file Log_Print(BSPC_NAME" version "BSPC_VERSION", %s %s\n", __DATE__, __TIME__); #ifdef ZTMAUTOARGS calcgrapplereach = true; forcesidesvisible = true; // Currently always required or BSPC fails? #endif DefaultCfg(); for (i = 1; i < argc; i++) { if (!stricmp(argv[i],"-threads")) { if (i + 1 >= argc) {i = 0; break;} numthreads = atoi(argv[++i]); Log_Print("threads = %d\n", numthreads); } //end if else if (!stricmp(argv[i], "-noverbose")) { Log_Print("verbose = false\n"); verbose = false; } //end else if else if (!stricmp(argv[i], "-nocsg")) { Log_Print("nocsg = true\n"); nocsg = true; } //end else if else if (!stricmp(argv[i], "-optimize")) { Log_Print("optimize = true\n"); optimize = true; } //end else if /* else if (!stricmp(argv[i], "-noweld")) { Log_Print("noweld = true\n"); noweld = true; } //end else if else if (!stricmp(argv[i], "-noshare")) { Log_Print("noshare = true\n"); noshare = true; } //end else if else if (!stricmp(argv[i], "-notjunc")) { Log_Print("notjunc = true\n"); notjunc = true; } //end else if else if (!stricmp(argv[i], "-nowater")) { Log_Print("nowater = true\n"); nowater = true; } //end else if else if (!stricmp(argv[i], "-noprune")) { Log_Print("noprune = true\n"); noprune = true; } //end else if else if (!stricmp(argv[i], "-nomerge")) { Log_Print("nomerge = true\n"); nomerge = true; } //end else if else if (!stricmp(argv[i], "-nosubdiv")) { Log_Print("nosubdiv = true\n"); nosubdiv = true; } //end else if else if (!stricmp(argv[i], "-nodetail")) { Log_Print("nodetail = true\n"); nodetail = true; } //end else if else if (!stricmp(argv[i], "-fulldetail")) { Log_Print("fulldetail = true\n"); fulldetail = true; } //end else if else if (!stricmp(argv[i], "-onlyents")) { Log_Print("onlyents = true\n"); onlyents = true; } //end else if else if (!stricmp(argv[i], "-micro")) { if (i + 1 >= argc) {i = 0; break;} microvolume = atof(argv[++i]); Log_Print("microvolume = %f\n", microvolume); } //end else if else if (!stricmp(argv[i], "-leaktest")) { Log_Print("leaktest = true\n"); leaktest = true; } //end else if else if (!stricmp(argv[i], "-verboseentities")) { Log_Print("verboseentities = true\n"); verboseentities = true; } //end else if else if (!stricmp(argv[i], "-chop")) { if (i + 1 >= argc) {i = 0; break;} subdivide_size = atof(argv[++i]); Log_Print("subdivide_size = %f\n", subdivide_size); } //end else if else if (!stricmp (argv[i], "-tmpout")) { strcpy (outbase, "/tmp"); Log_Print("temp output\n"); } //end else if */ else if (!stricmp(argv[i], "-freetree")) { freetree = true; Log_Print("freetree = true\n"); } //end else if else if (!stricmp(argv[i], "-grapplereach")) { calcgrapplereach = true; Log_Print("grapplereach = true\n"); } //end else if #ifdef ZTMAUTOARGS else if (!stricmp(argv[i], "-nograpplereach")) { calcgrapplereach = false; Log_Print("grapplereach = false\n"); } //end else if #endif else if (!stricmp(argv[i], "-nobrushmerge")) { nobrushmerge = true; Log_Print("nobrushmerge = true\n"); } //end else if else if (!stricmp(argv[i], "-noliquids")) { noliquids = true; Log_Print("noliquids = true\n"); } //end else if else if (!stricmp(argv[i], "-forcesidesvisible")) { forcesidesvisible = true; Log_Print("forcesidesvisible = true\n"); } //end else if #ifdef ZTMAUTOARGS else if (!stricmp(argv[i], "-noforcesidesvisible")) { forcesidesvisible = false; Log_Print("forcesidesvisible = false\n"); } //end else if #endif else if (!stricmp(argv[i], "-output")) { if (i + 1 >= argc) {i = 0; break;} if (access(argv[i+1], 0x04)) Warning("the folder %s does not exist", argv[i+1]); strcpy(outputpath, argv[++i]); } //end else if else if (!stricmp(argv[i], "-breadthfirst")) { use_nodequeue = true; Log_Print("breadthfirst = true\n"); } //end else if else if (!stricmp(argv[i], "-capsule")) { capsule_collision = true; Log_Print("capsule_collision = true\n"); } //end else if else if (!stricmp(argv[i], "-cfg")) { if (i + 1 >= argc) {i = 0; break;} if (!LoadCfgFile(argv[++i])) exit(0); } //end else if else if (!stricmp(argv[i], "-bsp2map")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_BSP2MAP; qfiles = GetArgumentFiles(argc, argv, &i, "bsp"); } //end else if else if (!stricmp(argv[i], "-bsp2aas")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_BSP2AAS; qfiles = GetArgumentFiles(argc, argv, &i, "bsp"); } //end else if else if (!stricmp(argv[i], "-aasall")) { if (i + 1 >= argc) {i = 0; break;} CreateAASFilesForAllBSPFiles(argv[++i]); } //end else if else if (!stricmp(argv[i], "-reach")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_REACH; qfiles = GetArgumentFiles(argc, argv, &i, "bsp"); } //end else if else if (!stricmp(argv[i], "-cluster")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_CLUSTER; qfiles = GetArgumentFiles(argc, argv, &i, "bsp"); } //end else if else if (!stricmp(argv[i], "-aasinfo")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_AASINFO; qfiles = GetArgumentFiles(argc, argv, &i, "aas"); } //end else if else if (!stricmp(argv[i], "-aasopt")) { if (i + 1 >= argc) {i = 0; break;} comp = COMP_AASOPTIMIZE; qfiles = GetArgumentFiles(argc, argv, &i, "aas"); } //end else if else { Log_Print("unknown parameter %s\n", argv[i]); break; } //end else } //end for //if there are parameters and there's no mismatch in one of the parameters if (argc > 1 && i == argc) { switch(comp) { case COMP_BSP2MAP: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { //copy the output path strcpy(filename, outputpath); //append the bsp file base AppendPathSeperator(filename, MAX_PATH); ExtractFileBase(qf->origname, &filename[strlen(filename)]); //append .map strcat(filename, ".map"); // Log_Print("bsp2map: %s to %s\n", qf->origname, filename); if (qf->type != QFILETYPE_BSP) Warning("%s is probably not a BSP file\n", qf->origname); // LoadMapFromBSP(qf); //write the map file WriteMapFile(filename); } //end for break; } //end case case COMP_BSP2AAS: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { AASOuputFile(qf, outputpath, filename); // Log_Print("bsp2aas: %s to %s\n", qf->origname, filename); if (qf->type != QFILETYPE_BSP) Warning("%s is probably not a BSP file\n", qf->origname); //set before map loading create_aas = 1; LoadMapFromBSP(qf); //create the AAS file AAS_Create(filename); //calculate the reachabilities and clusters AAS_CalcReachAndClusters(qf); // if (optimize) AAS_Optimize(); // //write out the stored AAS file if (!AAS_WriteAASFile(filename)) { Error("error writing %s\n", filename); } //end if //deallocate memory AAS_FreeMaxAAS(); } //end for break; } //end case case COMP_REACH: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { AASOuputFile(qf, outputpath, filename); // Log_Print("reach: %s to %s\n", qf->origname, filename); if (qf->type != QFILETYPE_BSP) Warning("%s is probably not a BSP file\n", qf->origname); //if the AAS file exists in the output directory if (!access(filename, 0x04)) { if (!AAS_LoadAASFile(filename)) { Error("error loading aas file %s\n", filename); } //end if } //end if else { Warning("AAS file %s not found in output folder\n", filename); Log_Print("creating %s...\n", filename); //set before map loading create_aas = 1; LoadMapFromBSP(qf); //create the AAS file AAS_Create(filename); } //end else //calculate the reachabilities and clusters AAS_CalcReachAndClusters(qf); // if (optimize) AAS_Optimize(); //write out the stored AAS file if (!AAS_WriteAASFile(filename)) { Error("error writing %s\n", filename); } //end if //deallocate memory AAS_FreeMaxAAS(); } //end for break; } //end case case COMP_CLUSTER: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { AASOuputFile(qf, outputpath, filename); // Log_Print("cluster: %s to %s\n", qf->origname, filename); if (qf->type != QFILETYPE_BSP) Warning("%s is probably not a BSP file\n", qf->origname); //if the AAS file exists in the output directory if (!access(filename, 0x04)) { if (!AAS_LoadAASFile(filename)) { Error("error loading aas file %s\n", filename); } //end if //calculate the clusters AAS_RecalcClusters(); } //end if else { Warning("AAS file %s not found in output folder\n", filename); Log_Print("creating %s...\n", filename); //set before map loading create_aas = 1; LoadMapFromBSP(qf); //create the AAS file AAS_Create(filename); //calculate the reachabilities and clusters AAS_CalcReachAndClusters(qf); } //end else // if (optimize) AAS_Optimize(); //write out the stored AAS file if (!AAS_WriteAASFile(filename)) { Error("error writing %s\n", filename); } //end if //deallocate memory AAS_FreeMaxAAS(); } //end for break; } //end case case COMP_AASOPTIMIZE: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { AASOuputFile(qf, outputpath, filename); // Log_Print("optimizing: %s to %s\n", qf->origname, filename); if (qf->type != QFILETYPE_AAS) Warning("%s is probably not a AAS file\n", qf->origname); // AAS_InitBotImport(); // if (!AAS_LoadAASFile(qf->filename)) { Error("error loading aas file %s\n", qf->filename); } //end if AAS_Optimize(); //write out the stored AAS file if (!AAS_WriteAASFile(filename)) { Error("error writing %s\n", filename); } //end if //deallocate memory AAS_FreeMaxAAS(); } //end for break; } //end case case COMP_AASINFO: { if (!qfiles) Log_Print("no files found\n"); for (qf = qfiles; qf; qf = qf->next) { AASOuputFile(qf, outputpath, filename); // Log_Print("aas info for: %s\n", filename); if (qf->type != QFILETYPE_AAS) Warning("%s is probably not a AAS file\n", qf->origname); // AAS_InitBotImport(); // if (!AAS_LoadAASFile(qf->filename)) { Error("error loading aas file %s\n", qf->filename); } //end if AAS_ShowTotals(); } //end for break; } //end case default: { Log_Print("don't know what to do\n"); break; } //end default } //end switch } //end if else { Log_Print("Usage: bspc [-<switch> [-<switch> ...]]\n" #ifdef _WIN32 "Example 1: bspc -bsp2aas d:\\quake3\\baseq3\\maps\\mymap?.bsp\n" "Example 2: bspc -bsp2aas d:\\quake3\\baseq3\\pak0.pk3\\maps/q3dm*.bsp\n" #else "Example 1: bspc -bsp2aas /quake3/baseq3/maps/mymap?.bsp\n" "Example 2: bspc -bsp2aas /quake3/baseq3/pak0.pk3/maps/q3dm*.bsp\n" #endif "\n" "Switches:\n" //" bsp2map <[pakfilter/]filter.bsp> = convert BSP to MAP\n" //" aasall <quake3folder> = create AAS files for all BSPs\n" " bsp2aas <[pakfilter/]filter.bsp> = convert BSP to AAS\n" " reach <filter.bsp> = compute reachability & clusters\n" " cluster <filter.bsp> = compute clusters\n" " aasopt <filter.aas> = optimize aas file\n" " aasinfo <filter.aas> = show AAS file info\n" " output <output path> = set output path\n" " threads <X> = set number of threads to X\n" " cfg <filename> = use this cfg file\n" " optimize = enable optimization\n" " noverbose = disable verbose output\n" " breadthfirst = breadth first bsp building\n" " nobrushmerge = don't merge brushes\n" " noliquids = don't write liquids to map\n" " freetree = free the bsp tree\n" " nocsg = disables brush chopping\n" #ifdef ZTMAUTOARGS " noforcesidesvisible = don't force all sides to be visible\n" " nograpplereach = don't calculate grapple reachabilities\n" #else " forcesidesvisible = force all sides to be visible\n" " grapplereach = calculate grapple reachabilities\n" #endif /* " noweld = disables weld\n" " noshare = disables sharing\n" " notjunc = disables juncs\n" " nowater = disables water brushes\n" " noprune = disables node prunes\n" " nomerge = disables face merging\n" " nosubdiv = disables subdeviding\n" " nodetail = disables detail brushes\n" " fulldetail = enables full detail\n" " onlyents = only compile entities with bsp\n" " micro <volume>\n" " = sets the micro volume to the given float\n" " leaktest = perform a leak test\n" " verboseentities\n" " = enable entity verbose mode\n" " chop <subdivide_size>\n" " = sets the subdivide size to the given float\n"*/ "\n"); } //end else Log_Print("BSPC run time is %5.0f seconds\n", I_FloatTime() - start_time); Log_Close(); //close the log file return 0; } //end of the function main
/* ============= RunThreadsOn ============= */ void RunThreadsOn( int workcnt, qboolean showpacifier, void ( *func )( int ) ){ pthread_mutexattr_t mattrib; pthread_attr_t attr; pthread_t work_threads[MAX_THREADS]; size_t stacksize; int start, end; int i = 0; start = I_FloatTime(); pacifier = showpacifier; dispatch = 0; oldf = -1; workcount = workcnt; pthread_attr_init( &attr ); if ( pthread_attr_setstacksize( &attr, 8388608 ) != 0 ) { stacksize = 0; pthread_attr_getstacksize( &attr, &stacksize ); Sys_Printf( "Could not set a per-thread stack size of 8 MB, using only %.2f MB\n", stacksize / 1048576.0 ); } if ( numthreads == 1 ) { func( 0 ); } else { threaded = qtrue; if ( pacifier ) { setbuf( stdout, NULL ); } if ( pthread_mutexattr_init( &mattrib ) != 0 ) { Error( "pthread_mutexattr_init failed" ); } if ( pthread_mutexattr_settype( &mattrib, PTHREAD_MUTEX_ERRORCHECK ) != 0 ) { Error( "pthread_mutexattr_settype failed" ); } recursive_mutex_init( mattrib ); for ( i = 0 ; i < numthreads ; i++ ) { /* Default pthread attributes: joinable & non-realtime scheduling */ if ( pthread_create(&work_threads[i], &attr, (void *(*)(void *)) func, (void*)(uintptr_t)i ) != 0 ) { Error( "pthread_create failed" ); } } for ( i = 0 ; i < numthreads ; i++ ) { if ( pthread_join( work_threads[i], NULL ) != 0 ) { Error( "pthread_join failed" ); } } pthread_mutexattr_destroy( &mattrib ); threaded = qfalse; } end = I_FloatTime(); if ( pacifier ) { Sys_Printf( " (%i)\n", end - start ); } }
//=========================================================================== // creates an .AAS file with the given name // a MAP should be loaded before calling this // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void AAS_Create(char *aasfile) { entity_t *e; tree_t *tree; double start_time; //for a possible leak file strcpy(source, aasfile); StripExtension(source); //the time started start_time = I_FloatTime(); //set the default number of threads (depends on number of processors) ThreadSetDefault(); //set the global entity number to the world model entity_num = 0; //the world entity e = &entities[entity_num]; //process the whole world tree = ProcessWorldBrushes(e->firstbrush, e->firstbrush + e->numbrushes); //if the conversion is cancelled if (cancelconversion) { Tree_Free(tree); return; } //end if //display BSP tree creation time Log_Print("BSP tree created in %5.0f seconds\n", I_FloatTime() - start_time); //prune the bsp tree Tree_PruneNodes(tree->headnode); //if the conversion is cancelled if (cancelconversion) { Tree_Free(tree); return; } //end if //create the tree portals MakeTreePortals(tree); //if the conversion is cancelled if (cancelconversion) { Tree_Free(tree); return; } //end if //Marks all nodes that can be reached by entites if (FloodEntities(tree)) { //fill out nodes that can't be reached FillOutside(tree->headnode); } //end if else { LeakFile(tree); Error("**** leaked ****\n"); return; } //end else //create AAS from the BSP tree //========================================== //initialize tmp aas AAS_InitTmpAAS(); //create the convex areas from the leaves AAS_CreateAreas(tree->headnode); //free the BSP tree because it isn't used anymore if (freetree) Tree_Free(tree); //try to merge area faces AAS_MergeAreaFaces(); //do gravitational subdivision AAS_GravitationalSubdivision(); //merge faces if possible AAS_MergeAreaFaces(); AAS_RemoveAreaFaceColinearPoints(); //merge areas if possible AAS_MergeAreas(); //NOTE: prune nodes directly after area merging AAS_PruneNodes(); //flip shared faces so they are all facing to the same area AAS_FlipSharedFaces(); AAS_RemoveAreaFaceColinearPoints(); //merge faces if possible AAS_MergeAreaFaces(); //merge area faces in the same plane AAS_MergeAreaPlaneFaces(); //do ladder subdivision AAS_LadderSubdivision(); //FIXME: melting is buggy AAS_MeltAreaFaceWindings(); //remove tiny faces AAS_RemoveTinyFaces(); //create area settings AAS_CreateAreaSettings(); //check if the winding plane is equal to the face plane //AAS_CheckAreaWindingPlanes(); // //AAS_CheckSharedFaces(); //========================================== //if the conversion is cancelled if (cancelconversion) { Tree_Free(tree); AAS_FreeTmpAAS(); return; } //end if //store the created AAS stuff in the AAS file format and write the file AAS_StoreFile(aasfile); //free the temporary AAS memory AAS_FreeTmpAAS(); //display creation time Log_Print("\nAAS created in %5.0f seconds\n", I_FloatTime() - start_time); } //end of the function AAS_Create
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void RunThreadsOn( int workcnt, qboolean showpacifier, void ( *func )(int) ) { int i; pthread_t work_threads[MAX_THREADS]; pthread_addr_t status; pthread_attr_t attrib; pthread_mutexattr_t mattrib; int start, end; Log_Print( "pthread multi-threading\n" ); start = I_FloatTime(); dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; threaded = true; if ( numthreads < 1 || numthreads > MAX_THREADS ) { numthreads = 1; } if ( pacifier ) { setbuf( stdout, NULL ); } if ( !my_mutex ) { my_mutex = GetMemory( sizeof( *my_mutex ) ); if ( pthread_mutexattr_create( &mattrib ) == -1 ) { Error( "pthread_mutex_attr_create failed" ); } if ( pthread_mutexattr_setkind_np( &mattrib, MUTEX_FAST_NP ) == -1 ) { Error( "pthread_mutexattr_setkind_np failed" ); } if ( pthread_mutex_init( my_mutex, mattrib ) == -1 ) { Error( "pthread_mutex_init failed" ); } } if ( pthread_attr_create( &attrib ) == -1 ) { Error( "pthread_attr_create failed" ); } if ( pthread_attr_setstacksize( &attrib, 0x100000 ) == -1 ) { Error( "pthread_attr_setstacksize failed" ); } for ( i = 0 ; i < numthreads ; i++ ) { if ( pthread_create( &work_threads[i], attrib , (pthread_startroutine_t)func, (pthread_addr_t)i ) == -1 ) { Error( "pthread_create failed" ); } } for ( i = 0 ; i < numthreads ; i++ ) { if ( pthread_join( work_threads[i], &status ) == -1 ) { Error( "pthread_join failed" ); } } threaded = false; end = I_FloatTime(); if ( pacifier ) { printf( " (%i)\n", end - start ); } } //end of the function RunThreadsOn
/* =========== main =========== */ int main (int argc, char **argv) { char portalfile[1024]; char source[1024]; int i; double start, end; printf ("vis.exe v1.3 (%s)\n", __DATE__); printf ("---- vis ----\n"); verbose = false; for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i], "-fast")) { printf ("fastvis = true\n"); fastvis = true; } else if (!strcmp(argv[i], "-v")) { printf ("verbose = true\n"); verbose = true; } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: vis [-threads #] [-level 0-4] [-fast] [-v] bspfile"); start = I_FloatTime (); ThreadSetDefault (); printf ("%i thread(s)\n", numthreads); strcpy (source, argv[i]); StripExtension (source); DefaultExtension (source, ".bsp"); LoadBSPFile (source); strcpy (portalfile, argv[i]); StripExtension (portalfile); strcat (portalfile, ".prt"); LoadPortals (portalfile); uncompressed = malloc(bitbytes*portalleafs); memset (uncompressed, 0, bitbytes*portalleafs); CalcVis (); qprintf ("c_chains: %i\n",c_chains); visdatasize = vismap_p - dvisdata; printf ("visdatasize:%i compressed from %i\n", visdatasize, originalvismapsize); CalcAmbientSounds (); WriteBSPFile (source); // unlink (portalfile); end = I_FloatTime (); printf ("%5.1f seconds elapsed\n", end-start); free(uncompressed); return 0; }
void RunThreadsOn(int workcnt, bool showpacifier, q_threadfunction func) { DWORD threadid[MAX_THREADS]; HANDLE threadhandle[MAX_THREADS]; int i; double start, end; threadstart = I_FloatTime(); start = threadstart; for (i = 0; i < THREADTIMES_SIZE; i++) { threadtimes[i] = 0; } dispatch = 0; workcount = workcnt; oldf = -1; pacifier = showpacifier; threaded = true; q_entry = func; if (workcount < dispatch) { Developer(DEVELOPER_LEVEL_ERROR, "RunThreadsOn: Workcount(%i) < dispatch(%i)\n", workcount, dispatch); } hlassume(workcount >= dispatch, assume_BadWorkcount); // // Create all the threads (suspended) // threads_InitCrit(); for (i = 0; i < g_numthreads; i++) { HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadEntryStub, (LPVOID) i, CREATE_SUSPENDED, &threadid[i]); if (hThread != NULL) { threadhandle[i] = hThread; } else { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) & lpMsgBuf, 0, NULL); // Process any inserts in lpMsgBuf. // ... // Display the string. Developer(DEVELOPER_LEVEL_ERROR, "CreateThread #%d [%08X] failed : %s\n", i, threadhandle[i], lpMsgBuf); Fatal(assume_THREAD_ERROR, "Unable to create thread #%d", i); // Free the buffer. LocalFree(lpMsgBuf); } } CheckFatal(); // Start all the threads for (i = 0; i < g_numthreads; i++) { if (ResumeThread(threadhandle[i]) == 0xFFFFFFFF) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) & lpMsgBuf, 0, NULL); // Process any inserts in lpMsgBuf. // ... // Display the string. Developer(DEVELOPER_LEVEL_ERROR, "ResumeThread #%d [%08X] failed : %s\n", i, threadhandle[i], lpMsgBuf); Fatal(assume_THREAD_ERROR, "Unable to start thread #%d", i); // Free the buffer. LocalFree(lpMsgBuf); } } CheckFatal(); // Wait for threads to complete for (i = 0; i < g_numthreads; i++) { Developer(DEVELOPER_LEVEL_MESSAGE, "WaitForSingleObject on thread #%d [%08X]\n", i, threadhandle[i]); WaitForSingleObject(threadhandle[i], INFINITE); } threads_UninitCrit(); q_entry = NULL; threaded = false; end = I_FloatTime(); if (pacifier) { printf("\r%60s\r", ""); } Log(" (%.2f seconds)\n", end - start); }