SCANLINE.C 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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/2d/rcs/scanline.c $
  15. * $Revision: 1.7 $
  16. * $Author: john $
  17. * $Date: 1994/11/18 22:50:48 $
  18. *
  19. * Graphical routines for drawing solid scanlines.
  20. *
  21. * $Log: scanline.c $
  22. * Revision 1.7 1994/11/18 22:50:48 john
  23. * Changed a bunch of shorts to ints in calls.
  24. *
  25. * Revision 1.6 1994/09/02 11:40:32 john
  26. * fixed bug with urect scanline drakening still
  27. * only using 16 levels of fade.
  28. *
  29. * Revision 1.5 1994/04/08 16:59:12 john
  30. * Add fading poly's; Made palette fade 32 instead of 16.
  31. *
  32. * Revision 1.4 1994/03/22 18:36:27 john
  33. * Added darkening scanlines
  34. *
  35. * Revision 1.3 1993/10/15 16:22:52 john
  36. * y
  37. *
  38. * Revision 1.2 1993/09/08 11:56:29 john
  39. * neatened
  40. *
  41. * Revision 1.1 1993/09/08 11:44:27 john
  42. * Initial revision
  43. *
  44. *
  45. */
  46. #include "mem.h"
  47. #include "gr.h"
  48. #include "grdef.h"
  49. int Gr_scanline_darkening_level = GR_FADE_LEVELS;
  50. void gr_linear_darken( ubyte * dest, int darkening_level, int count, ubyte * fade_table );
  51. #pragma aux gr_linear_darken parm [edi] [eax] [ecx] [edx] modify exact [eax ebx ecx edx edi] = \
  52. " xor ebx, ebx " \
  53. " mov bh, al " \
  54. "gld_loop: mov bl, [edi] " \
  55. " mov al, [ebx+edx] " \
  56. " mov [edi], al " \
  57. " inc edi " \
  58. " dec ecx " \
  59. " jnz gld_loop "
  60. void gr_uscanline( int x1, int x2, int y )
  61. {
  62. if (Gr_scanline_darkening_level >= GR_FADE_LEVELS ) {
  63. switch(TYPE)
  64. {
  65. case BM_LINEAR:
  66. gr_linear_stosd( DATA + ROWSIZE*y + x1, COLOR, x2-x1+1);
  67. break;
  68. case BM_MODEX:
  69. gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  70. break;
  71. case BM_SVGA:
  72. gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  73. break;
  74. }
  75. } else {
  76. switch(TYPE)
  77. {
  78. case BM_LINEAR:
  79. gr_linear_darken( DATA + ROWSIZE*y + x1, Gr_scanline_darkening_level, x2-x1+1, gr_fade_table);
  80. break;
  81. case BM_MODEX:
  82. gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  83. break;
  84. case BM_SVGA:
  85. gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  86. break;
  87. }
  88. }
  89. }
  90. void gr_scanline( int x1, int x2, int y )
  91. {
  92. if ((y<0)||(y>MAXY)) return;
  93. if (x2 < x1 ) x2 ^= x1 ^= x2;
  94. if (x1 > MAXX) return;
  95. if (x2 < MINX) return;
  96. if (x1 < MINX) x1 = MINX;
  97. if (x2 > MAXX) x2 = MAXX;
  98. if (Gr_scanline_darkening_level >= GR_FADE_LEVELS ) {
  99. switch(TYPE)
  100. {
  101. case BM_LINEAR:
  102. gr_linear_stosd( DATA + ROWSIZE*y + x1, COLOR, x2-x1+1);
  103. break;
  104. case BM_MODEX:
  105. gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  106. break;
  107. case BM_SVGA:
  108. gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  109. break;
  110. }
  111. } else {
  112. switch(TYPE)
  113. {
  114. case BM_LINEAR:
  115. gr_linear_darken( DATA + ROWSIZE*y + x1, Gr_scanline_darkening_level, x2-x1+1, gr_fade_table);
  116. break;
  117. case BM_MODEX:
  118. gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  119. break;
  120. case BM_SVGA:
  121. gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  122. break;
  123. }
  124. }
  125. }
  126.