Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6140 → Rev 6141

/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm
1,4 → 1,37
;
; Опции для функций:
;
;INTERP_Z - использование Z буфера (всегда включено)
;INTERP_RGB - сглажевание цветов
;INTERP_ST - наложение текстуры в ортогональной проэкции
;INTERP_STZ - наложение текстуры в перспективной проэкции
;
; Функции рисования треугольников:
;
;ZB_fillTriangleFlat - треугольник одного цвета
;ZB_fillTriangleSmooth - треугольник с разными цветами вершин
;ZB_fillTriangleMapping - треугольник с текстурой в ортогональной проэкции
;ZB_fillTriangleMappingPerspective - треугольник с текстурой в перспективной проэкции
;
 
macro calc_d1d2 f, r1, r2
{
fld dword[fdy2]
fmul st0,st2
fld dword[fdy1]
fmul st0,st2
fsubp
f#stp dword[r1] ;r1 = (fdy2*d1 - fdy1*d2)
fld dword[fdx1]
fmulp
fld dword[fdx2]
fmul st0,st2
fsubp
f#stp dword[r2] ;r2 = (fdx1*d2 - fdx2*d1)
ffree st0 ;d1
fincstp
}
 
INTERP_Z equ 1
 
macro DRAW_INIT
120,7 → 153,6
macro PUT_PIXEL _a
{
local .end_0
local .in_mem
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
130,12 → 162,10
if TGL_FEATURE_RENDER_BITS eq 24
mov ebx,[t]
and ebx,0x3fc00000
or ebx,[s]
mov eax,[s]
and eax,0x003fc000
or ebx,eax
shr ebx,14
cmp ebx,256*256-1 ;проверка на выход за пределы текстуры
jl .in_mem ;координата 1.0,1.0 может выползать
mov ebx,256*256-1 ;переход на последний пиксель текстуры
.in_mem:
imul ebx,3
add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | s) >> 14) * 3
mov ax,word[ebx]
193,7 → 223,6
macro PUT_PIXEL _a
{
local .end_0
local .in_mem
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
cmp ax,word[esi+2*_a] ;if (zz >= pz[_a])
207,15 → 236,6
and eax,0x003fc000
or ebx,eax
shr ebx,14
if 1
; не знаю нужна ли сдесь эта проверка
; функция ZB_fillTriangleMapping без нее не работает
; на всякий случай делаю и тут такое же
cmp ebx,256*256-1 ;проверка на выход за пределы текстуры
jl .in_mem ;координата 1.0,1.0 может выползать
mov ebx,256*256-1 ;переход на последний пиксель текстуры
.in_mem:
end if
imul ebx,3
add ebx,[texture] ;ptr = texture + (((t & 0x3fc00000) | (s & 0x003FC000)) >> 14) * 3
mov ax,word[ebx]