2111,6 → 2111,19 |
jne .copy_end ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov ebx,buf2d_h ;ebx - ¢ëá®â ®á®¢®£® ¡ãä¥à |
mov ecx,[coord_y] |
cmp ecx,0 |
jge @f |
;¥á«¨ ª®®à¤¨ â coord_y<0 (1-ï áâனª ) |
add edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨ |
cmp edx,0 |
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî ¤ ¢¥à奩 £à ¨æ¥© ¡ãä¥à (coord_y<0 ¨ |coord_y|>buf_source.h) |
neg ecx |
;inc ecx |
imul ecx,eax |
shl ecx,2 ;¯® 4 ¡¨â ¯¨ªá¥«ì |
add esi,ecx ;ᤢ¨£ ¥¬ 㪠§ ⥫ì á ª®¯¨à㥬묨 ¤ 묨, á ãç¥â®¬ ¯à®¯ã襮© ç á⨠|
xor ecx,ecx ;®¡ã«ï¥¬ ª®®à¤¨ âã coord_y |
@@: |
cmp ecx,ebx |
jge .copy_end ;¥á«¨ ª®®à¤¨ â 'y' ¡®«ìè¥ ¢ëá®âë ¡ãä¥à |
add ecx,edx ;ecx - ¨¦ïï ª®®à¤¨ â ª®¯¨à㥬®© ª à⨪¨ |
2121,8 → 2134,15 |
@@: |
mov ebx,buf2d_w |
mov ecx,ebx ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
cmp [coord_y],0 |
jg .end_otr_c_y |
;¥á«¨ ª®®à¤¨ â coord_y<=0 (2-ï áâனª ) |
mov ecx,[coord_x] |
jmp @f |
.end_otr_c_y: |
imul ecx,[coord_y] |
add ecx,[coord_x] |
@@: |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
2226,7 → 2246,7 |
align 4 |
proc buf_bit_blt_alpha, buf_destination:dword, coord_x:dword, coord_y:dword, buf_source:dword, color:dword |
locals |
right_bytes dd ? |
lost_bytes dd ? ;ç¨á«® ¯®â¥àïëå ¡ ©â®¢ ¢ áâப¥ ª®¯¨à㥬®£® ¨§®¡à ¦¥ï (â¥å çâ® ¥ ¢« §ïâ ¢ ¡ãä¥à) |
dest_w_bytes dd ? ;ª®««¨ç¥á⢮ ¡ ©â ¢ ¡ãä¥à¥ ¯à¨¥¬¨ª¥ ¯® è¨à¨¥ - è¨à¨ ¢áâ ¢«ï¥¬®© ª à⨪¨ |
endl |
pushad |
2234,7 → 2254,7 |
mov edi,[buf_source] |
cmp buf2d_bits,8 |
jne .error1 ;ä®à¬ â ¡ãä¥à ¥ ¯®®¤¥à¦¨¢ ¥âáï |
mov eax,buf2d_w |
mov eax,buf2d_w ;è¨à¨ ª®¯¨à㥬®© ª à⨪¨ |
mov edx,buf2d_h ;¢ëá®â ª®¯¨à㥬®© ª à⨪¨ |
mov esi,buf2d_data ;¤ ë¥ ª®¯¨à㥬®© ª à⨪¨ |
|
2250,6 → 2270,8 |
jge @f |
;¥á«¨ ª®®à¤¨ â coord_y<0 (1-ï áâனª ) |
add edx,ecx ;㬥ìè ¥¬ ¢ëá®âã ª®¯¨à㥬®© ª à⨪¨ |
cmp edx,0 |
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî ¤ ¢¥à奩 £à ¨æ¥© ¡ãä¥à (coord_y<0 ¨ |coord_y|>buf_source.h) |
neg ecx |
;inc ecx |
imul ecx,eax |
2267,8 → 2289,8 |
mov ebx,buf2d_w |
mov ecx,[coord_y] ;ecx ¨á¯®«ì§ã¥¬ ¤«ï ¢à¥¬¥ëå 楫¥© |
cmp ecx,0 |
jge .end_otr_c_y |
;¥á«¨ ª®®à¤¨ â coord_y<0 (2-ï áâனª ) |
jg .end_otr_c_y |
;¥á«¨ ª®®à¤¨ â coord_y<=0 (2-ï áâனª ) |
mov ecx,[coord_x] |
jmp @f |
.end_otr_c_y: |
2276,19 → 2298,33 |
add ecx,[coord_x] |
@@: |
lea ecx,[ecx+ecx*2] |
add ecx,buf2d_data |
sub ebx,eax |
add ecx,buf2d_data ;buf2d_data ¤ ë¥ ®á®¢®£® ¡ãä¥à |
sub ebx,eax ;ebx - è¨à¨ ®á®¢®£® ¡ãä¥à ¬¨ãá è¨à¨ à¨á㥬®£® ¡ãä¥à |
mov edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
|
mov [right_bytes],0 |
mov dword[lost_bytes],0 |
mov ecx,[coord_x] |
cmp ecx,0 |
jge @f |
neg ecx |
;inc ecx |
cmp eax,ecx ;eax - è¨à¨ ª®¯¨à㥬®© ª à⨪¨ |
jle .copy_end ;¥á«¨ ª®¯¨à㥬®¥ ¨§®¡à ¦¥¨¥ 室¨âáï ¯®«®áâìî § «¥¢®© £à ¨æ¥© ¡ãä¥à (coord_x<0 ¨ |coord_x|>buf_source.w) |
add [lost_bytes],ecx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
add esi,ecx |
lea ecx,[ecx+ecx*2] |
add edi,ecx ;edi 㪠§ â¥«ì ¤ ë¥ ¡ãä¥à , ªã¤ ¡ã¤¥â ¯à®¨§¢®¤¨âáï ª®¯¨à®¢ ¨¥ |
xor ecx,ecx |
@@: |
cmp ecx,ebx |
jl @f |
jle @f |
sub ecx,ebx |
sub eax,ecx ;㪮à 稢 ¥¬ ª®¯¨à㥬ãî áâபã |
add ebx,ecx ;㤫¨ï¥¬ áâப㠤«ï ᤢ¨£ £« ¢®© ª à⨪¨ ¡ãä¥à |
;ecx - ç¨á«® ¯¨ªá¥«¥© ¢ 1-© áâப¥ ª à⨪¨, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî áâ®à®ã |
mov [right_bytes],ecx |
add [lost_bytes],ecx |
@@: |
|
lea ebx,[ebx+ebx*2] ;ª®««¨ç¥á⢮ ¡ ©â ¢ 1-© áâப¥ ¡ãä¥à ¬¨ãá ç¨á«® ¡ ©â ¢ 1-© áâப¥ ª®¯¨à㥬®© ª à⨪¨ |
2296,7 → 2332,7 |
mov ebx,[color] |
|
cld |
cmp [right_bytes],0 |
cmp dword[lost_bytes],0 |
jg .copy_1 |
.copy_0: ;¯à®á⮥ ª®¯¨à®¢ ¨¥ |
mov ecx,eax |
2310,7 → 2346,7 |
cmp edx,0 |
jg .copy_0 |
jmp .copy_end |
.copy_1: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § ¯à ¢ãî áâ®à®ã) |
.copy_1: ;¥ ¯à®á⮥ ª®¯¨à®¢ ¨¥ (ª à⨪ ¢ë« §¨â § «¥¢ãî ¨/¨«¨ ¯à ¢ãî áâ®à®ã) |
mov ecx,eax |
@@: |
call combine_colors_2 |
2318,7 → 2354,7 |
inc esi |
loop @b |
add edi,[dest_w_bytes] |
add esi,[right_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
add esi,[lost_bytes] ;¤®¡ ¢«ï¥¬ ¡ ©âë, ª®â®àë¥ ¢ë« §ïâ § ¯à ¢ãî £à ¨æã |
dec edx |
cmp edx,0 |
jg .copy_1 |