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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asl_asm.cpp

?? 泡泡堂單機版(含ASL游戲引擎源碼 泡泡堂單機版(含ASL游戲引擎源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
//
//    ____ Azure Star Game Engine 藍星游戲引擎 ____
//
//    Copyright (c) 2006, 藍星工作室
//    All rights reserved.
//
//    文件名稱: asl_asm.cpp
//    摘    要: MMX加速的圖像處理函數實現(被ASLBitmap, ASLFont類使用)
//
//    當前版本: 1.0
//    作    者: 湯  祺
//    創(chuàng)建日期: 2006-8-7
//
//-----------------------------------------------------------------------------

#include "asl_asm.h"

namespace ASL
{

//-----------------------------------------------------------------------------// 宏名: ALPHABLEND()// 功能: 執(zhí)行4字Alpha混合, 本宏使用所有8個mmx寄存器// 輸入: mm3 - 目的顏色//       mm0 - 源顏色//       mm7 - 33級alpha值(0~32)// 輸出: mm0 - 結果顏色// 算法: alpha混合公式為: src * alpha + dst * (1 - alpha)//       變形為: (src - dst) * alpha + dst  其中alpha范圍0~1//       對于33級alpha值, 計算前留出5位空白防止溢出, 計算完成后右移5位// 逐行注釋://       movq mm4, mm3		; g1 mm4 = dst3 dst3 dst1 dst0//       movq mm5, mm3		; b1 mm5 = dst3 dst3 dst1 dst0//       movq mm6, mm3		; r1 mm6 = dst3 dst3 dst1 dst0//       psrlw mm3, 5		; r2 mm3 = dst?: 00000rrrrrgggggg//       pand mm4, mask_g	; g2 mm4 = dst?: 00000gggggg00000//       pand mm5, mask_b	; b2 mm5 = dst?: 00000000000bbbbb//       movq mm1, mm0		; g3 mm1 = src3 src2 src1 src0//       movq mm2, mm0		; b3 mm2 = src3 src2 src1 src0//       psrlw mm0, 5		; r3 mm0 = src?: 00000rrrrrgggggg//       pand mm1, mask_g	; g4 mm1 = src?: 00000gggggg00000//       pand mm2, mask_b	; b4 mm2 = src?: 00000000000bbbbb//       psubw mm0, mm3		; r4 mm0 = src? - dst?//       psubw mm1, mm4		; g5 mm1 = src? - dst?//       pmullw mm0, mm7	; r5 mm0 = (src? - dst?) * alpha?//       psubw mm2, mm5		; b5 mm2 = src? - dst?//       pmullw mm1, mm7	; g6 mm1 = (src? - dst?) * alpha?//       paddw mm0, mm6		; r6 mm0 = (src? - dst?) * alpha? + dst?//       pmullw mm2, mm7	; b6 mm2 = (src? - dst?) * alpha?//       psrlw mm1, 5		; g7 mm1右移5位,使alpha值范圍變?yōu)?~1//       psrlw mm2, 5		; b7 mm2右移5位,使alpha值范圍變?yōu)?~1//       paddw mm1, mm4		; g8 mm1 = (src? - dst?) * alpha? + dst?//       paddw mm2, mm5		; b8 mm2 = (src? - dst?) * alpha? + dst?//       pand mm0, mask_r	; r7 mm0 = result?: rrrrr00000000000//       pand mm1, mask_g	; g9 mm1 = result?: 00000gggggg00000//       pand mm2, mask_b	; b9 mm2 = result?: 00000ggggggbbbbb//       por mm0, mm1		; mm0 = result?: rrrrrgggggg00000//       por mm0, mm2		; mm0 = result?: rrrrrggggggbbbbb//-----------------------------------------------------------------------------
#define ALPHABLEND()			\
		__asm movq mm4, mm3		\		__asm movq mm5, mm3		\		__asm movq mm6, mm3		\		__asm psrlw mm3, 5		\		__asm pand mm4, mask_g	\		__asm pand mm5, mask_b	\		__asm movq mm1, mm0		\		__asm movq mm2, mm0		\		__asm psrlw mm0, 5		\		__asm pand mm1, mask_g	\		__asm pand mm2, mask_b	\		__asm psubw mm0, mm3	\		__asm psubw mm1, mm4	\		__asm pmullw mm0, mm7	\		__asm psubw mm2, mm5	\		__asm pmullw mm1, mm7	\		__asm paddw mm0, mm6	\		__asm pmullw mm2, mm7	\		__asm psrlw mm1, 5		\		__asm psrlw mm2, 5		\		__asm paddw mm1, mm4	\		__asm paddw mm2, mm5	\		__asm pand mm0, mask_r	\		__asm pand mm1, mask_g	\		__asm pand mm2, mask_b	\		__asm por mm0, mm1		\		__asm por mm0, mm2

//-----------------------------------------------------------------------------
// 宏名: ADDITIVE()// 功能: 執(zhí)行4字色飽和處理, 本宏使用寄存器: mm0, mm1, mm2, mm3, mm6, mm7// 輸入: mm0 - 源顏色//       mm2 - 目的顏色//       mm6 - 綠掩碼//       mm7 - 紅藍掩碼// 輸出: mm0 - 結果顏色// 算法: // 逐行注釋:
//-----------------------------------------------------------------------------
#define ADDITIVE()				\
		__asm movq mm1, mm0		\
		__asm movq mm3, mm2		\
		__asm pand mm0, mm7		\
		__asm por mm2, mm6		\
		__asm pand mm1, mm6		\
		__asm por mm3, mm7		\
		__asm paddusb mm0, mm2	\
		__asm paddusw mm1, mm3	\
		__asm pand mm0, mm1


// 全局常量定義
const __int64 mask_r = 0xF800F800F800F800;		// 紅色掩碼
const __int64 mask_g = 0x07E007E007E007E0;		// 綠色掩碼
const __int64 mask_b = 0x001F001F001F001F;		// 藍色掩碼

//-----------------------------------------------------------------------------
// 函數名: asmDrawPlain()
// 功  能: 普通位圖繪制
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmDrawPlain(BYTE *pSrc, BYTE *pDst, int nWidth)
{
	__asm
	{
		mov edi, pDst		// edi = 目的指針
		mov esi, pSrc		// esi = 源指針
		mov ecx, nWidth		// ecx = 寬度
		cld
		align 4
_nextqword:
		sub ecx, 4
		jl _residual
		movq mm0, [esi]		// 從源地址取4象素數據
		add esi, 8
		movq [edi], mm0		// 直接寫入目的地址
		add edi, 8
		jmp _nextqword
_residual:
		add ecx, 4
		jz _done
		rep movsw
_done:
		emms
	}
}

//-----------------------------------------------------------------------------
// 函數名: asmDrawColorkey()
// 功  能: 普通位圖繪制(帶Colorkey處理)
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
//         [ck64] - 64位顏色鍵
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmDrawColorkey(BYTE *pSrc, BYTE *pDst, int nWidth, __int64 ck64)
{
	__asm
	{
		movq mm7, ck64		// 64位顏色鍵
		mov edi, pDst		// edi = 目的指針
		mov esi, pSrc		// esi = 源指針
		mov ecx, nWidth		// ecx = 寬度
		movd edx, mm7		// 取32位顏色鍵, 用于剩余處理
		cld
		align 4
_nextqword:
		sub ecx, 4
		jl _residual
		movq mm0, [esi]		// 從源地址取4象素數據
		add esi, 8
		movq mm1, mm0		// 源數據給mm1
		pcmpeqw mm0, mm7	// mm0為透明掩碼
		psubusw mm1, mm0	// 源數據透明點置0
		pand mm0, [edi]		// 目的數據非透明點置0
        por mm0, mm1		// 相與得結果數據
		movq [edi], mm0		// 結果送目的地址
		add edi, 8
		jmp _nextqword
_residual:					// 剩余處理
		add ecx, 4
		jz _done
_draw16:
		lodsw				// 從源地址取1象素數據
		cmp ax, dx			// 將其與透明色比較
		jz _nextone			// 相等則跳過
		mov [edi], ax		// 不等則寫入目的地址
_nextone:
		add edi, 2
		dec ecx
		jnz _draw16
_done:
		emms
	}
}

//-----------------------------------------------------------------------------
// 函數名: asmAlphaPlain()
// 功  能: 半透明位圖繪制(實際33級透明度)
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
//         [alpha] - 透明度 0-256
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmAlphaPlain(BYTE *pSrc, BYTE *pDst, int nWidth, __int64 alpha)
{
	__asm
	{
		mov edi, pDst		// edi = 目的指針
		mov esi, pSrc		// esi = 源指針
		mov ecx, nWidth		// ecx = 寬度
		movq mm7, alpha		// 透明度
		align 4
_nextqword:
		sub ecx, 4
		jl _residual
		movq mm3, [edi]		movq mm0, [esi]	}	// 調用Alpha混合宏	ALPHABLEND()	__asm	{		add esi, 8		movq [edi], mm0		add edi, 8
		jmp _nextqword
_residual:
		add ecx, 4
		jz _done			// ecx=0, 已完成
		test ecx, 2
		jz _onein			// ecx=1, 轉單象素處理
		movd mm3, [edi]		// ecx!=1, 先拷貝2象素
		movd mm0, [esi]
		test ecx, 1
		jz _startres		// ecx=2, 開始剩余處理
		mov dx, [edi+4]		// ecx=3, 再拷貝一個象素
		movd mm6, edx
		mov dx, [esi+4]
		psllq mm6, 32
		por mm3, mm6
		movd mm6, edx
		psllq mm6, 32
		por mm0, mm6
		jmp _startres
_onein:						// 單象素處理
		mov dx, [edi]
		movd mm3, edx
		mov dx, [esi]
		movd mm0, edx
_startres:
	}

	// 調用Alpha混合宏	ALPHABLEND()

	__asm
	{
		test ecx, 2		jz _onepixel		movd [edi], mm0			sub ecx, 2		jz _done		psrlq mm0, 32		add edi, 4_onepixel:		movd edx, mm0		mov [edi], dx
_done:
		emms
	}
}

//-----------------------------------------------------------------------------
// 函數名: asmAlphaColorkey()
// 功  能: 半透明位圖繪制(帶Colorkey處理)
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
//         [alpha] - 透明度 0-256
//         [ck64] - 64位顏色鍵
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmAlphaColorkey(BYTE *pSrc, BYTE *pDst, int nWidth, __int64 alpha, 
					  __int64 ck64)
{
	__asm
	{
		mov edi, pDst		// edi = 目的指針
		mov esi, pSrc		// esi = 源指針
		mov ecx, nWidth		// ecx = 寬度
		cld
		align 4
_nextqword:
		sub ecx, 4
		jl _residual
		movq mm1, ck64
		movd eax, mm1
		cmp [esi], eax
		jnz _notequal
		cmp [esi+4], eax
		jnz _notequal
		jmp _finishone
_notequal:
		movq mm3, [edi]		movq mm0, [esi]				movq mm7, alpha		pcmpeqw mm1, mm0				psubusw mm7, mm1	}	// 調用Alpha混合宏	ALPHABLEND()	__asm	{		movq [edi], mm0_finishone:		add esi,8
		add edi,8
		jmp _nextqword
_residual:
		add ecx, 4
		jz _done			// ecx=0, 已完成
		test ecx, 2
		jz _onein			// ecx=1, 轉單象素處理
		movd mm3, [edi]		// ecx!=1, 先拷貝2象素
		movd mm0, [esi]
		test ecx, 1
		jz _startres		// ecx=2, 開始剩余處理
		mov dx, [edi+4]		// ecx=3, 再拷貝一個象素
		movd mm6, edx
		mov dx, [esi+4]
		psllq mm6, 32
		por mm3, mm6
		movd mm6, edx
		psllq mm6, 32
		por mm0, mm6
		jmp _startres
_onein:						// 單象素處理
		mov dx, [edi]
		movd mm3, edx
		mov dx, [esi]
		movd mm0, edx
_startres:		movq mm1, ck64				movq mm7, alpha		pcmpeqw mm1, mm0				psubusw mm7, mm1	}	// 調用Alpha混合宏	ALPHABLEND()	__asm	{		test ecx, 2
		jz _oneout			// ecx為1,則寫入1個象素數據		movd [edi], mm0		// ecx為2或3,先寫入2個象素		sub ecx, 2		jz _done			// ecx為2,則結束		psrlq mm0, 32		// ecx為3,再寫入1個象素		add edi, 4_oneout:		movd edx, mm0		mov [edi], dx		// 寫入一個象素_done:
		emms
	}
}

//-----------------------------------------------------------------------------
// 函數名: asmFastPlain()
// 功  能: 快速半透明位圖繪制(50%-50%)
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmFastPlain(BYTE *pSrc, BYTE *pDst, int nWidth)
{
	static const __int64 mask = 0x7BEF7BEF7BEF7BEF;

	// 算法: 將顏色值全部右移一位, 再與掩碼做且運算, 則三色分量均除以2
	//       源數據和目的數據均做上述操作, 再相加即實現半透明
	__asm
	{
		mov edi, pDst		// edi = 目的指針
		mov esi, pSrc		// esi = 源指針
		movq mm7, mask		// 64位掩碼
		mov ecx, nWidth		// ecx = 寬度
		movd edx, mm7		// 將32位掩碼給edx, 用于剩余處理
		cld
		align 4
_nextqword:
		sub ecx, 4
		jl _residual
		movq mm0, [esi]		// 取源數據到mm0
		movq mm1, [edi]		// 取目的數據到mm1
		psrlq mm0, 1		// src? = 0rrrrrggggggbbbb
		psrlq mm1, 1		// dst? = 0rrrrrggggggbbbb
		pand mm0, mm7		// src? = 0rrrr0ggggg0bbbb
		pand mm1, mm7		// dst? = 0rrrr0ggggg0bbbb
		paddw mm0, mm1		// result? = rrrrrggggggbbbbb
		add esi, 8
		movq [edi], mm0		// 寫回目的地址
		add edi, 8
		jmp _nextqword
_residual:					// 剩余處理
		add ecx, 4
		jz _done
_alpha16:
		lodsw
		mov bx, [edi];
		shr bx, 1;
		shr ax, 1;
		and bx, dx;
		and ax, dx;			
		add ax, bx;
		stosw
		dec ecx
		jnz _alpha16
_done:
		emms
	}
}

//-----------------------------------------------------------------------------
// 函數名: asmFastColorkey()
// 功  能: 快速半透明位圖繪制(帶Colorkey處理)
// 參  數: [*pSrc] - 源位圖數據
//         [*pDst] - 目的位圖數據
//         [nWidth] - 待處理寬度
//         [ck64] - 64位顏色鍵
// 返回值: [void] - 無
//-----------------------------------------------------------------------------
void asmFastColorkey(BYTE *pSrc, BYTE *pDst, int nWidth, __int64 ck64)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四区五区入口| 欧美久久一区二区| 欧美日韩国产免费一区二区| 欧美成人艳星乳罩| 亚洲免费成人av| 国产精品中文字幕一区二区三区| 欧洲在线/亚洲| 国产亚洲午夜高清国产拍精品 | 国产99久久久久久免费看农村| 91蜜桃在线免费视频| 欧美成人免费网站| 亚洲成人久久影院| 91在线免费看| 欧美极品少妇xxxxⅹ高跟鞋| 日本三级亚洲精品| 欧美色综合网站| 夜夜嗨av一区二区三区网页| 成人久久视频在线观看| 精品成人一区二区三区四区| 午夜精品福利视频网站| 91黄色免费网站| 国产精品久久久久一区二区三区 | 欧美一级夜夜爽| 亚洲一区二区在线播放相泽| eeuss影院一区二区三区| 欧美成人官网二区| 麻豆精品久久久| 日韩一二在线观看| 麻豆国产91在线播放| 在线综合+亚洲+欧美中文字幕| 一区二区不卡在线视频 午夜欧美不卡在| 国产麻豆精品一区二区| 久久麻豆一区二区| 国产一区 二区| 亚洲精品在线观看网站| 韩国精品久久久| 久久久www成人免费无遮挡大片| 久久精品国产精品亚洲精品| 91精品免费在线观看| 蜜臀av在线播放一区二区三区| 欧美日韩大陆一区二区| 日韩国产欧美在线视频| 欧美成人aa大片| 国产精品一区二区91| 欧美国产精品专区| 97se亚洲国产综合在线| 亚洲愉拍自拍另类高清精品| 欧美群妇大交群中文字幕| 日韩国产精品久久久久久亚洲| 日韩一区二区影院| 国产专区综合网| 国产精品久久久久7777按摩| 在线精品观看国产| 免费人成网站在线观看欧美高清| 精品国产伦理网| 大桥未久av一区二区三区中文| 国产精品卡一卡二卡三| 色狠狠桃花综合| 麻豆精品精品国产自在97香蕉| 久久久精品免费网站| 91免费版在线| 免费的国产精品| 国产欧美日韩综合| 91论坛在线播放| 日韩精品一级中文字幕精品视频免费观看 | 亚洲综合成人网| 欧美一级xxx| 成人av网站在线观看免费| 亚洲三级电影全部在线观看高清| 欧美疯狂性受xxxxx喷水图片| 精品一区二区三区免费毛片爱 | 一个色妞综合视频在线观看| 欧美精品日韩综合在线| 国产麻豆精品在线观看| 亚洲午夜精品在线| 久久久国产精华| 欧美精品xxxxbbbb| 成人黄色在线看| 看国产成人h片视频| 中文字幕一区二区三区蜜月| 日韩亚洲欧美综合| 91视频在线观看免费| 美国精品在线观看| 樱花草国产18久久久久| 久久亚洲影视婷婷| 欧美日韩国产高清一区二区三区 | 色综合久久中文综合久久97 | 久久综合丝袜日本网| 91福利资源站| av一区二区三区在线| 精品在线亚洲视频| 一区二区三区四区高清精品免费观看| 欧美一级电影网站| 欧美中文字幕一区| 国产黄色91视频| 日韩电影免费一区| 一区二区三区四区亚洲| 欧美高清在线视频| 久久久三级国产网站| 777xxx欧美| 欧美色倩网站大全免费| 99r国产精品| 成人av网址在线观看| 国产精品亚洲一区二区三区在线| 香蕉av福利精品导航| 亚洲精品久久久蜜桃| 国产精品国产a| 中文字幕av一区二区三区高| 久久综合色天天久久综合图片| 欧美群妇大交群中文字幕| 91电影在线观看| 在线观看成人免费视频| 不卡视频一二三| 成人黄色电影在线 | 国产亚洲一区二区三区在线观看 | 久久机这里只有精品| 青青草国产精品亚洲专区无| 亚洲成av人片观看| 图片区小说区区亚洲影院| 偷窥少妇高潮呻吟av久久免费| 亚洲成人精品在线观看| 午夜影院久久久| 日本午夜一区二区| 久久99国产精品久久99果冻传媒| 蜜桃视频一区二区三区 | 懂色中文一区二区在线播放| 国产美女在线精品| 国产精品91一区二区| 不卡影院免费观看| 一本大道久久a久久综合| 色999日韩国产欧美一区二区| 97久久精品人人澡人人爽| 91蜜桃免费观看视频| 欧美日韩激情一区二区| 制服丝袜国产精品| 久久久国产午夜精品| 亚洲同性gay激情无套| 亚洲欧美国产77777| 天天综合色天天| 国产一区二区三区视频在线播放| 高清在线成人网| 99久久精品免费看| 制服丝袜亚洲色图| 国产欧美综合在线| 亚洲人吸女人奶水| 天堂在线一区二区| 国产精品一二一区| 91精彩视频在线| 精品少妇一区二区三区免费观看| 中文字幕二三区不卡| 亚洲制服丝袜av| 国产一区视频网站| 色综合网站在线| 精品国产亚洲一区二区三区在线观看| 国产性天天综合网| 亚洲一区二区三区精品在线| 精品一区二区三区欧美| 色视频成人在线观看免| 精品裸体舞一区二区三区| 亚洲视频在线观看三级| 久久99热99| 91网站在线播放| 欧美电影免费观看高清完整版在 | 午夜精品影院在线观看| 激情成人综合网| 在线观看日产精品| 国产欧美精品在线观看| 性做久久久久久久免费看| 国产91色综合久久免费分享| 欧美美女bb生活片| 中文字幕中文字幕在线一区| 麻豆精品视频在线| 欧美在线你懂得| 中文字幕亚洲一区二区av在线 | 国产真实乱子伦精品视频| 91蝌蚪国产九色| 国产清纯白嫩初高生在线观看91 | 亚洲伊人伊色伊影伊综合网| 国产精品系列在线观看| 日韩亚洲欧美在线| 亚洲一区二区精品视频| 91网站最新地址| 中文字幕av一区 二区| 精品一二三四在线| 欧美日韩久久不卡| 亚洲精品自拍动漫在线| 成人激情动漫在线观看| 久久亚洲综合av| 狠狠色丁香九九婷婷综合五月| 在线成人免费观看| 亚洲一线二线三线久久久| 91免费小视频| 国产精品久久久久天堂| 国产黄色精品视频| 国产人妖乱国产精品人妖| 国内精品第一页| 欧美v国产在线一区二区三区| 日韩精品1区2区3区| 欧美伊人久久久久久久久影院| 亚洲欧美日韩国产一区二区三区|