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