/utils/qutils/light/light.c
C | 165 lines | 93 code | 35 blank | 37 comment | 16 complexity | dc63005b33093a43b91f6d5b291276f5 MD5 | raw file
Possible License(s): GPL-2.0
- /* Copyright (C) 1996-1997 Id Software, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- See file, 'COPYING', for details.
- */
- // lighting.c
- #include "light.h"
- /*
- NOTES
- -----
- */
- float scaledist = 1.0;
- float scalecos = 0.5;
- float rangescale = 0.5;
- byte *filebase, *file_p, *file_end;
- dmodel_t *bspmodel;
- int bspfileface; // next surface to dispatch
- vec3_t bsp_origin;
- qboolean extrasamples;
- float minlights[MAX_MAP_FACES];
- byte *GetFileSpace (int size)
- {
- byte *buf;
-
- LOCK;
- file_p = (byte *)(((long)file_p + 3)&~3);
- buf = file_p;
- file_p += size;
- UNLOCK;
- if (file_p > file_end)
- Error ("GetFileSpace: overrun");
- return buf;
- }
- void LightThread (void *junk)
- {
- int i;
-
- while (1)
- {
- LOCK;
- i = bspfileface++;
- UNLOCK;
- if (i >= numfaces)
- return;
-
- LightFace (i);
- }
- }
- /*
- =============
- LightWorld
- =============
- */
- void LightWorld (void)
- {
- filebase = file_p = dlightdata;
- file_end = filebase + MAX_MAP_LIGHTING;
- RunThreadsOn (LightThread);
- lightdatasize = file_p - filebase;
-
- printf ("lightdatasize: %i\n", lightdatasize);
- }
- /*
- ========
- 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;
- }