Mercurial > sdl-ios-xcode
view src/video/cybergfx/SDL_cgxaccel.c @ 1438:1f4f09641645
Date: Sun, 26 Feb 2006 11:25:09 +0900
From: Hayashi Naoyuki
Subject: Re: [SDL] CVS stable again, please update SDL ports
Some problems are caused on Tru64 UNIX.
If applying SDL12-osf1.path, these problems are fixed.
1. configure-script say "recursive mutexes... no" and "pthread
semaphores... no".
checking for pthreads... yes
checking for recursive mutexes... no
checking for pthread semaphores... no
This is because it compiled without pthread_cflags and pthread_lib when
checking recursive mutexes and pthread semaphores.
2. Compiling src/audio/mme/SDL_mmeaudio.c fails.
cc: Severe: ./src/audio/mme/SDL_mmeaudio.c, line 25: Cannot find file
<mme_api.h> specified in #include directive. (noinclfilef)
#include <mme_api.h>
-^
This is because BUILD_CFLAGS is wrong.
3. Compiling src/cdrom/osf/SDL_syscdrom.c fails.
cc: Warning: ./src/cdrom/osf/SDL_syscdrom.c, line 176: Too few actual
parameters in the invocation of the macro "SDL_stack_alloc". (toofewactuals)
cdpath = SDL_stack_alloc(len);
------------------------------------^
cc: Error: ./src/cdrom/osf/SDL_syscdrom.c, line 176: Invalid expression.
(badexpr)
cdpath = SDL_stack_alloc(len);
-----------------^
SDL_stack_alloc is defined in include/SDL_stdinc.h.
#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*count)
4. Linking fails if running configure with --enable-x11-shared=yes.
/usr/ccs/bin/ld:
Warning: Unresolved:
p_XData32
5. Compiling src/video/x11/SDL_x11dyn.c fails if running configure with
--enable-x11-shared=no.
cc: Error: ./src/video/x11/SDL_x11sym.h, line 149: In this statement,
"_SmtBufferOverflow" is not declared. (undeclared)
SDL_X11_SYM(1,void,_SmtBufferOverflow,(Display *dpy,register smtDisplayPtr))
^
cc: Error: ./src/video/x11/SDL_x11sym.h, line 150: In this statement,
"_SmtBufferOverflow" is not declared. (undeclared)
SDL_X11_SYM(1,void,_SmtBufferOverflow,(Display *dpy,register smtDisplayPtr))
^
cc: Error: ./src/video/x11/SDL_x11sym.h, line 150: In this statement,
"_SmtIpError" is not declared. (undeclared)
SDL_X11_SYM(1,void,_SmtIpError,(Display *dpy,register smtDisplayPtr, int))
^
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 26 Feb 2006 04:54:01 +0000 |
parents | d910939febfa |
children | 782fd950bd46 c121d94672cb |
line wrap: on
line source
/* SDL - Simple DirectMedia Layer Copyright (C) 1997-2006 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Sam Lantinga slouken@libsdl.org */ #include "SDL_config.h" #include "SDL_endian.h" #include "SDL_video.h" #include "../SDL_sysvideo.h" #include "../SDL_blit.h" #include "SDL_cgxvideo.h" static int CGX_HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); // These are needed to avoid register troubles with gcc -O2! #if defined(__SASC) || defined(__PPC__) || defined(MORPHOS) #define BMKBRP(a,b,c,d,e,f,g,h,i,j) BltMaskBitMapRastPort(a,b,c,d,e,f,g,h,i,j) #define BBRP(a,b,c,d,e,f,g,h,i) BltBitMapRastPort(a,b,c,d,e,f,g,h,i) #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) #else void BMKBRP(struct BitMap *a,WORD b, WORD c,struct RastPort *d,WORD e,WORD f,WORD g,WORD h,UBYTE i,APTR j) {BltMaskBitMapRastPort(a,b,c,d,e,f,g,h,i,j);} void BBRP(struct BitMap *a,WORD b, WORD c,struct RastPort *d,WORD e,WORD f,WORD g,WORD h,UBYTE i) {BltBitMapRastPort(a,b,c,d,e,f,g,h,i);} void 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) {BltBitMap(a,b,c,d,e,f,g,h,i,j,k);} #endif int CGX_SetHWColorKey(_THIS,SDL_Surface *surface, Uint32 key) { if(surface->hwdata) { if(surface->hwdata->mask) SDL_free(surface->hwdata->mask); if(surface->hwdata->mask=SDL_malloc(RASSIZE(surface->w,surface->h))) { Uint32 pitch,ok=0; APTR lock; SDL_memset(surface->hwdata->mask,255,RASSIZE(surface->w,surface->h)); 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)); if(lock=LockBitMapTags(surface->hwdata->bmap,LBMI_BASEADDRESS,(ULONG)&surface->pixels, LBMI_BYTESPERROW,(ULONG)&pitch,TAG_DONE)) { switch(surface->format->BytesPerPixel) { case 1: { unsigned char k=key; register int i,j,t; register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; pitch-=surface->w; for(i=0;i<surface->h;i++) { for(t=128,j=0;j<surface->w;j++) { if(*map==k) *dest&=~t; t>>=1; if(t==0) { dest++; t=128; } map++; } map+=pitch; } } break; case 2: { Uint16 k=key,*mapw; register int i,j,t; register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; for(i=surface->h;i;--i) { mapw=(Uint16 *)map; for(t=128,j=surface->w;j;--j) { if(*mapw==k) *dest&=~t; t>>=1; if(t==0) { dest++; t=128; } mapw++; } map+=pitch; } } break; case 4: { Uint32 *mapl; register int i,j,t; register unsigned char *dest=surface->hwdata->mask,*map=surface->pixels; for(i=surface->h;i;--i) { mapl=(Uint32 *)map; for(t=128,j=surface->w;j;--j) { if(*mapl==key) *dest&=~t; t>>=1; if(t==0) { dest++; t=128; } mapl++; } map+=pitch; } } break; default: D(bug("Pixel mode non supported for color key...")); SDL_free(surface->hwdata->mask); surface->hwdata->mask=NULL; ok=-1; } UnLockBitMap(lock); D(bug("...Colorkey built!\n")); return ok; } } } D(bug("HW colorkey not supported for this depth\n")); return -1; } int CGX_CheckHWBlit(_THIS,SDL_Surface *src,SDL_Surface *dst) { // Doesn't support yet alpha blitting if(src->hwdata&& !(src->flags & (SDL_SRCALPHA))) { D(bug("CheckHW blit... OK!\n")); if ( (src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY ) { if ( CGX_SetHWColorKey(this, src, src->format->colorkey) < 0 ) { src->flags &= ~SDL_HWACCEL; return -1; } } src->flags|=SDL_HWACCEL; src->map->hw_blit = CGX_HWAccelBlit; return 1; } else src->flags &= ~SDL_HWACCEL; D(bug("CheckHW blit... NO!\n")); return 0; } static int temprp_init=0; static struct RastPort temprp; static int CGX_HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect) { struct SDL_VideoDevice *this=src->hwdata->videodata; // D(bug("Accel blit!\n")); if(src->flags&SDL_SRCCOLORKEY && src->hwdata->mask) { if(dst==SDL_VideoSurface) { BMKBRP(src->hwdata->bmap,srcrect->x,srcrect->y, SDL_RastPort,dstrect->x+SDL_Window->BorderLeft,dstrect->y+SDL_Window->BorderTop, srcrect->w,srcrect->h,0xc0,src->hwdata->mask); } else if(dst->hwdata) { if(!temprp_init) { InitRastPort(&temprp); temprp_init=1; } temprp.BitMap=(struct BitMap *)dst->hwdata->bmap; BMKBRP(src->hwdata->bmap,srcrect->x,srcrect->y, &temprp,dstrect->x,dstrect->y, srcrect->w,srcrect->h,0xc0,src->hwdata->mask); } } else if(dst==SDL_VideoSurface) { 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); } else if(dst->hwdata) BBB(src->hwdata->bmap,srcrect->x,srcrect->y,dst->hwdata->bmap,dstrect->x,dstrect->y,srcrect->w,srcrect->h,0xc0,0xff,NULL); return 0; } int CGX_FillHWRect(_THIS,SDL_Surface *dst,SDL_Rect *dstrect,Uint32 color) { if(dst==SDL_VideoSurface) { FillPixelArray(SDL_RastPort,dstrect->x+SDL_Window->BorderLeft,dstrect->y+SDL_Window->BorderTop,dstrect->w,dstrect->h,color); } else if(dst->hwdata) { if(!temprp_init) { InitRastPort(&temprp); temprp_init=1; } temprp.BitMap=(struct BitMap *)dst->hwdata->bmap; FillPixelArray(&temprp,dstrect->x,dstrect->y,dstrect->w,dstrect->h,color); } return 0; }