SCANLINE.C 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  12. */
  13. /*
  14. * $Source: f:/miner/source/texmap/rcs/scanline.c $
  15. * $Revision: 1.2 $
  16. * $Author: john $
  17. * $Date: 1995/02/20 18:23:39 $
  18. *
  19. * Routines to draw the texture mapped scanlines.
  20. *
  21. * $Log: scanline.c $
  22. * Revision 1.2 1995/02/20 18:23:39 john
  23. * Added new module for C versions of inner loops.
  24. *
  25. * Revision 1.1 1995/02/20 17:42:27 john
  26. * Initial revision
  27. *
  28. *
  29. */
  30. #pragma off (unreferenced)
  31. static char rcsid[] = "$Id: scanline.c 1.2 1995/02/20 18:23:39 john Exp $";
  32. #pragma on (unreferenced)
  33. #include <math.h>
  34. #include <limits.h>
  35. #include <stdio.h>
  36. #include <conio.h>
  37. #include <stdlib.h>
  38. #include "fix.h"
  39. #include "mono.h"
  40. #include "gr.h"
  41. #include "grdef.h"
  42. #include "texmap.h"
  43. #include "texmapl.h"
  44. #include "scanline.h"
  45. void c_tmap_scanline_flat()
  46. {
  47. ubyte *dest;
  48. int x;
  49. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y ) );
  50. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  51. *dest++ = tmap_flat_color;
  52. }
  53. }
  54. void c_tmap_scanline_shaded()
  55. {
  56. int fade;
  57. ubyte *dest;
  58. int x;
  59. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
  60. fade = tmap_flat_shade_value<<8;
  61. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  62. *dest++ = gr_fade_table[ fade |(*dest)];
  63. }
  64. }
  65. void c_tmap_scanline_lin_nolight()
  66. {
  67. ubyte *dest;
  68. uint c;
  69. int x;
  70. fix u,v,dudx, dvdx;
  71. u = fx_u;
  72. v = fx_v*64;
  73. dudx = fx_du_dx;
  74. dvdx = fx_dv_dx*64;
  75. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
  76. if (!Transparency_on) {
  77. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  78. *dest++ = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  79. u += dudx;
  80. v += dvdx;
  81. }
  82. } else {
  83. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  84. c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  85. if ( c!=255)
  86. *dest = c;
  87. dest++;
  88. u += dudx;
  89. v += dvdx;
  90. }
  91. }
  92. }
  93. void c_tmap_scanline_lin()
  94. {
  95. ubyte *dest;
  96. uint c;
  97. int x;
  98. fix u,v,l,dudx, dvdx, dldx;
  99. u = fx_u;
  100. v = fx_v*64;
  101. dudx = fx_du_dx;
  102. dvdx = fx_dv_dx*64;
  103. l = fx_l>>8;
  104. dldx = fx_dl_dx>>8;
  105. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
  106. if (!Transparency_on) {
  107. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  108. *dest++ = gr_fade_table[ (l&(0xff00)) + (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ] ];
  109. l += dldx;
  110. u += dudx;
  111. v += dvdx;
  112. }
  113. } else {
  114. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  115. c = (uint)pixptr[ (f2i(v)&(64*63)) + (f2i(u)&63) ];
  116. if ( c!=255)
  117. *dest = gr_fade_table[ (l&(0xff00)) + c ];
  118. dest++;
  119. l += dldx;
  120. u += dudx;
  121. v += dvdx;
  122. }
  123. }
  124. }
  125. void c_tmap_scanline_per_nolight()
  126. {
  127. ubyte *dest;
  128. uint c;
  129. int x;
  130. fix u,v,z,dudx, dvdx, dzdx;
  131. u = fx_u;
  132. v = fx_v*64;
  133. z = fx_z;
  134. dudx = fx_du_dx;
  135. dvdx = fx_dv_dx*64;
  136. dzdx = fx_dz_dx;
  137. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
  138. if (!Transparency_on) {
  139. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  140. *dest++ = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  141. u += dudx;
  142. v += dvdx;
  143. z += dzdx;
  144. }
  145. } else {
  146. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  147. c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  148. if ( c!=255)
  149. *dest = c;
  150. dest++;
  151. u += dudx;
  152. v += dvdx;
  153. z += dzdx;
  154. }
  155. }
  156. }
  157. void c_tmap_scanline_per()
  158. {
  159. ubyte *dest;
  160. uint c;
  161. int x;
  162. fix u,v,z,l,dudx, dvdx, dzdx, dldx;
  163. u = fx_u;
  164. v = fx_v*64;
  165. z = fx_z;
  166. dudx = fx_du_dx;
  167. dvdx = fx_dv_dx*64;
  168. dzdx = fx_dz_dx;
  169. l = fx_l>>8;
  170. dldx = fx_dl_dx>>8;
  171. dest = (ubyte *)(write_buffer + fx_xleft + (bytes_per_row * fx_y) );
  172. if (!Transparency_on) {
  173. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  174. *dest++ = gr_fade_table[ (l&(0xff00)) + (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ] ];
  175. l += dldx;
  176. u += dudx;
  177. v += dvdx;
  178. z += dzdx;
  179. }
  180. } else {
  181. for (x= fx_xright-fx_xleft+1 ; x > 0; --x ) {
  182. c = (uint)pixptr[ ( (v/z)&(64*63) ) + ((u/z)&63) ];
  183. if ( c!=255)
  184. *dest = gr_fade_table[ (l&(0xff00)) + c ];
  185. dest++;
  186. l += dldx;
  187. u += dudx;
  188. v += dvdx;
  189. z += dzdx;
  190. }
  191. }
  192. }
  193.