home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 December / PCWKCD1296.iso / sharewar / quake106 / utils / light / light.c < prev    next >
C/C++ Source or Header  |  1996-09-12  |  2KB  |  147 lines

  1. // lighting.c
  2.  
  3. #include "light.h"
  4.  
  5. /*
  6.  
  7. NOTES
  8. -----
  9.  
  10. */
  11.  
  12. float        scaledist = 1.0;
  13. float        scalecos = 0.5;
  14. float        rangescale = 0.5;
  15.  
  16. byte        *filebase, *file_p, *file_end;
  17.  
  18. dmodel_t    *bspmodel;
  19. int            bspfileface;    // next surface to dispatch
  20.  
  21. vec3_t    bsp_origin;
  22.  
  23. qboolean    extrasamples;
  24.  
  25. float        minlights[MAX_MAP_FACES];
  26.  
  27.  
  28. byte *GetFileSpace (int size)
  29. {
  30.     byte    *buf;
  31.     
  32.     LOCK;
  33.     file_p = (byte *)(((long)file_p + 3)&~3);
  34.     buf = file_p;
  35.     file_p += size;
  36.     UNLOCK;
  37.     if (file_p > file_end)
  38.         Error ("GetFileSpace: overrun");
  39.     return buf;
  40. }
  41.  
  42.  
  43. void LightThread (void *junk)
  44. {
  45.     int            i;
  46.     
  47.     while (1)
  48.     {
  49.         LOCK;
  50.         i = bspfileface++;
  51.         UNLOCK;
  52.         if (i >= numfaces)
  53.             return;
  54.         
  55.         LightFace (i);
  56.     }
  57. }
  58.  
  59. /*
  60. =============
  61. LightWorld
  62. =============
  63. */
  64. void LightWorld (void)
  65. {
  66.     filebase = file_p = dlightdata;
  67.     file_end = filebase + MAX_MAP_LIGHTING;
  68.  
  69.     RunThreadsOn (LightThread);
  70.  
  71.     lightdatasize = file_p - filebase;
  72.     
  73.     printf ("lightdatasize: %i\n", lightdatasize);
  74. }
  75.  
  76.  
  77. /*
  78. ========
  79. main
  80.  
  81. light modelfile
  82. ========
  83. */
  84. int main (int argc, char **argv)
  85. {
  86.     int        i;
  87.     double        start, end;
  88.     char        source[1024];
  89.  
  90.     printf ("----- LightFaces ----\n");
  91.  
  92.     for (i=1 ; i<argc ; i++)
  93.     {
  94.         if (!strcmp(argv[i],"-threads"))
  95.         {
  96.             numthreads = atoi (argv[i+1]);
  97.             i++;
  98.         }
  99.         else if (!strcmp(argv[i],"-extra"))
  100.         {
  101.             extrasamples = true;
  102.             printf ("extra sampling enabled\n");
  103.         }
  104.         else if (!strcmp(argv[i],"-dist"))
  105.         {
  106.             scaledist = atof (argv[i+1]);
  107.             i++;
  108.         }
  109.         else if (!strcmp(argv[i],"-range"))
  110.         {
  111.             rangescale = atof (argv[i+1]);
  112.             i++;
  113.         }
  114.         else if (argv[i][0] == '-')
  115.             Error ("Unknown option \"%s\"", argv[i]);
  116.         else
  117.             break;
  118.     }
  119.  
  120.     if (i != argc - 1)
  121.         Error ("usage: light [-threads num] [-extra] bspfile");
  122.  
  123.     InitThreads ();
  124.  
  125.     start = I_FloatTime ();
  126.  
  127.     strcpy (source, argv[i]);
  128.     StripExtension (source);
  129.     DefaultExtension (source, ".bsp");
  130.     
  131.     LoadBSPFile (source);
  132.     LoadEntities ();
  133.         
  134.     MakeTnodes (&dmodels[0]);
  135.  
  136.     LightWorld ();
  137.  
  138.     WriteEntitiesToString ();    
  139.     WriteBSPFile (source);
  140.  
  141.     end = I_FloatTime ();
  142.     printf ("%5.1f seconds elapsed\n", end-start);
  143.     
  144.     return 0;
  145. }
  146.  
  147.