1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| draw3DHorizontale PROC near C,ddsd:DWORD, x1:DWORD,x2:DWORD, y:DWORD, color1:DWORD,color2:DWORD
LOCAL color16:QWORD,color322:QWORD,color32:QWORD
pushad
mov ebx,x2
sub ebx,x1
inc ebx
movd mm0,color1
movd mm1,color2
pxor mm2,mm2
punpcklbw mm0,mm2
punpcklbw mm1,mm2
psubw mm1,mm0
movq color16,mm1
mov ecx,4
xor edi,edi
@@:
mov ax,word ptr [color16+edi*2]
shl eax,16
cdq
idiv ebx
mov dword ptr [color32+edi*4],eax
inc edi
dec ecx
jnz @B
movq mm1,qword ptr [color32+0]
movq mm3,qword ptr [color32+8]
movq mm2,mm0
pxor mm4,mm4
punpcklwd mm0,mm4
punpckhwd mm2,mm4
pslld mm0,16
pslld mm2,16
mov esi,ddsd
mov eax,y
mul (draw3DDesc ptr [esi]).dwWidth
add eax,x1
mov esi,(draw3DDesc ptr [esi]).lpSurface
shl eax,2
add esi,eax
mov eax,color1
;** boucle **
@@:
mov [esi],eax
paddd mm0,mm1
paddd mm2,mm3
movq mm4,mm0
movq mm5,mm2
pslld mm4,8
pslld mm5,8
psrld mm4,24
psrld mm5,24
packuswb mm4,mm5
packuswb mm4,mm5
movd eax,mm4
add esi,4
dec ebx
jnz @B
;** fin **
emms
popad
ret
draw3DHorizontale ENDP |
Partager