LIGHT.C 2.0 KB

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