home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / 2d / scanline.c < prev    next >
Text File  |  1998-06-08  |  4KB  |  138 lines

  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.  
  47. #include "mem.h"
  48.  
  49. #include "gr.h"
  50. #include "grdef.h"
  51.  
  52. int Gr_scanline_darkening_level = GR_FADE_LEVELS;
  53.  
  54. void gr_linear_darken( ubyte * dest, int darkening_level, int count, ubyte * fade_table );
  55. #pragma aux gr_linear_darken parm [edi] [eax] [ecx] [edx] modify exact [eax ebx ecx edx edi] = \
  56. "                    xor    ebx, ebx                    "    \
  57. "                    mov    bh, al                    "  \
  58. "gld_loop:        mov    bl, [edi]                "    \
  59. "                    mov    al, [ebx+edx]            "    \
  60. "                    mov    [edi], al                "    \
  61. "                    inc    edi                        "    \
  62. "                    dec    ecx                        "    \
  63. "                    jnz    gld_loop                    "    
  64.  
  65. void gr_uscanline( int x1, int x2, int y )
  66. {
  67.     if (Gr_scanline_darkening_level >= GR_FADE_LEVELS )    {
  68.         switch(TYPE)
  69.         {
  70.         case BM_LINEAR:
  71.             gr_linear_stosd( DATA + ROWSIZE*y + x1, COLOR, x2-x1+1);
  72.             break;
  73.         case BM_MODEX:
  74.             gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  75.             break;
  76.         case BM_SVGA:
  77.             gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  78.             break;
  79.         }
  80.     } else {
  81.         switch(TYPE)
  82.         {
  83.         case BM_LINEAR:
  84.             gr_linear_darken( DATA + ROWSIZE*y + x1, Gr_scanline_darkening_level, x2-x1+1, gr_fade_table);
  85.             break;
  86.         case BM_MODEX:
  87.             gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  88.             break;
  89.         case BM_SVGA:
  90.             gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  91.             break;
  92.         }
  93.     }
  94. }
  95.  
  96. void gr_scanline( int x1, int x2, int y )
  97. {
  98.     if ((y<0)||(y>MAXY)) return;
  99.  
  100.     if (x2 < x1 ) x2 ^= x1 ^= x2;
  101.  
  102.     if (x1 > MAXX) return;
  103.     if (x2 < MINX) return;
  104.  
  105.     if (x1 < MINX) x1 = MINX;
  106.     if (x2 > MAXX) x2 = MAXX;
  107.  
  108.     if (Gr_scanline_darkening_level >= GR_FADE_LEVELS )    {
  109.         switch(TYPE)
  110.         {
  111.         case BM_LINEAR:
  112.             gr_linear_stosd( DATA + ROWSIZE*y + x1, COLOR, x2-x1+1);
  113.             break;
  114.         case BM_MODEX:
  115.             gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  116.             break;
  117.         case BM_SVGA:
  118.             gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  119.             break;
  120.         }
  121.     } else {
  122.         switch(TYPE)
  123.         {
  124.         case BM_LINEAR:
  125.             gr_linear_darken( DATA + ROWSIZE*y + x1, Gr_scanline_darkening_level, x2-x1+1, gr_fade_table);
  126.             break;
  127.         case BM_MODEX:
  128.             gr_modex_uscanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  129.             break;
  130.         case BM_SVGA:
  131.             gr_vesa_scanline( x1+XOFFSET, x2+XOFFSET, y+YOFFSET, COLOR );
  132.             break;
  133.         }
  134.     }
  135. }
  136.  
  137. 
  138.