📄 sprite_b.hpp
字号:
// 光影处理
#if ( _SPRITE_BLIT_BETA_MMX_HEAD == 0 )
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;
mov bx, word ptr dwColorKey;
movq mm7, qwColorKey;
#endif
#if( _SPRITE_BLIT_BETA_MMX_HEAD == 1 )
mov ecx, w;
jmp line_begin;
main_loop:
ALIGN 4;
add esi, 8;
sub ecx, 4;
add edi, 8;
line_begin:
ALIGN 4;
cmp ecx, 4;
jl line_tail;
movq mm0, [esi];
movq mm4, [edi];
movq mm1, mm0;
movq mm2, mm0;
pcmpeqw mm1, mm7;
pcmpeqw mm2, mm7;
movd eax, mm1;
movq mm3, mm0;
inc eax;
jnz lower_not_all_trans;
psrlq mm1, 32;
movd eax, mm1;
inc eax;
jz main_loop;
lower_not_all_trans: // mm0,mm3:源像素 mm2:掩码 mm4:目标像素 mm7:colorkey
#endif
#if( _SPRITE_BLIT_BETA_MMX_HEAD == 2 )
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; // bx:colorkey ax:源像素 dx:可用
#endif
#if( _SPRITE_BLIT_BETA_MMX_HEAD == 3 )
stosw;
test ecx, ecx;
jnz next_pixel;
jmp next_line;
trans_pixel:
add edi, 2;
test ecx, ecx;
jnz next_pixel;
next_line:
add esi, spitch;
add edi, dpitch;
mov ecx, w;
dec h;
jnz line_begin;
emms;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -