146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997-2006 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Lesser General Public 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2.1 of the License, or (at your option) any later version. 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Lesser General Public License for more details. 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Lesser General Public 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free Software 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h" 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_endian.h" 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_video.h" 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_sysvideo.h" 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_blit.h" 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_cgxvideo.h" 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic int CGX_HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Surface *dst, SDL_Rect *dstrect); 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner// These are needed to avoid register troubles with gcc -O2! 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__SASC) || defined(__PPC__) || defined(MORPHOS) 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define BMKBRP(a,b,c,d,e,f,g,h,i,j) BltMaskBitMapRastPort(a,b,c,d,e,f,g,h,i,j) 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define BBRP(a,b,c,d,e,f,g,h,i) BltBitMapRastPort(a,b,c,d,e,f,g,h,i) 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define BBB(a,b,c,d,e,f,g,h,i,j,k) BltBitMap(a,b,c,d,e,f,g,h,i,j,k) 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#else 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid BMKBRP(struct BitMap *a,WORD b, WORD c,struct RastPort *d,WORD e,WORD f,WORD g,WORD h,UBYTE i,APTR j) 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{BltMaskBitMapRastPort(a,b,c,d,e,f,g,h,i,j);} 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid BBRP(struct BitMap *a,WORD b, WORD c,struct RastPort *d,WORD e,WORD f,WORD g,WORD h,UBYTE i) 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{BltBitMapRastPort(a,b,c,d,e,f,g,h,i);} 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnervoid BBB(struct BitMap *a,WORD b, WORD c,struct BitMap *d,WORD e,WORD f,WORD g,WORD h,UBYTE i,UBYTE j,UWORD *k) 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{BltBitMap(a,b,c,d,e,f,g,h,i,j,k);} 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint CGX_SetHWColorKey(_THIS,SDL_Surface *surface, Uint32 key) 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(surface->hwdata) 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(surface->hwdata->mask) 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_free(surface->hwdata->mask); 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(surface->hwdata->mask=SDL_malloc(RASSIZE(surface->w,surface->h))) 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Uint32 pitch,ok=0; 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner APTR lock; 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_memset(surface->hwdata->mask,255,RASSIZE(surface->w,surface->h)); 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("Building colorkey mask: color: %ld, size: %ld x %ld, %ld bytes...Bpp:%ld\n",key,surface->w,surface->h,RASSIZE(surface->w,surface->h),surface->format->BytesPerPixel)); 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(lock=LockBitMapTags(surface->hwdata->bmap,LBMI_BASEADDRESS,(ULONG)&surface->pixels, 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner LBMI_BYTESPERROW,(ULONG)&pitch,TAG_DONE)) 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner switch(surface->format->BytesPerPixel) 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 1: 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner unsigned char k=key; 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register int i,j,t; 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner pitch-=surface->w; 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(i=0;i<surface->h;i++) 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(t=128,j=0;j<surface->w;j++) 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(*map==k) 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *dest&=~t; 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t>>=1; 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(t==0) 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner dest++; 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t=128; 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner map++; 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner map+=pitch; 9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break; 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 2: 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Uint16 k=key,*mapw; 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register int i,j,t; 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(i=surface->h;i;--i) 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mapw=(Uint16 *)map; 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(t=128,j=surface->w;j;--j) 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(*mapw==k) 11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *dest&=~t; 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t>>=1; 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(t==0) 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner dest++; 11946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t=128; 12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mapw++; 12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner map+=pitch; 12446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break; 12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner case 4: 12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Uint32 *mapl; 13046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register int i,j,t; 13146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; 13246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 13346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(i=surface->h;i;--i) 13446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 13546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mapl=(Uint32 *)map; 13646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 13746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner for(t=128,j=surface->w;j;--j) 13846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 13946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(*mapl==key) 14046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner *dest&=~t; 14146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t>>=1; 14346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 14446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(t==0) 14546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 14646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner dest++; 14746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner t=128; 14846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 14946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mapl++; 15046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 15146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner map+=pitch; 15246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 15346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 15446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 15546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner break; 15646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner default: 15746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("Pixel mode non supported for color key...")); 15846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_free(surface->hwdata->mask); 15946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner surface->hwdata->mask=NULL; 16046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner ok=-1; 16146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 16246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner UnLockBitMap(lock); 16346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("...Colorkey built!\n")); 16446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return ok; 16546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 16646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 16746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 16846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("HW colorkey not supported for this depth\n")); 16946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return -1; 17146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 17246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint CGX_CheckHWBlit(_THIS,SDL_Surface *src,SDL_Surface *dst) 17446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 17546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner// Doesn't support yet alpha blitting 17646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 17746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(src->hwdata&& !(src->flags & (SDL_SRCALPHA))) 17846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 17946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("CheckHW blit... OK!\n")); 18046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 18146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( (src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY ) { 18246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if ( CGX_SetHWColorKey(this, src, src->format->colorkey) < 0 ) { 18346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner src->flags &= ~SDL_HWACCEL; 18446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return -1; 18546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 18646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 18746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 18846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner src->flags|=SDL_HWACCEL; 18946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner src->map->hw_blit = CGX_HWAccelBlit; 19046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 1; 19146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 19246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else 19346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner src->flags &= ~SDL_HWACCEL; 19446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner D(bug("CheckHW blit... NO!\n")); 19646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 19746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 0; 19846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 19946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic int temprp_init=0; 20146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic struct RastPort temprp; 20246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstatic int CGX_HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, 20446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_Surface *dst, SDL_Rect *dstrect) 20546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 20646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner struct SDL_VideoDevice *this=src->hwdata->videodata; 20746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 20846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner// D(bug("Accel blit!\n")); 20946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 21046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(src->flags&SDL_SRCCOLORKEY && src->hwdata->mask) 21146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 21246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(dst==SDL_VideoSurface) 21346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 21446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner BMKBRP(src->hwdata->bmap,srcrect->x,srcrect->y, 21546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_RastPort,dstrect->x+SDL_Window->BorderLeft,dstrect->y+SDL_Window->BorderTop, 21646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner srcrect->w,srcrect->h,0xc0,src->hwdata->mask); 21746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 21846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else if(dst->hwdata) 21946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 22046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(!temprp_init) 22146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 22246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner InitRastPort(&temprp); 22346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner temprp_init=1; 22446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 22546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner temprp.BitMap=(struct BitMap *)dst->hwdata->bmap; 22646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 22746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner BMKBRP(src->hwdata->bmap,srcrect->x,srcrect->y, 22846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner &temprp,dstrect->x,dstrect->y, 22946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner srcrect->w,srcrect->h,0xc0,src->hwdata->mask); 23046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 23146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 23246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 23346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else if(dst==SDL_VideoSurface) 23446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 23546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner BBRP(src->hwdata->bmap,srcrect->x,srcrect->y,SDL_RastPort,dstrect->x+SDL_Window->BorderLeft,dstrect->y+SDL_Window->BorderTop,srcrect->w,srcrect->h,0xc0); 23646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 23746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else if(dst->hwdata) 23846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner BBB(src->hwdata->bmap,srcrect->x,srcrect->y,dst->hwdata->bmap,dstrect->x,dstrect->y,srcrect->w,srcrect->h,0xc0,0xff,NULL); 23946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 24046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 0; 24146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 24246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 24346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerint CGX_FillHWRect(_THIS,SDL_Surface *dst,SDL_Rect *dstrect,Uint32 color) 24446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner{ 24546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(dst==SDL_VideoSurface) 24646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 24746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner FillPixelArray(SDL_RastPort,dstrect->x+SDL_Window->BorderLeft,dstrect->y+SDL_Window->BorderTop,dstrect->w,dstrect->h,color); 24846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 24946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner else if(dst->hwdata) 25046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 25146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner if(!temprp_init) 25246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 25346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner InitRastPort(&temprp); 25446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner temprp_init=1; 25546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 25646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 25746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner temprp.BitMap=(struct BitMap *)dst->hwdata->bmap; 25846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 25946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner FillPixelArray(&temprp,dstrect->x,dstrect->y,dstrect->w,dstrect->h,color); 26046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 26146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return 0; 26246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner} 263