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