SCANLINE.C 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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: scanline.c 1.3 1996/01/24 16:38:16 champaign Exp $";
  15. #pragma on (unreferenced)
  16. #include <math.h>
  17. #include <limits.h>
  18. #include <stdio.h>
  19. #include <conio.h>
  20. #include <stdlib.h>
  21. #include "fix.h"
  22. #include "mono.h"
  23. #include "gr.h"
  24. #include "grdef.h"
  25. #include "texmap.h"
  26. #include "texmapl.h"
  27. #include "scanline.h"
  28. extern ubyte * dest_row_data;
  29. extern int loop_count;
  30. void c_tmap_scanline_flat()
  31. {
  32. ubyte *dest;
  33. int x;
  34. dest = dest_row_data;
  35. for (x=loop_count; x >= 0; x-- ) {
  36. *dest++ = tmap_flat_color;
  37. }
  38. }
  39. void c_tmap_scanline_shaded()
  40. {
  41. int fade;
  42. ubyte *dest;
  43. int x;
  44. dest = dest_row_data;
  45. fade = tmap_flat_shade_value<<8;
  46. for (x=loop_count; x >= 0; x-- ) {
  47. *dest++ = gr_fade_table[ fade |(*dest)];
  48. }
  49. }
  50. void c_tmap_scanline_lin_nolight()
  51. {
  52. ubyte *dest;
  53. uint c;
  54. int x;
  55. fix u,v,dudx, dvdx;
  56. u = fx_u;
  57. v = fx_v*64;
  58. dudx = fx_du_dx;
  59. dvdx = fx_dv_dx*64;
  60. dest = dest_row_data;
  61. if (!Transparency_on) {
  62. for (x=loop_count; x >= 0; x-- ) {
  63. *dest++ = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  64. u += dudx;
  65. v += dvdx;
  66. }
  67. } else {
  68. for (x=loop_count; x >= 0; x-- ) {
  69. c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  70. if ( c!=255)
  71. *dest = c;
  72. dest++;
  73. u += dudx;
  74. v += dvdx;
  75. }
  76. }
  77. }
  78. void c_tmap_scanline_lin()
  79. {
  80. ubyte *dest;
  81. uint c;
  82. int x;
  83. fix u,v,l,dudx, dvdx, dldx;
  84. u = fx_u;
  85. v = fx_v*64;
  86. dudx = fx_du_dx;
  87. dvdx = fx_dv_dx*64;
  88. l = fx_l;
  89. dldx = fx_dl_dx;
  90. dest = dest_row_data;
  91. if (!Transparency_on) {
  92. for (x=loop_count; x >= 0; x-- ) {
  93. *dest++ = gr_fade_table[ (l&(0xff00)) + (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
  94. l += dldx;
  95. u += dudx;
  96. v += dvdx;
  97. }
  98. } else {
  99. for (x=loop_count; x >= 0; x-- ) {
  100. c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  101. if ( c!=255)
  102. *dest = gr_fade_table[ (l&(0xff00)) + c ];
  103. dest++;
  104. l += dldx;
  105. u += dudx;
  106. v += dvdx;
  107. }
  108. }
  109. }
  110. void c_tmap_scanline_per_nolight()
  111. {
  112. ubyte *dest;
  113. uint c;
  114. int x;
  115. fix u,v,z,dudx, dvdx, dzdx;
  116. u = fx_u;
  117. v = fx_v*64;
  118. z = fx_z;
  119. dudx = fx_du_dx;
  120. dvdx = fx_dv_dx*64;
  121. dzdx = fx_dz_dx;
  122. dest = dest_row_data;
  123. if (!Transparency_on) {
  124. for (x=loop_count; x >= 0; x-- ) {
  125. *dest++ = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  126. u += dudx;
  127. v += dvdx;
  128. z += dzdx;
  129. }
  130. } else {
  131. for (x=loop_count; x >= 0; x-- ) {
  132. c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  133. if ( c!=255)
  134. *dest = c;
  135. dest++;
  136. u += dudx;
  137. v += dvdx;
  138. z += dzdx;
  139. }
  140. }
  141. }
  142. void c_tmap_scanline_per()
  143. {
  144. ubyte *dest;
  145. uint c;
  146. int x;
  147. fix u,v,z,l,dudx, dvdx, dzdx, dldx;
  148. u = fx_u;
  149. v = fx_v*64;
  150. z = fx_z;
  151. dudx = fx_du_dx;
  152. dvdx = fx_dv_dx*64;
  153. dzdx = fx_dz_dx;
  154. l = fx_l;
  155. dldx = fx_dl_dx;
  156. dest = dest_row_data;
  157. if (!Transparency_on) {
  158. for (x=loop_count; x >= 0; x-- ) {
  159. *dest++ = gr_fade_table[ (l&(0xff00)) + (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
  160. l += dldx;
  161. u += dudx;
  162. v += dvdx;
  163. z += dzdx;
  164. }
  165. } else {
  166. for (x=loop_count; x >= 0; x-- ) {
  167. c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  168. if ( c!=255)
  169. *dest = gr_fade_table[ (l&(0xff00)) + c ];
  170. dest++;
  171. l += dldx;
  172. u += dudx;
  173. v += dvdx;
  174. z += dzdx;
  175. }
  176. }
  177. }
  178. #define zonk 1
  179. void c_tmap_scanline_editor()
  180. {
  181. ubyte *dest;
  182. uint c;
  183. int x;
  184. fix u,v,z,dudx, dvdx, dzdx;
  185. u = fx_u;
  186. v = fx_v*64;
  187. z = fx_z;
  188. dudx = fx_du_dx;
  189. dvdx = fx_dv_dx*64;
  190. dzdx = fx_dz_dx;
  191. dest = dest_row_data;
  192. if (!Transparency_on) {
  193. for (x=loop_count; x >= 0; x-- ) {
  194. *dest++ = zonk;
  195. //(uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  196. u += dudx;
  197. v += dvdx;
  198. z += dzdx;
  199. }
  200. } else {
  201. for (x=loop_count; x >= 0; x-- ) {
  202. c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  203. if ( c!=255)
  204. *dest = zonk;
  205. dest++;
  206. u += dudx;
  207. v += dvdx;
  208. z += dzdx;
  209. }
  210. }
  211. }