亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sprite_a.cpp

?? 游戲c++開發(fā)簡例
?? CPP
字號:
/* 精靈是一個帶有透明色的 16/15-bit Bitmap,
  任何操作都過濾透明色,并帶有Alpha混合,
  目前Alpha混合僅支持九級
  所有函數(shù)都盡可能使用MMX指令, 為提高速度寬度應(yīng)設(shè)為4的倍數(shù)

  使用前應(yīng)調(diào)用InitSprite( ), 以完成初始化任務(wù) !

  只能在具有MMX技術(shù)的CPU上運行 !
*/

#include "gl.h"
//#include "gengine.h"
#include "sprite.h"

#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

// 透明色, 放入mm7
DWORD dwColorKey;
QWORD qwColorKey;
// 
DWORD dwAlphaMask1, dwAlphaMask2, dwAlphaMask4;
QWORD qwAlphaMask1, qwAlphaMask2, qwAlphaMask4;

static Bitmap* bmp;	//for test 

SpriteBlitAlphaFunc spriteBlitAlpha[9];
SpriteBlitBetaFunc spriteBlitBeta[9];
SpriteBlitAlphaFunc SpriteBlitAlpha;
SpriteBlitBetaFunc SpriteBlitBeta;


int InitSprite( void )
{
	if( screenInfo.colorDepth == 16 ){
		dwColorKey = 0xf81ff81f;
		qwColorKey = 0xf81ff81ff81ff81f;
		dwAlphaMask1 = 0x18e318e3;			// 1/8
		dwAlphaMask2 = 0x39e739e7;			// 1/4
		dwAlphaMask4 = 0x7bef7bef;			// 1/2
		qwAlphaMask1 = 0x18e318e318e318e3;
		qwAlphaMask2 = 0x39e739e739e739e7;
		qwAlphaMask4 = 0x7bef7bef7bef7bef;
	}
	else if( screenInfo.colorDepth == 15 ){
		dwColorKey = 0x7c1f7c1f;
		qwColorKey = 0x7c1f7c1f7c1f7c1f;
		dwAlphaMask1 = 0x0c630c63;
		dwAlphaMask2 = 0x1ce71ce7;
		dwAlphaMask4 = 0x3def3def;
		qwAlphaMask1 = 0x0c630c630c630c63;
		qwAlphaMask2 = 0x1ce71ce71ce71ce7;
		qwAlphaMask4 = 0x3def3def3def3def;
	}
	else
		return -1;

	if( cpu.mmx ){
		spriteBlitAlpha[0] = SpriteBlitAlpha0MMX;
		spriteBlitAlpha[1] = SpriteBlitAlpha1MMX;
		spriteBlitAlpha[2] = SpriteBlitAlpha2MMX;
		spriteBlitAlpha[3] = SpriteBlitAlpha3MMX;
		spriteBlitAlpha[4] = SpriteBlitAlpha4MMX;
		spriteBlitAlpha[5] = SpriteBlitAlpha5MMX;
		spriteBlitAlpha[6] = SpriteBlitAlpha6MMX;
		spriteBlitAlpha[7] = SpriteBlitAlpha7MMX;
		spriteBlitAlpha[8] = SpriteBlitAlpha8MMX;

		spriteBlitBeta[0] = SpriteBlitBeta0MMX;
		spriteBlitBeta[1] = SpriteBlitBeta1MMX;
		spriteBlitBeta[2] = SpriteBlitBeta2MMX;
		spriteBlitBeta[3] = SpriteBlitBeta3MMX;
		spriteBlitBeta[4] = SpriteBlitBeta4MMX;
		spriteBlitBeta[5] = SpriteBlitBeta5MMX;
		spriteBlitBeta[6] = SpriteBlitBeta6MMX;
		spriteBlitBeta[7] = SpriteBlitBeta7MMX;
		spriteBlitBeta[8] = SpriteBlitBeta8MMX;
	}
	SpriteBlitAlpha = spriteBlitAlpha[7];
	SpriteBlitBeta = spriteBlitBeta[7];

	bmp = LoadTga( "test.tga", NULL );
	if( bmp == NULL )
		return -1;

	return 0;
}

void SpriteSetDrawMode( int mode, DWORD degree )
{
	degree = ((degree >> 5) >= 8)? 8 : (degree >> 5 )+1;
	if( mode & Bitmap::AlphaMode )
		SpriteBlitAlpha = spriteBlitAlpha[degree];
	else
		SpriteBlitBeta = spriteBlitBeta[degree];
}

void SpriteBlitAlpha0MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
}

void SpriteBlitAlpha1MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask1;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 1/8 alpha blend;
		psrlw mm1, 3;
		psrlw mm4, 3;
		pand mm1, mm6;
		pand mm4, mm6;
		paddw mm1, mm3;
		movq mm5, mm2;
		psubw mm1, mm4;
		pand mm3, mm5;
		pandn mm2, mm1;
		sub ecx, 4;
		por mm2, mm3;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		shr ax, 3;
		mov bx, dx;
		and ax, word ptr dwAlphaMask1;
		shr dx, 3;
		add ax, bx;
		and dx, word ptr dwAlphaMask1;
		sub ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha2MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask2;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 1/4 alpha blend;
		psrlw mm1, 2;
		psrlw mm4, 2;
		pand mm1, mm6;
		pand mm4, mm6;
		paddw mm1, mm3;
		movq mm5, mm2;
		psubw mm1, mm4;
		pand mm3, mm5;
		pandn mm2, mm1;
		sub ecx, 4;
		por mm2, mm3;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		shr ax, 2;
		mov bx, dx;
		and ax, word ptr dwAlphaMask2;
		shr dx, 2;
		add ax, bx;
		and dx, word ptr dwAlphaMask2;
		sub ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha3MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask2;	// 1/4
		movq mm5, qwAlphaMask1;	// 1/8

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 3/8 alpha blend;
		psrlw mm1, 2;
		psrlw mm3, 2;
		pand mm1, mm6;
		pand mm3, mm6;
		paddw mm1, mm3;
		movq mm0, mm1;
		psrlq mm1, 1;
		paddw mm3, mm0;
		pand mm1, mm5;
		movq mm0, mm2;
		paddw mm1, mm3;
		pand mm0, mm4;
		pandn mm2, mm1;
		sub ecx, 4;
		por mm2, mm0;


#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		shr ax, 2;
		shr dx, 2;
		and ax, word ptr dwAlphaMask2;
		mov bx, ax;
		and dx, word ptr dwAlphaMask2;
		shr bx, 1;
		add ax, dx;
		and bx, word Ptr dwAlphaMask1;
		shr dx, 1;
		add ax, bx;
		and dx, word ptr dwAlphaMask1;
		add ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha4MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;
	
#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask4;	// 1/2

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 1/2 alpha blend;
		psrlw mm0, 1;
		movq mm5, mm2;
		psrlw mm4, 1;
		pand mm0, mm6;
		pand mm4, mm6;
		pand mm3, mm5;
		paddw mm0, mm4;
		pandn mm2, mm0;
		sub ecx, 4;
		por mm2, mm3;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		shr ax, 1;
		mov bx, word ptr dwAlphaMask4;
		shr dx, 1;
		and ax, bx;
		and dx, bx;
		add ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha5MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;
	
#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask2;	// 1/4
		movq mm5, qwAlphaMask1; // 1/8

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 5/8 alpha blend;
		psrlq mm0, 2;
		psrlq mm3, 2;
		pand mm0, mm6;
		pand mm0, mm6;
		paddd mm3, mm0;
		movq mm1, mm3;
		psrlq mm3, 1;
		paddd mm1, mm0;
		pand mm3, mm5;
		movq mm0, mm2;
		paddd mm1, mm3;
		pandn mm2, mm1;
		pand mm4, mm0;
		sub ecx, 4;
		por mm2, mm4;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		shr ax, 1;
		mov bx, word ptr dwAlphaMask4;
		shr dx, 1;
		and ax, bx;
		and dx, bx;
		add ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha6MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask2;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 3/4 alpha blend;
		psrlw mm4, 2;
		psrlw mm1, 2;
		pand mm4, mm6;
		pand mm1, mm6;
		paddw mm0, mm4;
		movq mm5, mm2;
		psubw mm0, mm1;
		pand mm3, mm5;
		pandn mm2, mm0;
		sub ecx, 4;
		por mm2, mm3;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		mov bx, ax;
		shr dx, 2;
		shr bx, 2;
		and dx, word ptr dwAlphaMask2;
		and bx, word ptr dwAlphaMask2;
		sub ax, bx;
		add ax, dx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha7MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 0
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		movq mm6, qwAlphaMask1;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 1
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		// do 3/4 alpha blend;
		psrlw mm4, 3;
		psrlw mm1, 3;
		pand mm4, mm6;
		pand mm1, mm6;
		paddw mm0, mm4;
		movq mm5, mm2;
		psubw mm0, mm1;
		pand mm3, mm5;
		pandn mm2, mm0;
		sub ecx, 4;
		por mm2, mm3;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 2
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

		mov bx, ax;
		shr dx, 3;
		shr bx, 3;
		and dx, word ptr dwAlphaMask1;
		and bx, word ptr dwAlphaMask1;
		add ax, dx;
		sub ax, bx;

#define _SPRITE_BLIT_ALPHA_MMX_HEAD 3
#include "sprite.hpp"
#undef _SPRITE_BLIT_ALPHA_MMX_HEAD

}

void SpriteBlitAlpha8MMX( Bitmap* dest, int x, int y, Bitmap* src )
{
	SPRITE_CLIP;

	int spitch = src->pitch - w*2;
	char* sline = src->line[sy] + sx*2;
	int dpitch = dest->pitch - w*2;
	char* dline = dest->line[y] + x*2;

	__asm{
		mov esi, sline;	
		mov edi, dline;
		cld;
		movq mm7, qwColorKey;
		mov edx, spitch;
		mov ecx, w;
		mov bx, word ptr dwColorKey;
line_begin:
		ALIGN 4;
		cmp ecx, 4;
		jl line_tail;

		movq mm0, [esi];
		movq mm3, [edi];
		movq mm2, mm0;
		movq mm1, mm0;
		pcmpeqw mm2, mm7;
		pcmpeqw mm1, mm7;

		pand mm2, mm3;
		pandn mm1, mm0;
		sub ecx, 4;
		por mm2, mm1;
		add esi, 8;
		movq [edi], mm2;
		add edi, 8;
		jmp line_begin;

line_tail:
		jecxz next_line;
next_pixel:
		lodsw;
		dec ecx;
		cmp ax, bx;
		je trans_pixel;
		stosw;
		test ecx, ecx;
		jnz next_pixel;
		jmp next_line;
trans_pixel:
		add edi, 2;
		test ecx, ecx;
		jnz next_pixel;
next_line:
		add edi, dpitch;
		add esi, edx;
		mov ecx, w;
		dec h;
		jnz line_begin;

		emms;
		}
}

int testSprite( void )
{
//	screen->Clear( 0,0,640,480, 0x808000 );
/*	if( LockScreen() != 0 )
		return -1;
	for( int i=0; i<5; i++ ){
		SpriteBlitBeta9MMX( screen, 0, i*96, bmp, 255 );
		SpriteBlitAlpha2MMX( screen, 128, i*96, bmp );
		SpriteBlitAlpha2MMX( screen, 256, i*96, bmp );
		SpriteBlitAlpha2MMX( screen, 384, i*96, bmp );
		SpriteBlitAlpha2MMX( screen, 512, i*96, bmp );
	}
	return UnlockScreen();*/
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
伊人一区二区三区| 色网站国产精品| 国产美女视频91| 蜜臀av性久久久久蜜臀aⅴ| 日韩高清不卡在线| 麻豆久久一区二区| 亚洲一区在线播放| 日韩av电影天堂| 激情综合一区二区三区| 国产精品自在在线| 99九九99九九九视频精品| 欧美在线视频日韩| 欧美精品三级日韩久久| 欧美va亚洲va| 精品国产三级a在线观看| 国产亚洲一区二区三区在线观看| 国产精品视频你懂的| 亚洲国产日日夜夜| 精品一区二区影视| 成人动漫一区二区三区| 欧美日韩精品系列| 久久久久成人黄色影片| 国产精品系列在线| 亚洲成精国产精品女| 国产精品一区专区| 日本韩国欧美在线| 久久久久国色av免费看影院| 伊人开心综合网| 国产一区中文字幕| 欧洲国产伦久久久久久久| 91精品国产色综合久久久蜜香臀| 欧美视频一区二区三区| 国产亚洲精品bt天堂精选| 亚洲美女淫视频| 国内精品久久久久影院一蜜桃| 91丝袜呻吟高潮美腿白嫩在线观看| 成人av网站在线观看免费| 欧美精品久久99久久在免费线| 中文字幕av在线一区二区三区| 亚洲www啪成人一区二区麻豆| 国产一区不卡视频| 91精品国产91久久综合桃花| 亚洲欧洲在线观看av| 国产精品盗摄一区二区三区| 紧缚奴在线一区二区三区| 欧美日韩在线直播| 中文字幕亚洲综合久久菠萝蜜| 日韩国产欧美一区二区三区| www.视频一区| 久久久美女艺术照精彩视频福利播放| 亚洲一级二级三级在线免费观看| 美女精品自拍一二三四| 在线视频一区二区免费| 国产精品色噜噜| 六月丁香婷婷久久| 欧美日韩国产电影| 亚洲一区二区不卡免费| 色婷婷久久久亚洲一区二区三区| 精品国产凹凸成av人网站| 丝袜美腿亚洲一区二区图片| 欧美在线短视频| 亚洲精品一二三区| 91捆绑美女网站| 综合久久久久综合| 91性感美女视频| 一区二区视频免费在线观看| 成人性生交大片免费| 国产亚洲欧美日韩俺去了| 国产一区999| 中文字幕 久热精品 视频在线| 狠狠色2019综合网| 国产欧美日韩卡一| 成人av在线电影| 色94色欧美sute亚洲线路一ni| 国产精品久久毛片a| 懂色av一区二区三区蜜臀| 中文字幕免费在线观看视频一区| 国产成人av福利| 国产精品―色哟哟| 91黄色激情网站| 亚洲欧美日韩国产另类专区| 91香蕉视频黄| 亚洲国产日韩一级| 69av一区二区三区| 国产在线视频一区二区三区| 国产亚洲成年网址在线观看| 丁香激情综合国产| 久久综合九色综合欧美98| 26uuu亚洲综合色欧美| 18欧美乱大交hd1984| 欧美性受xxxx| 蜜桃免费网站一区二区三区| 久久久五月婷婷| 色婷婷一区二区| 午夜国产不卡在线观看视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产一区二区三区电影在线观看 | 欧美日韩一区二区三区在线看 | 欧美电影免费观看高清完整版在线观看| 视频在线观看一区二区三区| 国产suv一区二区三区88区| 中文字幕佐山爱一区二区免费| 91精彩视频在线| 精品中文字幕一区二区| 久久久久久免费毛片精品| 国产精品1024| 在线成人av影院| 成人av网站在线观看免费| 日本中文一区二区三区| 国产精品久久久久久久岛一牛影视 | 久久免费国产精品| 91麻豆免费看| 韩国成人在线视频| 欧美大肚乱孕交hd孕妇| 日本不卡中文字幕| 中文字幕一区二区5566日韩| 欧美日韩高清一区二区| 成人av免费网站| 亚洲永久精品国产| 在线一区二区三区做爰视频网站| 麻豆91在线看| 亚洲女子a中天字幕| 3atv在线一区二区三区| 99亚偷拍自图区亚洲| 美女高潮久久久| 亚洲综合一区二区三区| 天天色图综合网| 欧美成人性战久久| 91国偷自产一区二区使用方法| 国产精品一区一区三区| 国产婷婷精品av在线| 欧美久久久久中文字幕| 一本一本大道香蕉久在线精品| 国产在线国偷精品免费看| 一区二区三区免费| 欧美成人艳星乳罩| 69堂精品视频| 欧美日韩精品系列| 欧美在线不卡视频| 日韩欧美一区中文| 国产成人av影院| 亚洲综合激情网| 久久伊人蜜桃av一区二区| 欧美伦理电影网| 欧美日本一区二区| 欧美丝袜丝交足nylons图片| 91丨九色丨国产丨porny| 丰满放荡岳乱妇91ww| 一级做a爱片久久| 综合欧美亚洲日本| 国产精品卡一卡二卡三| 久久精品视频在线看| 欧美成人猛片aaaaaaa| 宅男噜噜噜66一区二区66| 欧美色网站导航| 欧美狂野另类xxxxoooo| 91久久一区二区| 亚洲视频狠狠干| 欧美日韩免费视频| 色哟哟国产精品| 欧美在线不卡视频| 欧美午夜精品久久久久久超碰| 91成人在线免费观看| 不卡av免费在线观看| 亚洲福利一区二区三区| 亚洲一区二区三区小说| 天天综合网天天综合色 | 欧美日韩国产免费| 欧美日韩高清在线| 日韩免费一区二区三区在线播放| 日韩欧美色综合网站| 欧美成人一区二区三区| 在线免费观看日本欧美| 欧美日韩一区小说| 日本午夜精品视频在线观看| 国产精品欧美一区喷水| 日日骚欧美日韩| 久久久精品免费网站| 91在线丨porny丨国产| 欧美日韩三级一区二区| 欧美一区二区三区在线观看| 欧美一区欧美二区| 精品国内二区三区| 欧美另类高清zo欧美| 亚洲黄色尤物视频| 久久99久久99小草精品免视看| 国产91精品一区二区麻豆网站| av电影一区二区| 在线播放欧美女士性生活| 久久午夜老司机| 国产精品伦一区| 成人性色生活片免费看爆迷你毛片| 色哟哟精品一区| 精品99久久久久久| 亚洲美女在线一区| 精久久久久久久久久久| 日韩成人免费电影| 欧美综合一区二区三区| www成人在线观看| 亚洲成va人在线观看|