/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm |
---|
1,3 → 1,9 |
; |
; Макрос DRAW_LINE имеет параметр code, от которого зависит |
; будет ли включен код или объявлены переменные. |
; В версии на C++ параметра code нет, потому что там переменные |
; можно ставить в любом месте функции, в asm версии такое не проходит. |
; |
INTERP_Z equ 1 |
230,20 → 236,29 |
DRAW_LINE_M equ 1 |
macro DRAW_LINE |
macro DRAW_LINE code |
{ |
if TGL_FEATURE_RENDER_BITS eq 24 |
if code eq 0 |
s dd ? ;uint |
t dd ? ;uint |
dsdx dd ? ;int |
dtdx dd ? ;int |
fz dd ? ;float |
zinv dd ? ;float |
end if |
if code eq 1 |
mov eax,[x2] |
sar eax,16 |
mov edi,[x1] |
sub eax,edi |
sub eax,[x1] |
mov [n],eax ;n = (x2 >> 16) - x1 |
fld1 |
fild dword[z1] |
fst dword[f_z] ;fz = (float)z1 |
fst dword[fz] ;fz = (float)z1 |
;fld1 |
fdivp |
fstp dword[zinv] ;zinv = 1.0 / fz |
mov edi,[x1] |
imul edi,PSZB |
add edi,[pp1] ;pp = (pp1 + x1 * PSZB) |
mov eax,[x1] |
277,9 → 292,9 |
fmul dword[zinv] |
fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv ) |
fld1 |
fld dword[f_z] |
fld dword[fz] |
fadd dword[fndzdx] |
fst dword[f_z] ;fz += fndzdx |
fst dword[fz] ;fz += fndzdx |
;fld1 |
fdivp |
fstp dword[zinv] ;zinv = 1.0 / fz |
329,6 → 344,7 |
jmp .cycle_3 |
.cycle_3_end: |
end if |
end if |
} |
align 4 |
339,8 → 355,6 |
fndzdx dd ? ;float |
ndszdx dd ? ;float |
ndtzdx dd ? ;float |
zinv dd ? ;float |
f_z dd ? ;float - переменная отвечающая за геометрию текстуры |
include 'ztriangle.inc' |
end if |
363,6 → 377,7 |
macro PUT_PIXEL _a |
{ |
local .end_0 |
; int s,t; |
mov eax,[z] |
shr eax,ZB_POINT_Z_FRAC_BITS |
mov [zz],eax |
/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc |
---|
28,7 → 28,7 |
fdx2 dd ? ;float |
fdy1 dd ? ;float |
fdy2 dd ? ;float |
fz dd ? ;float - переменная отвечающая за геометрию фигуры |
fz dd ? ;float |
d1 dd ? ;float |
d2 dd ? ;float |
pz1 dd ? ;unsigned short* |
56,8 → 56,6 |
z dd ? ;uint |
zz dd ? ;uint |
n dd ? ;int - длинна горизонтальной линии в пикселях |
if INTERP_Z eq 1 |
z1 dd ? ;int |
dzdx dd ? ;int |
81,16 → 79,15 |
dbdy dd ? |
dbdl_min dd ? |
dbdl_max dd ? |
or1 dd ? ;uint |
og1 dd ? ;uint |
ob1 dd ? ;uint |
end if |
if INTERP_ST eq 1 |
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 |
109,12 → 106,21 |
s_z dd ? ;float |
t_z dd ? ;float |
end if |
if (INTERP_ST eq 1) | (DRAW_LINE_M eq 1) |
n dd ? ;int - длинна горизонтальной линии в пикселях |
if INTERP_RGB eq 1 |
or1 dd ? ;uint |
og1 dd ? ;uint |
ob1 dd ? ;uint |
end if |
if INTERP_ST eq 1 |
s dd ? ;uint |
t dd ? ;uint |
dsdx dd ? ;int |
dtdx dd ? ;int |
end if |
if DRAW_LINE_M eq 1 |
DRAW_LINE 0 ;переменные делаются в макросе |
end if |
endl |
pushad |
681,7 → 687,7 |
jle .end_w_lin |
dec dword[nb_lines] |
if DRAW_LINE_M eq 1 |
DRAW_LINE |
DRAW_LINE 1 |
else |
; generic draw line |
mov eax,[x2] |
872,6 → 878,7 |
fstp dword[tz1] |
end if |
.end_er: |
; right edge |
mov eax,[dx2dy2] |
add [x2],eax |
/programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm |
---|
File deleted |
/programs/develop/libraries/TinyGL/asm_fork/examples/text_1.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |