home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / mesa-1.2.8 / mondello / clrtemp.h < prev    next >
C/C++ Source or Header  |  1996-05-27  |  3KB  |  94 lines

  1. /*  clrtemp.h  -- template for clearArea functions 
  2.  *
  3.  *  #define's
  4.  *    INDEX    in color indexed mode
  5.  *    RGBA     in rgba mode
  6.  */
  7.  
  8. #ifdef RGBA 
  9. {
  10.    int r1, r2;                    
  11.    int y_count;
  12.    
  13. #ifdef SETUP
  14.    SETUP
  15. #endif
  16.  
  17. #ifdef DEBUG_clgd547x
  18.    printf("clear: x1=%d, y1=%d, x2=%d, y2=%d\n",cx1,cy1,cx2,cy2); 
  19. #endif
  20.    
  21.    y_count = cy2-cy1;
  22.    r1 = (y_count >> 8) << 24 | (cy1+yoffs) << FRACT;
  23.    r2 = y_count<<24 | 0x1000;
  24.  
  25.    if (r==0 && 0 && r==g && r==b) {  /* r,g,b zero */
  26.       *listPtr++ = SNOP;
  27.       *listPtr++ = load_long_ro(C_AND_A_REG, 1);
  28.       *listPtr++ = 0xffff0000;                  
  29.       *listPtr++ = load_long_ro(MASK_B_REG, 1);
  30.       *listPtr++ = 0xf7ffffff;
  31.       *listPtr++ = load_short_ro(BANK_MASK_REG,RED_BANK|GREEN_BANK|BLUE_BANK);
  32.       *listPtr++ = SNOP;
  33.       *listPtr++ = blit_ro(BLTFZ,PRAMPAT+PATA_PATB+PRAMALF,A_ONLY);  
  34.       *listPtr++ = r1;
  35.       *listPtr++ = r2;
  36.       *listPtr++ = cx1 << FRACT;
  37.       *listPtr++ = (cx2-cx1) << FRACT;
  38.       *listPtr++ = SNOP;
  39.    }
  40.    else if (0 && r==g && r==b) {  /* r,g,b same */
  41.       r &= 0x000000ff;
  42.       
  43.       *listPtr++ = SNOP;
  44.       *listPtr++ = load_long_ro(C_AND_A_REG, 1);
  45.       *listPtr++ = 0xffff0000 | r << 8 | r;                  
  46.       *listPtr++ = load_long_ro(MASK_B_REG, 1);
  47.       *listPtr++ = 0xf7ffffff;
  48.       *listPtr++ = load_short_ro(BANK_MASK_REG,RED_BANK|GREEN_BANK|BLUE_BANK);
  49.       *listPtr++ = SNOP;
  50.       *listPtr++ = blit_ro(BLTFZ,PRAMPAT+PATA_PATB+PRAMALF,A_ONLY);  
  51.       *listPtr++ = r1;
  52.       *listPtr++ = r2;
  53.       *listPtr++ = cx1 << FRACT;
  54.       *listPtr++ = (cx2-cx1) << FRACT;
  55.       *listPtr++ = SNOP;
  56.    }
  57.    else /* r,g,b different */
  58.    {   
  59.       r &= 0x000000ff;
  60.       g &= 0x000000ff;
  61.       b &= 0x000000ff;
  62.       
  63.       *listPtr++ = SNOP;
  64.       *listPtr++ = load_long_ro(C_AND_A_REG, 1);
  65.       *listPtr++ = 0xffff0000 | r << 8 | r;                  
  66.       *listPtr++ = load_long_ro(MASK_B_REG, 1);
  67.       *listPtr++ = 0xf7ffffff;
  68.       *listPtr++ = load_short_ro(BANK_MASK_REG, RED_BANK);
  69.       *listPtr++ = SNOP;
  70.       *listPtr++ = blit_ro(BLTFZ, PRAMPAT+PATA_PATB+PRAMALF,A_ONLY);  
  71.       *listPtr++ = r1;                
  72.       *listPtr++ = r2;                
  73.       *listPtr++ = cx1 << FRACT;                /* r3 */
  74.       *listPtr++ = (cx2-cx1) << FRACT;                /* r4 */
  75.       *listPtr++ = SNOP;
  76.       *listPtr++ = load_long_ro(C_AND_A_REG,1);
  77.       *listPtr++ = 0xffff0000 | g << 8 | g;    
  78.       *listPtr++ = load_short_ro(BANK_MASK_REG, GREEN_BANK);
  79.       *listPtr++ = SNOP;
  80.       *listPtr++ = blit_ro(BLTF,PRAMPAT+PATA_PATB+PRAMALF,A_ONLY) & ~0x7;
  81.       *listPtr++ = SNOP;
  82.       *listPtr++ = load_long_ro(C_AND_A_REG,1);
  83.       *listPtr++ = 0xffff0101 | b << 8 | b;
  84.       *listPtr++ = load_short_ro(BANK_MASK_REG, BLUE_BANK);
  85.       *listPtr++ = SNOP;
  86.       *listPtr++ = blit_ro(BLTF,PRAMPAT+PATA_PATB+PRAMALF,A_ONLY) & ~0x7;
  87.       *listPtr++ = SNOP;
  88.    }
  89.    
  90.    CHKEXEC;
  91. }
  92. #endif
  93.  
  94.