Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5175 → Rev 5187

/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc
19,27 → 19,27
update_left dd ?
update_right dd ?
 
nb_lines dd ?
nb_lines dd ? ;число горизонтальных линий в половине треугольника
dx1 dd ?
dy1 dd ?
dx2 dd ?
;dx2 dd ?
dy2 dd ?
 
error dd ?
derror dd ?
x1 dd ?
dxdy_min dd ?
dxdy_max dd ?
error dd ? ;int
derror dd ? ;int
x1 dd ? ;int
dxdy_min dd ? ;int
dxdy_max dd ? ;int
; warning: x2 is multiplied by 2^16
x2 dd ?
dx2dy2 dd ?
x2 dd ? ;int
dx2dy2 dd ? ;int
 
if INTERP_Z eq 1
z1 dd ?
dzdx dd ?
dzdy dd ?
dzdl_min dd ?
dzdl_max dd ?
z1 dd ? ;int
dzdx dd ? ;int
dzdy dd ? ;int
dzdl_min dd ? ;int
dzdl_max dd ? ;int
end if
if INTERP_RGB eq 1
r1 dd ? ;int
59,16 → 59,16
dbdl_max dd ?
end if
if INTERP_ST eq 1
s1 dd ?
dsdx dd ?
dsdy dd ?
dsdl_min dd ?
dsdl_max dd ?
t1 dd ?
dtdx dd ?
dtdy dd ?
dtdl_min dd ?
dtdl_max dd ?
s1 dd ? ;int
dsdx dd ? ;int
dsdy dd ? ;int
dsdl_min dd ? ;int
dsdl_max dd ? ;int
t1 dd ? ;int
dtdx dd ? ;int
dtdy dd ? ;int
dtdl_min dd ? ;int
dtdl_max dd ? ;int
end if
if INTERP_STZ eq 1
sz1 dd ? ;float
83,11 → 83,11
dtzdl_max dd ? ;float
end if
 
 
if DRAW_LINE_M eq 1
DRAW_LINE 0 ;переменные делаются в макросе
else
;edi = pp dd ?
n dd ? ;int
n dd ? ;int - длинна горизонтальной линии в пикселях
if INTERP_Z eq 1
pz dd ? ;unsigned short *
z dd ? ;uint
109,41 → 109,36
end if
 
endl
pushad
 
if DEBUG ;(1)
stdcall dbg_print,f_fill_tr,m_1
end if
 
; we sort the vertex with increasing y
mov ebx,[p0]
mov ecx,[p1]
mov eax,[ebx+offs_zbup_y]
cmp [ecx+offs_zbup_y],eax
jge @f
;if (p1.y < p0.y)
mov [p0],ecx
mov [p1],ebx
xchg ebx,ecx
mov eax,[ebx+offs_zbup_y] ;обновляем p0.y для следующего сравнения
@@:
mov edx,[p2]
cmp [edx+offs_zbup_y],eax
jge @f
;if (p2.y < p0.y)
mov [p0],edx
mov [p1],ebx
mov [p2],ecx
mov ebx,[p0]
mov ecx,[p1]
mov edx,[p2]
jmp .end_e0
mov eax,[edx+offs_zbup_y]
cmp [ecx+offs_zbup_y],eax ;(2-1)
jle @f
xchg edx,ecx
@@:
mov eax,[ecx+offs_zbup_y]
cmp [edx+offs_zbup_y],eax
jge .end_e0
;else if (p2.y < p1.y)
mov [p1],edx
mov [p2],ecx
.end_e0:
cmp [ebx+offs_zbup_y],eax ;(1-0)
jle @f
xchg ecx,ebx
@@:
mov eax,[edx+offs_zbup_y]
cmp [ecx+offs_zbup_y],eax ;(2-1)
jle @f
xchg edx,ecx
@@:
mov [p0],ebx
mov [p1],ecx
mov [p2],edx
 
; we compute dXdx and dXdy for all interpolated values
 
mov eax,[ecx+offs_zbup_x]
sub eax,[ebx+offs_zbup_x]
mov [fdx1],eax ;p1.x - p0.x
158,23 → 153,26
sub eax,[ebx+offs_zbup_y]
mov [fdy2],eax ;p2.y - p0.y
 
fild dword[fdx1]
fst dword[fdx1]
fild dword[fdy2]
fst dword[fdy2]
fmulp
fild dword[fdx2]
fst dword[fdx2]
fild dword[fdy1]
fst dword[fdy1]
fmulp
fild dword[fdx1]
fst dword[fdx1]
fild dword[fdy2]
fst dword[fdy2]
fmulp
fsubp ;st0 = st0-st1
fsubp ;st0 = st1-st0
fst dword[fz] ;fz = fdx1 * fdy2 - fdx2 * fdy1
fldz
fcompp ;if (fz == 0)
fcompp ;if (fz == 0) return
fstsw ax
sahf
je .end_f
if DEBUG ;(2)
stdcall dbg_print,txt_sp,m_2
end if
fld1
fdiv dword[fz] ;fz = 1.0 / fz
fst dword[fz] ;st0 = fz
201,27 → 199,25
mov eax,[edx+offs_zbup_z]
sub eax,[ebx+offs_zbup_z]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.z - p0.z
fild dword[d2]
fst dword[d2] ;d2 = p2.z - p0.z
fild dword[d1] ;d1 = p1.z - p0.z
fild dword[d2] ;d2 = p2.z - p0.z
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st2
fsubp
fistp dword[dzdx] ;dzdx = (int) (fdy2*d1 - fdy1*d2)
fld dword[fdx1]
fmul st0,st1
fld dword[fdy2]
fld dword[fdx2]
fmul st0,st3
fsub st0,st1
fistp dword[dzdx] ;dzdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fsubp
fistp dword[dzdy] ;dzdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
end if
 
if INTERP_RGB eq 1
231,27 → 227,25
mov eax,[edx+offs_zbup_r]
sub eax,[ebx+offs_zbup_r]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.r - p0.r
fild dword[d2]
fst dword[d2] ;d2 = p2.r - p0.r
fild dword[d1] ;d1 = p1.r - p0.r
fild dword[d2] ;d2 = p2.r - p0.r
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st2
fsubp
fistp dword[drdx] ;drdx = (int) (fdy2*d1 - fdy1*d2)
fld dword[fdx1]
fmul st0,st1
fld dword[fdy2]
fld dword[fdx2]
fmul st0,st3
fsub st0,st1
fistp dword[drdx] ;drdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fsubp
fistp dword[drdy] ;drdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
 
mov eax,[ecx+offs_zbup_g]
sub eax,[ebx+offs_zbup_g]
259,27 → 253,25
mov eax,[edx+offs_zbup_g]
sub eax,[ebx+offs_zbup_g]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.g - p0.g
fild dword[d2]
fst dword[d2] ;d2 = p2.g - p0.g
fild dword[d1] ;d1 = p1.g - p0.g
fild dword[d2] ;d2 = p2.g - p0.g
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st2
fsubp
fistp dword[dgdx] ;dgdx = (int) (fdy2*d1 - fdy1*d2)
fld dword[fdx1]
fmul st0,st1
fld dword[fdy2]
fld dword[fdx2]
fmul st0,st3
fsub st0,st1
fistp dword[dgdx] ;dgdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fsubp
fistp dword[dgdy] ;dgdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
 
mov eax,[ecx+offs_zbup_b]
sub eax,[ebx+offs_zbup_b]
287,27 → 279,25
mov eax,[edx+offs_zbup_b]
sub eax,[ebx+offs_zbup_b]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.b - p0.b
fild dword[d2]
fst dword[d2] ;d2 = p2.b - p0.b
fild dword[d1] ;d1 = p1.b - p0.b
fild dword[d2] ;d2 = p2.b - p0.b
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st2
fsubp
fistp dword[dbdx] ;dbdx = (int) (fdy2*d1 - fdy1*d2)
fld dword[fdx1]
fmul st0,st1
fld dword[fdy2]
fld dword[fdx2]
fmul st0,st3
fsub st0,st1
fistp dword[dbdx] ;dbdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fsubp
fistp dword[dbdy] ;dbdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
end if
 
if INTERP_ST eq 1
317,19 → 307,15
mov eax,[edx+offs_zbup_s]
sub eax,[ebx+offs_zbup_s]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.s - p0.s
fild dword[d2]
fst dword[d2] ;d2 = p2.s - p0.s
fild dword[d1] ;d1 = p1.s - p0.s
fild dword[d2] ;d2 = p2.s - p0.s
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st1
fld dword[fdy2]
fmul st0,st3
fsub st0,st1
fmul st0,st2
fsubp
fistp dword[dsdx] ;dsdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
338,6 → 324,10
fistp dword[dsdy] ;dsdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
fincstp
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
 
mov eax,[ecx+offs_zbup_t]
sub eax,[ebx+offs_zbup_t]
345,10 → 335,8
mov eax,[edx+offs_zbup_t]
sub eax,[ebx+offs_zbup_t]
mov [d2],eax
fild dword[d1]
fst dword[d1] ;d1 = p1.t - p0.t
fild dword[d2]
fst dword[d2] ;d2 = p2.t - p0.t
fild dword[d1] ;d1 = p1.t - p0.t
fild dword[d2] ;d2 = p2.t - p0.t
 
fld dword[fdy1]
fmul st0,st1
366,6 → 354,10
fistp dword[dtdy] ;dtdy = (int) (fdx1*d2 - fdx2*d1)
ffree st0
fincstp
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
end if
 
if INTERP_STZ eq 1
374,10 → 366,8
fmul st0,st1
fstp dword[ebx+offs_zbup_sz] ;p0.sz = (float) p0.s * p0.z
fild dword[ebx+offs_zbup_t]
fmul st0,st1
fmulp
fstp dword[ebx+offs_zbup_tz] ;p0.tz = (float) p0.t * p0.z
ffree st0
fincstp
 
fild dword[ecx+offs_zbup_z]
fild dword[ecx+offs_zbup_s]
384,10 → 374,8
fmul st0,st1
fstp dword[ecx+offs_zbup_sz] ;p1.sz = (float) p1.s * p1.z
fild dword[ecx+offs_zbup_t]
fmul st0,st1
fmulp
fstp dword[ecx+offs_zbup_tz] ;p1.tz = (float) p1.t * p1.z
ffree st0
fincstp
 
fild dword[edx+offs_zbup_z]
fild dword[edx+offs_zbup_s]
394,41 → 382,37
fmul st0,st1
fstp dword[edx+offs_zbup_sz] ;p2.sz = (float) p2.s * p2.z
fild dword[edx+offs_zbup_t]
fmul st0,st1
fmulp
fstp dword[edx+offs_zbup_tz] ;p2.tz = (float) p2.t * p2.z
ffree st0
fincstp
 
fld dword[ecx+offs_zbup_sz]
fsub dword[ebx+offs_zbup_sz]
fst dword[d1] ;d1 = p1.sz - p0.sz
fsub dword[ebx+offs_zbup_sz] ;d1 = p1.sz - p0.sz
fld dword[edx+offs_zbup_sz]
fsub dword[ebx+offs_zbup_sz]
fst dword[d2] ;d2 = p2.sz - p0.sz
fsub dword[ebx+offs_zbup_sz] ;d2 = p2.sz - p0.sz
 
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st1
fld dword[fdy2]
fmul st0,st3
fsub st0,st1
fistp dword[dszdx] ;dszdx = (int) (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fmul st0,st2
fsubp
fstp dword[dszdx] ;dszdx = (fdy2*d1 - fdy1*d2)
fld dword[fdx2]
fmul st0,st2
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fistp dword[dszdy] ;dszdy = (int) (fdx1*d2 - fdx2*d1)
fstp dword[dszdy] ;dszdy = (fdx1*d2 - fdx2*d1)
ffree st0
fincstp
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
 
fld dword[ecx+offs_zbup_tz]
fsub dword[ebx+offs_zbup_tz]
fst dword[d1] ;d1 = p1.tz - p0.tz
fsub dword[ebx+offs_zbup_tz] ;d1 = p1.tz - p0.tz
fld dword[edx+offs_zbup_tz]
fsub dword[ebx+offs_zbup_tz]
fst dword[d2] ;d2 = p2.tz - p0.tz
fsub dword[ebx+offs_zbup_tz] ;d2 = p2.tz - p0.tz
 
fld dword[fdy1]
fmul st0,st1
435,7 → 419,7
fld dword[fdy2]
fmul st0,st3
fsub st0,st1
fistp dword[dtzdx] ;dtzdx = (int) (fdy2*d1 - fdy1*d2)
fstp dword[dtzdx] ;dtzdx = (fdy2*d1 - fdy1*d2)
ffree st0
fincstp
fld dword[fdx2]
443,13 → 427,16
fld dword[fdx1]
fmul st0,st2
fsub st0,st1
fistp dword[dtzdy] ;dtzdy = (int) (fdx1*d2 - fdx2*d1)
fstp dword[dtzdy] ;dtzdy = (fdx1*d2 - fdx2*d1)
ffree st0
fincstp
ffree st0 ;free d2
fincstp
ffree st0 ;free d1
fincstp
end if
 
; screen coordinates
 
mov eax,[zb]
mov edx,[eax+offs_zbuf_linesize]
imul edx,[ebx+offs_zbup_y]
465,10 → 452,13
 
mov dword[part],0
.cycle_0:
if DEBUG ;(3)
stdcall dbg_print,txt_sp,m_3
end if
mov ebx,[p0]
mov ecx,[p1]
mov edx,[p2]
cmp dword[part],0
cmp dword[part],0 ;if (part == 0)
jne .els_0
mov dword[update_left],1
mov dword[update_right],1
493,8 → 483,6
jmp .end_0
.els_0:
; second part
mov dword[update_left],0
mov dword[update_right],1
fldz
fld dword[fz]
fcompp ;if (fz > 0)
501,10 → 489,14
fstsw ax
sahf
jbe .els_2
mov dword[update_left],0
mov dword[update_right],1
mov [pr1],ecx
mov [pr2],edx
jmp .end_2
.els_2:
mov dword[update_left],1
mov dword[update_right],0
mov [l1],ecx
mov [l2],edx
.end_2:
515,37 → 507,78
.end_0:
 
; compute the values for the left edge
 
cmp dword[update_left],0 ;if (update_left)
je .end_upd_l
mov ebx,[l1]
mov ecx,[l2]
mov edx,[ecx+offs_zbup_y]
sub edx,[ebx+offs_zbup_y]
mov [dy1],edx ;dy1 = l2.y - l1.y
mov eax,[ecx+offs_zbup_x]
sub eax,[ebx+offs_zbup_x]
mov [dx1],eax ;dx1 = l2.x - l1.x
mov eax,[ecx+offs_zbup_y]
sub eax,[ebx+offs_zbup_y]
mov [dy1],eax ;dy1 = l2.y - l1.y
cmp eax,0 ;if (dy1 > 0)
cmp edx,0 ;if (dy1 > 0)
jle .els_3
mov eax,[dx1]
xor edx,edx
cmp eax,0
jl .otr_dx1
shl eax,16
xor edx,edx
div dword[dy1] ;eax = (dx1 << 16) / dy1
jmp .end_3
.otr_dx1:
neg eax
inc eax
shl eax,16
div dword[dy1] ;eax = (-dx1 << 16) / dy1
neg eax
inc eax
jmp .end_3
.els_3:
xor eax,eax
.end_3:
mov edx,[ebx+offs_zbup_x]
mov [x1],edx
mov dword[error],0
mov [x1],edx ;x1 = l1.x
mov dword[error],0 ;error = 0
mov dword[derror],eax
and dword[derror],0xffff
and dword[derror],0xffff ;derror = eax & 0x0000ffff
shr eax,16
mov [dxdy_min],eax
mov [dxdy_min],eax ;dxdy_min = eax >> 16
inc eax
mov [dxdy_max],eax
 
if DEBUG ;(4) update_left [dx1], [dy1], [dxdy_min], [dxdy_max]
push ecx edi
mov ecx,80
lea edi,[buf_param]
mov eax,[dx1]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[dy1]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[dxdy_min]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[dxdy_max]
stdcall convert_int_to_str,ecx
 
stdcall str_n_cat,edi,txt_nl,2
stdcall dbg_print,m_4,buf_param
pop edi ecx
end if
 
if INTERP_Z eq 1
mov eax,[l1]
mov eax,[eax+offs_zbup_z]
585,7 → 618,6
mov [dbdl_min],eax ;dbdl_min = (dbdy +dbdx*dxdy_min)
add eax,[dbdx]
mov [dbdl_max],eax ;dbdl_max = dbdl_min +dbdx
 
end if
if INTERP_ST eq 1
mov ebx,[l1]
635,30 → 667,86
je .end_upd_r
mov ebx,[pr1]
mov ecx,[pr2]
mov edx,[ebx+offs_zbup_x]
mov eax,[ecx+offs_zbup_x]
sub eax,[ebx+offs_zbup_x]
mov [dx2],eax ;dx2 = pr2.x - pr1.x
mov eax,[ecx+offs_zbup_y]
sub eax,[ebx+offs_zbup_y]
mov [dy2],eax ;dy2 = pr2.y - pr1.y
cmp eax,0 ;if (dy2 > 0)
sub eax,edx
;mov [dx2],eax ;dx2 = pr2.x - pr1.x
shl edx,16
mov [x2],edx ; x2 = pr1.x << 16
mov edx,[ecx+offs_zbup_y]
sub edx,[ebx+offs_zbup_y]
mov [dy2],edx ;dy2 = pr2.y - pr1.y
cmp edx,0 ;if (dy2 > 0)
jle .els_4
mov eax,[dx2]
xor edx,edx
cmp eax,0
jl .otr_dx2
shl eax,16
xor edx,edx
div dword[dy2] ;eax = (dx2 << 16) / dy2
jmp .end_4
.otr_dx2:
neg eax
inc eax ;dx2 *= -1
shl eax,16
div dword[dy2] ;eax = (-dx2 << 16) / dy2
neg eax
inc eax
jmp .end_4
.els_4:
xor eax,eax
.end_4:
mov [dx2dy2],eax
 
if DEBUG ;(5) update_right [dx2dy2], [dy2], [pr1.x], [pr2.x]
push ecx edi
mov eax,[dx2dy2]
shr eax,16
mov ecx,80
lea edi,[buf_param]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[dy2]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov ebx,[pr1]
mov eax,[ebx+offs_zbup_x]
shl eax,16
mov [x2],eax ; x2 = pr1.x << 16
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov ebx,[pr2]
mov eax,[ebx+offs_zbup_x]
stdcall convert_int_to_str,ecx
 
stdcall str_n_cat,edi,txt_nl,2
stdcall dbg_print,m_5,buf_param
pop edi ecx
end if
.end_upd_r:
 
; we draw all the scan line of the part
if DEBUG ;[nb_lines]
push ecx edi
mov eax,[nb_lines]
mov ecx,80
lea edi,[buf_param]
stdcall convert_int_to_str,ecx
 
stdcall str_n_cat,edi,txt_nl,2
stdcall dbg_print,f_fill_tr_nl,buf_param
pop edi ecx
end if
 
.beg_w_lin:
cmp dword[nb_lines],0 ;while (nb_lines>0)
jle .end_w_lin
674,6 → 762,34
mov [n],eax ;n = (x2 >> 16) - x1
imul edi,PSZB
add edi,[pp1] ;pp = pp1 + x1 * PSZB
 
if DEBUG ;[n], [x1], [x2]>>16
push ecx edi
mov eax,[n]
mov ecx,80
lea edi,[buf_param]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[x1]
stdcall convert_int_to_str,ecx
stdcall str_n_cat,edi,txt_zp_sp,2
stdcall str_len,edi
add edi,eax
sub ecx,eax
 
mov eax,[x2]
shr eax,16
stdcall convert_int_to_str,ecx
 
stdcall str_n_cat,edi,txt_nl,2
stdcall dbg_print,f_fill_tr_nll,buf_param
pop edi ecx
end if
 
if INTERP_Z eq 1
mov eax,[x1]
shl eax,1
702,7 → 818,11
mov eax,[tz1]
mov [t_z],eax
end if
 
align 4
.cycle_1: ;while (n>=3)
cmp dword[n],3
jl .cycle_2
PUT_PIXEL 0
PUT_PIXEL 1
PUT_PIXEL 2
712,9 → 832,10
end if
add edi,4*PSZB
sub dword[n],4
cmp dword[n],3
jge .cycle_1
jmp .cycle_1
.cycle_2: ;while (n>=0)
cmp dword[n],0
jl .cycle_2_end
PUT_PIXEL 0
if INTERP_Z eq 1
add dword[pz],2 ;=sizeof(uint)
721,14 → 842,14
end if
add edi,PSZB
dec dword[n]
cmp dword[n],0
jge .cycle_2
end if
jmp .cycle_2
.cycle_2_end:
end if ;проверка от макроса DRAW_LINE
 
; left edge
mov eax,[derror]
add [error],eax
cmp eax,0 ;if (error > 0)
cmp dword[error],0 ;if (error > 0)
jle .els_er
sub dword[error],0x10000
mov eax,[dxdy_max]
808,6 → 929,7
cmp dword[part],2
jl .cycle_0
.end_f:
popad
ret
endp