__asm
{
//pusha;
movq mm6,__Depth;
mov eax,dword ptr wdDest;
mov ebx,dword ptr wdRes;
mov cx,nUseH;//纪录操作矩形高
Add_Next_Row:
cmp cx,0;
je All_End;
xor dx,dx;
Next_MMX_Point:
cmp dx,nMMXCount;
je Not_MMX_Point;
movq mm0,[eax];
movq mm1,[ebx];
movq mm7,mm1;
pcmpeqw mm7,__Mask64;//这里用来处理透明色的,我的思路就是透明色就用目的颜色填充源
psubusw mm1,mm7; //这样,透明部分目的和源一样,不管怎么去alpha,只要公式是正确的,
pand mm7,mm0; //他们混合后的颜色就是不会变,add color特效也是同样的道理
por mm1,mm7; //
movq mm2,mm0;//g
psrlw mm2,5;
pand mm2,__Mask;
movq mm3,mm1;
psrlw mm3,5;
pand mm3,__Mask;
movq mm4,mm0;//r //wdDR=(((wdDR-wdRR)*nDepth+(wdRR<<5))>>5);
psrlw mm4,10;
pand mm4,__Mask;
movq mm5,mm1;
psrlw mm5,10;
pand mm5,__Mask;
//psllw mm0,1;//b
pand mm0,__Mask;
//psllw mm1,1;
pand mm1,__Mask;
psubsw mm0,mm1;
pmullw mm0,mm6;
psllw mm1,5;
paddsw mm0,mm1;
psrlw mm0,5;
//psrlw mm0,5;
//paddusw mm0,mm1;
psubsw mm2,mm3;
pmullw mm2,mm6;
psllw mm3,5;
paddsw mm2,mm3;
psrlw mm2,5;
//psrlw mm2,5;
//paddusw mm2,mm3;
psubsw mm4,mm5;
pmullw mm4,mm6;
psllw mm5,5;
paddsw mm4,mm5;
psrlw mm4,5;
//psrlw mm4,5;
//paddusw mm4,mm5;
//psllw mm0,10;
psllw mm2,5;
psllw mm4,10;
por mm0,mm2;
por mm0,mm4;
movq [eax],mm0;
add eax,8;
add ebx,8;
inc dx;
jmp Next_MMX_Point;
Not_MMX_Point:
xor dx,dx;
Not_MMX_Next:
cmp dx,nNotMMX;
je Row_End;
sub eax,2;
sub ebx,2;
inc dx;
jmp Not_MMX_Next;
Row_End:
sub eax,nUnUsed2;
sub ebx,nUnUsed1;
dec cx;
jmp Add_Next_Row;
//loop Add_Next_Row;
All_End:
//popa;
emms;
}