⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdl_cgximage.c

📁 Simple DirectMedia Layer - Simple DirectMedia Layer 是一个跨平台的多媒体库设计用来提供快速图形framebuffer和音频驱动。应用MPEG为软件
💻 C
📖 第 1 页 / 共 2 页
字号:
			}			WLUT(this->screen->pixels,rects[i].x, rects[i].y,this->screen->pitch,					SDL_RastPort,SDL_XPixels,SDL_Window->BorderLeft+rects[i].x,SDL_Window->BorderTop+rects[i].y,					rects[i].w,rects[i].h,CTABFMT_XRGB8);		}#else		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,&bm_address,								LBMI_BYTESPERROW,&destpitch,TAG_DONE))		{			int srcwidth;			unsigned char *destbase;			register int j,k,t;			register unsigned char *mask,*dst;			register unsigned char *src,*dest;// Aggiungo il bordo della finestra se sono fullscreen.			if(currently_fullscreen)				destbase=bm_address;			else				destbase=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			for ( i=0; i<numrects; ++i ) 			{				srcwidth=rects[i].w;				if ( !srcwidth ) { /* Clipped? */					continue;				}				dest=destbase+rects[i].x*this->hidden->BytesPerPixel;				dest+=(rects[i].y*destpitch);				src=((char *)(this->screen->pixels))+rects[i].x;				src+=(rects[i].y*this->screen->pitch);								for(j=rects[i].h;j;--j)				{					dst=dest;// SLOW routine, used for 8->24 bit mapping					for(k=0;k<srcwidth;k++)					{						mask=(unsigned char *)(&SDL_XPixels[src[k]]);						for(t=0;t<bpp;t++)						{							dst[t]=mask[t];						}						dst+=bpp;					}					src+=this->screen->pitch;					dest+=destpitch;				}			}			UnLockBitMap(handle);		}	}	else if (customroutine==3)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,&bm_address,								LBMI_BYTESPERROW,&destpitch,TAG_DONE))		{			int srcwidth;			unsigned char *destbase;			register int j,k;			register unsigned char *src,*dest;			register Uint16 *destl,*srcl;			if(currently_fullscreen)				destbase=bm_address;			else				destbase=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			for ( i=0; i<numrects; ++i ) 			{				srcwidth=rects[i].w;				if ( !srcwidth ) { /* Clipped? */					continue;				}				dest=destbase+rects[i].x*this->hidden->BytesPerPixel;				dest+=(rects[i].y*destpitch);				src=((char *)(this->screen->pixels))+rects[i].x;				src+=(rects[i].y*this->screen->pitch);				// This is the fast, well not too slow, remapping code for 16bit displays				for(j=rects[i].h;j;--j)				{					destl=(Uint16 *)dest;					for(k=0;k<srcwidth;k++)					{						srcl=(Uint16 *)&SDL_XPixels[src[k]];						*destl=*srcl;						destl++;					}					src+=this->screen->pitch;					dest+=destpitch;				}			}			UnLockBitMap(handle);		}	}	else if (customroutine==4)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,&bm_address,								LBMI_BYTESPERROW,&destpitch,TAG_DONE))		{			int srcwidth;			unsigned char *destbase;			register int j,k;			register unsigned char *src,*dest;			register Uint32 *destl,*srcl;			if(currently_fullscreen)				destbase=bm_address;			else				destbase=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			for ( i=0; i<numrects; ++i ) 			{				srcwidth=rects[i].w;				if ( !srcwidth ) { /* Clipped? */					continue;				}				dest=destbase+rects[i].x*this->hidden->BytesPerPixel;				dest+=(rects[i].y*destpitch);				src=((char *)(this->screen->pixels))+rects[i].x;				src+=(rects[i].y*this->screen->pitch);				// This is the fast, well not too slow, remapping code for 32bit displays				for(j=rects[i].h;j;--j)				{					destl=(Uint32 *)dest;					for(k=0;k<srcwidth;k++)					{						srcl=(Uint32 *)&SDL_XPixels[src[k]];						*destl=*srcl;						destl++;					}					src+=this->screen->pitch;					dest+=destpitch;				}			}			UnLockBitMap(handle);		}#endif	}	else if(customroutine)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;//		D(bug("Using customroutine!\n"));		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,(ULONG)&bm_address,								LBMI_BYTESPERROW,(ULONG)&destpitch,TAG_DONE))		{			unsigned char *destbase;			register int j,srcwidth;			register unsigned char *src,*dest;// Aggiungo il bordo della finestra se sono fullscreen.			if(currently_fullscreen)				destbase=bm_address;			else				destbase=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->screen->format->BytesPerPixel;			for ( i=0; i<numrects; ++i ) 			{				srcwidth=rects[i].w;				if ( !srcwidth ) { /* Clipped? */					continue;				}				dest=destbase+rects[i].x*this->screen->format->BytesPerPixel;				dest+=(rects[i].y*destpitch);				src=((char *)(this->screen->pixels))+rects[i].x*this->screen->format->BytesPerPixel;				src+=(rects[i].y*this->screen->pitch);								srcwidth*=this->screen->format->BytesPerPixel;//				D(bug("Rects: %ld,%ld %ld,%ld Src:%lx Dest:%lx\n",rects[i].x,rects[i].y,rects[i].w,rects[i].h,src,dest));				for(j=rects[i].h;j;--j)				{					memcpy(dest,src,srcwidth);					src+=this->screen->pitch;					dest+=destpitch;				}			}			UnLockBitMap(handle);//			D(bug("Rectblit addr: %lx pitch: %ld rects:%ld srcptr: %lx srcpitch: %ld\n",bm_address,destpitch,numrects,this->screen->pixels,this->screen->pitch));		}	}	else	{		for ( i=0; i<numrects; ++i ) {			if ( ! rects[i].w ) { /* Clipped? */				continue;			}			USE_WPA(this->screen->pixels,rects[i].x, rects[i].y,this->screen->pitch,					SDL_RastPort,SDL_Window->BorderLeft+rects[i].x,SDL_Window->BorderTop+rects[i].y,					rects[i].w,rects[i].h,format);		}	}}void CGX_RefreshDisplay(_THIS){	int format,customroutine=0;#ifndef USE_CGX_WRITELUTPIXEL	int bpp;#endif	/* Don't refresh a display that doesn't have an image (like GL) */	if ( ! SDL_Ximage ) {		return;	}	if(this->hidden->same_format && !use_picasso96)	{		format=RECTFMT_RAW;	}	else switch(this->screen->format->BytesPerPixel)	{		case 4:			format=RECTFMT_RGBA;			break;		case 3:			format=RECTFMT_RGB;			break;		case 2:			customroutine=1;			break;		case 1://			D(bug("soft depth: 8 hardbpp: %ld\n",this->hidden->depth));			if(this->hidden->depth>8)			{#ifndef USE_CGX_WRITELUTPIXEL				if(this->hidden->depth>32)					customroutine=4;				else if(this->hidden->depth>16)				{					bpp=this->hidden->BytesPerPixel; // That one is the only one that needs bpp					customroutine=2; // The slow one!				}				else					customroutine=3;#else				customroutine=2;#endif//				format=RECTFMT_LUT8;			}			else				customroutine=1;			break;	}		/* Check for endian-swapped X server, swap if necessary */	if ( swap_pixels &&	     ((this->screen->format->BytesPerPixel%2) == 0) ) {		CGX_SwapAllPixels(this->screen);		USE_WPA(this->screen->pixels,0,0,this->screen->pitch,				SDL_RastPort,SDL_Window->BorderLeft,SDL_Window->BorderTop,				this->screen->w,this->screen->h,format);		CGX_SwapAllPixels(this->screen);	}	else if (customroutine==2)	{#ifdef USE_CGX_WRITELUTPIXEL		WLUT(this->screen->pixels,0,0,this->screen->pitch,					SDL_RastPort,SDL_XPixels,SDL_Window->BorderLeft,SDL_Window->BorderTop,					this->screen->w,this->screen->h,CTABFMT_XRGB8);#else		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,(ULONG)&bm_address,								LBMI_BYTESPERROW,(ULONG)&destpitch,TAG_DONE))		{			register int j,k,t;			register unsigned char *mask,*dst;			register unsigned char *src,*dest;// Aggiungo il bordo della finestra se sono fullscreen.			if(!currently_fullscreen)				dest=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			else				dest=bm_address;			src=this->screen->pixels;							for(j=this->screen->h;j;--j)			{				dst=dest;// SLOW routine, used for 8->24 bit mapping				for(k=0;k<this->screen->w;k++)				{					mask=(unsigned char *)(&SDL_XPixels[src[k]]);					for(t=0;t<bpp;t++)					{						dst[t]=mask[t];					}					dst+=bpp;				}				src+=this->screen->pitch;				dest+=destpitch;			}			UnLockBitMap(handle);		}	}	else if (customroutine==3)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,(ULONG)&bm_address,								LBMI_BYTESPERROW,(ULONG)&destpitch,TAG_DONE))		{			register int j,k;			register unsigned char *src,*dest;			register Uint16 *destl,*srcl;			if(!currently_fullscreen)				dest=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			else				dest=bm_address;			src=this->screen->pixels;				// This is the fast, well not too slow, remapping code for 16bit displays			for(j=this->screen->h;j;--j)			{				destl=(Uint16 *)dest;				for(k=0;k<this->screen->w;k++)				{					srcl=(Uint16 *)&SDL_XPixels[src[k]];					*destl=*srcl;					destl++;				}				src+=this->screen->pitch;				dest+=destpitch;			}			UnLockBitMap(handle);		}	}	else if (customroutine==4)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,LBMI_BASEADDRESS,(ULONG)&bm_address,								LBMI_BYTESPERROW,(ULONG)&destpitch,TAG_DONE))		{			register int j,k;			register unsigned char *src,*dest;			register Uint32 *destl,*srcl;			if(!currently_fullscreen)				dest=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->hidden->BytesPerPixel;			else				dest=bm_address;			src=this->screen->pixels;				// This is the fast, well not too slow, remapping code for 32bit displays			for(j=this->screen->h;j;--j)			{				destl=(Uint32 *)dest;				for(k=0;k<this->screen->w;k++)				{					srcl=(Uint32 *)&SDL_XPixels[src[k]];					*destl=*srcl;					destl++;				}				src+=this->screen->pitch;				dest+=destpitch;			}			UnLockBitMap(handle);		}#endif	}	else if(customroutine)	{		unsigned char *bm_address;		Uint32	destpitch;		APTR handle;		if(handle=LockBitMapTags(SDL_RastPort->BitMap,					LBMI_BASEADDRESS,(ULONG)&bm_address,					LBMI_BYTESPERROW,(ULONG)&destpitch,TAG_DONE))		{			register int j;			register unsigned char *src,*dest;			if(!currently_fullscreen)				dest=bm_address+(SDL_Window->TopEdge+SDL_Window->BorderTop)*destpitch+(SDL_Window->BorderLeft+SDL_Window->LeftEdge)*this->screen->format->BytesPerPixel;			else				dest=bm_address;			src=this->screen->pixels;				//			D(bug("addr: %lx pitch: %ld src:%lx srcpitch: %ld\n",dest,destpitch,this->screen->pixels,this->screen->pitch));			if(this->screen->pitch==destpitch)			{				memcpy(dest,src,this->screen->pitch*this->screen->h);			}			else			{				for(j=this->screen->h;j;--j)				{					memcpy(dest,src,this->screen->pitch);					src+=this->screen->pitch;					dest+=destpitch;				}			}			UnLockBitMap(handle);		}	}	else	{		USE_WPA(this->screen->pixels,0,0,this->screen->pitch,				SDL_RastPort,SDL_Window->BorderLeft,SDL_Window->BorderTop,				this->screen->w,this->screen->h,format);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -