TMAPFLAT.C 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
  11. COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  12. */
  13. #pragma off (unreferenced)
  14. static char rcsid[] = "$Id: tmapflat.c 1.21 1996/12/04 19:27:54 matt Exp $";
  15. #pragma on (unreferenced)
  16. #include <math.h>
  17. // #include <graph.h>
  18. #include <limits.h>
  19. #include <stdio.h>
  20. #include <conio.h>
  21. #include <stdlib.h>
  22. #include "pa_enabl.h" //$$POLY_ACC
  23. // #include "hack3df.h"
  24. #include "fix.h"
  25. #include "mono.h"
  26. #include "gr.h"
  27. #include "grdef.h"
  28. // #include "ui.h"
  29. #include "texmap.h"
  30. #include "texmapl.h"
  31. #include "scanline.h"
  32. //#include "tmapext.h"
  33. extern void texture_map_flat(g3ds_tmap *t);
  34. extern void texture_map_flat_faded(g3ds_tmap *t);
  35. #include "3d.h"
  36. #include "error.h"
  37. #if defined(POLY_ACC)
  38. #include "poly_acc.h"
  39. #endif
  40. typedef struct pnt2d {
  41. fix x,y;
  42. } pnt2d;
  43. #pragma off (unreferenced) //bp not referenced
  44. //this takes the same partms as draw_tmap, but draws a flat-shaded polygon
  45. void draw_tmap_flat(grs_bitmap *bp,int nverts,g3s_point **vertbuf)
  46. {
  47. g3ds_tmap my_tmap;
  48. int i;
  49. fix average_light;
  50. Assert(nverts < MAX_TMAP_VERTS);
  51. average_light = vertbuf[0]->p3_l;
  52. for (i=1; i<nverts; i++)
  53. average_light += vertbuf[i]->p3_l;
  54. if (nverts == 4)
  55. average_light = f2i(average_light * NUM_LIGHTING_LEVELS/4);
  56. else
  57. average_light = f2i(average_light * NUM_LIGHTING_LEVELS/nverts);
  58. if (average_light < 0)
  59. average_light = 0;
  60. else if (average_light > NUM_LIGHTING_LEVELS-1)
  61. average_light = NUM_LIGHTING_LEVELS-1;
  62. tmap_flat_color = gr_fade_table[average_light*256 + bp->avg_color];
  63. my_tmap.nv = nverts;
  64. for (i=0; i<nverts; i++) {
  65. my_tmap.verts[i].x2d = vertbuf[i]->p3_sx;
  66. my_tmap.verts[i].y2d = vertbuf[i]->p3_sy;
  67. }
  68. #if defined(POLY_ACC)
  69. if ( Gr_scanline_darkening_level >= GR_FADE_LEVELS )
  70. i = 255;
  71. else
  72. i = 255.0 * (float)(GR_FADE_LEVELS - Gr_scanline_darkening_level)/(float)GR_FADE_LEVELS;
  73. pa_draw_flat(&my_tmap, tmap_flat_color, i);
  74. #else
  75. if ( Gr_scanline_darkening_level >= GR_FADE_LEVELS )
  76. texture_map_flat( &my_tmap );
  77. else {
  78. tmap_flat_shade_value = Gr_scanline_darkening_level;
  79. texture_map_flat_faded( &my_tmap );
  80. }
  81. #endif
  82. }
  83. // -----------------------------------------------------------------------------------------
  84. // This is the gr_upoly-like interface to the texture mapper which uses texture-mapper compatible
  85. // (ie, avoids cracking) edge/delta computation.
  86. void gr_upoly_tmap(int nverts, int *vert )
  87. {
  88. g3ds_tmap my_tmap;
  89. int i;
  90. Assert(nverts < MAX_TMAP_VERTS);
  91. my_tmap.nv = nverts;
  92. for (i=0; i<nverts; i++) {
  93. my_tmap.verts[i].x2d = *vert++;
  94. my_tmap.verts[i].y2d = *vert++;
  95. }
  96. tmap_flat_color = COLOR;
  97. #ifdef _3DFX
  98. _3dfx_DrawFlatShadedPoly( &my_tmap, _3dfx_PaletteToARGB( COLOR ) );
  99. if ( _3dfx_skip_ddraw )
  100. return;
  101. #endif
  102. #if defined(POLY_ACC)
  103. if ( Gr_scanline_darkening_level >= GR_FADE_LEVELS )
  104. i = 255;
  105. else
  106. i = 255.0 * (float)(GR_FADE_LEVELS - Gr_scanline_darkening_level)/(float)GR_FADE_LEVELS;
  107. pa_draw_flat(&my_tmap, tmap_flat_color, i);
  108. #else
  109. if ( Gr_scanline_darkening_level >= GR_FADE_LEVELS )
  110. texture_map_flat( &my_tmap );
  111. else {
  112. tmap_flat_shade_value = Gr_scanline_darkening_level;
  113. texture_map_flat_faded( &my_tmap );
  114. }
  115. #endif
  116. }