Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5186 → Rev 5187

/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm
14,7 → 14,7
mov eax,[ecx+offs_zbup_b]
shr eax,8
mov [colorB],al ;colorB=p2.b>>8
else
;else
; color=RGB_TO_PIXEL(p2->r,p2->g,p2->b);
end if
}
29,6 → 29,7
cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
jl .end_0
;edi = pp
mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24
mov cl,[colorR]
mov ch,[colorG]
35,10 → 36,9
mov word[edi+3*_a],cx
mov cl,[colorB]
mov byte[edi+3*_a +2],cl
else
;else
; pp[_a]=color;
end if
mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
.end_0:
mov eax,[dzdx]
add [z],eax
75,55 → 75,67
 
macro PUT_PIXEL _a
{
local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
jl .end_0
;edi = pp
mov word[ebx+2*_a],ax ;пишем в буфер глубины новое значение
if TGL_FEATURE_RENDER_BITS eq 24
; if (zz >= pz[_a]) {
; pp[3 * _a]=or1 >> 8;
; pp[3 * _a + 1]=og1 >> 8;
; pp[3 * _a + 2]=ob1 >> 8;
; pz[_a]=zz;
; }
mov eax,[dzdx]
add [z],eax
; og1+=dgdx;
; or1+=drdx;
; ob1+=dbdx;
elseif TGL_FEATURE_RENDER_BITS eq 16
; if (zz >= pz[_a]) {
mov eax,[or1]
mov cl,ah
mov eax,[og1]
mov ch,ah
mov word[edi+3*_a],cx
mov eax,[ob1]
mov byte[edi+3*_a +2],ah
end if
if TGL_FEATURE_RENDER_BITS eq 16
; tmp=rgb & 0xF81F07E0;
; pp[_a]=tmp | (tmp >> 16);
; pz[_a]=zz;
; }
; z+=dzdx;
; rgb=(rgb+drgbdx) & ( ~ 0x00200800);
else
; if (zz >= pz[_a]) {
;else
; pp[_a] = RGB_TO_PIXEL(or1, og1, ob1);
; pz[_a]=zz;
; }
end if
.end_0:
mov eax,[dzdx]
add [z],eax
; og1+=dgdx;
; or1+=drdx;
; ob1+=dbdx;
if TGL_FEATURE_RENDER_BITS eq 16
; rgb=(rgb+drgbdx) & ( ~ 0x00200800);
end if
if TGL_FEATURE_RENDER_BITS <> 16
mov eax,[dgdx]
add [og1],eax
mov eax,[drdx]
add [or1],eax
mov eax,[dbdx]
add [ob1],eax
end if
}
 
DRAW_LINE_M equ 1
;;;DRAW_LINE_M equ 1
 
macro DRAW_LINE code
{
local .cycle_0
local .cycle_1
if TGL_FEATURE_RENDER_BITS eq 16
if code eq 0
; register unsigned short *pz;
; register PIXEL *pp;
; register unsigned int tmp,z,zz,rgb,drgbdx;
; register int n;
pz dd ? ;uint*
tmp dd ? ;uint
z dd ? ;uint
zz dd ? ;uint
rgb dd ? ;uint
drgbdx dd ? ;uint
n dd ? ;int
end if
if code eq 1
; n=(x2 >> 16) - x1;
mov eax,[x2]
shr eax,16
sub eax,[x1]
mov [n],eax ;n = (x2 >> 16) - x1
; pp=pp1+x1;
; pz=pz1+x1;
; z=z1;
131,21 → 143,27
; rgb|=(g1 >> 5) & 0x000007FF;
; rgb|=(b1 << 5) & 0x001FF000;
; drgbdx=_drgbdx;
; while (n>=3) {
; PUT_PIXEL(0);
; PUT_PIXEL(1);
; PUT_PIXEL(2);
; PUT_PIXEL(3);
; pz+=4;
; pp+=4;
; n-=4;
; }
; while (n>=0) {
; PUT_PIXEL(0);
; pz+=1;
; pp+=1;
; n-=1;
; }
align 4
.cycle_0: ;while (n>=3)
cmp dword[n],3
jl .cycle_1
PUT_PIXEL 0
PUT_PIXEL 1
PUT_PIXEL 2
PUT_PIXEL 3
add dword[pz],8
add edi,4
sub [n],4
jmp .cycle_0
.cycle_1: ;while (n>=0)
cmp dword[n],0
jl .cycle_1_end
PUT_PIXEL 0
add dword[pz],2
inc edi
dec dword[n]
jmp .cycle_1
.cycle_1_end:
end if
end if
}
171,27 → 189,31
 
macro DRAW_INIT
{
; texture=zb->current_texture;
mov eax,[zb]
mov eax,[eax+offs_zbuf_current_texture]
mov [texture],eax
}
 
macro PUT_PIXEL _a
{
; zz=z >> ZB_POINT_Z_FRAC_BITS;
local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
jl .end_0
; pz[_a]=zz;
if TGL_FEATURE_RENDER_BITS eq 24
; unsigned char *ptr;
; if (zz >= pz[_a]) {
; ptr = texture + (((t & 0x3FC00000) | s) >> 14) * 3;
; pp[3 * _a]= ptr[0];
; pp[3 * _a + 1]= ptr[1];
; pp[3 * _a + 2]= ptr[2];
; pz[_a]=zz;
; }
else
; if (zz >= pz[_a]) {
; pp[_a]=texture[((t & 0x3FC00000) | s) >> 14];
; pz[_a]=zz;
; }
end if
.end_0:
mov eax,[dzdx]
add [z],eax
mov eax,[dsdx]
220,8 → 242,11
 
macro DRAW_INIT
{
; texture=zb->current_texture;
; fdzdx=(float)dzdx;
mov eax,[zb]
mov eax,[eax+offs_zbuf_current_texture]
mov [texture],eax
fild dword[dzdx]
fstp dword[fdzdx]
; fndzdx=NB_INTERP * fdzdx;
; ndszdx=NB_INTERP * dszdx;
; ndtzdx=NB_INTERP * dtzdx;
229,23 → 254,25
 
macro PUT_PIXEL _a
{
; zz=z >> ZB_POINT_Z_FRAC_BITS;
local .end_0
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
jl .end_0
; pz[_a]=zz;
if TGL_FEATURE_RENDER_BITS eq 24
; unsigned char *ptr;
; if (zz >= pz[_a]) {
; ptr = texture + (((t & 0x3FC00000) | (s & 0x003FC000)) >> 14) * 3;
; pp[3 * _a]= ptr[0];
; pp[3 * _a + 1]= ptr[1];
; pp[3 * _a + 2]= ptr[2];
; pz[_a]=zz;
; }
else
; if (zz >= pz[_a]) {
; pp[_a]=*(PIXEL *)((char *)texture+
; (((t & 0x3FC00000) | (s & 0x003FC000)) >> (17 - PSZSH)));
; pz[_a]=zz;
; }
end if
.end_0:
mov eax,[dzdx]
add [z],eax
mov eax,[dsdx]
261,12 → 288,11
if TGL_FEATURE_RENDER_BITS eq 24
if code eq 0
pz dd ? ;uint *
;edi = pp dd ?
s dd ? ;uint
t dd ? ;uint
z dd ? ;uint
zz dd ? ;uint
n dd ? ;int
n1 dd ? ;int - длинна горизонтальной линии в пикселях
dsdx dd ? ;int
dtdx dd ? ;int
s_z dd ? ;float
275,7 → 301,7
zinv dd ? ;float
end if
if code eq 1
; n=(x2>>16)-x1;
; n1=(x2>>16)-x1;
; fz=(float)z1;
; zinv=1.0 / fz;
; pp=(pp1 + x1 * PSZB);
283,7 → 309,7
; z=z1;
; sz=sz1;
; tz=tz1;
; while (n>=(NB_INTERP-1)) {
; while (n1>=(NB_INTERP-1)) {
; {
; float ss,tt;
; ss=(sz * zinv);
305,7 → 331,7
; PUT_PIXEL(7);
; pz+=NB_INTERP;
; pp=(pp + NB_INTERP * PSZB);
; n-=NB_INTERP;
; n1-=NB_INTERP;
; sz+=ndszdx;
; tz+=ndtzdx;
; }
318,11 → 344,11
; dsdx= (int)( (dszdx - ss*fdzdx)*zinv );
; dtdx= (int)( (dtzdx - tt*fdzdx)*zinv );
; }
; while (n>=0) {
; PUT_PIXEL(0);
; while (n1>=0) {
;;; PUT_PIXEL 0
; pz+=1;
; pp=(PIXEL *)((char *)pp + PSZB);
; n-=1;
dec dword[n1]
; }
end if
end if
333,9 → 359,9
locals
texture dd ? ;PIXEL *
fdzdx dd ? ;float
fndzdx dd ?
ndszdx dd ?
ndtzdx dd ?
fndzdx dd ? ;float
ndszdx dd ? ;float
ndtzdx dd ? ;float
include 'ztriangle.inc'
 
end if
350,27 → 376,37
 
macro DRAW_INIT
{
; texture=zb->current_texture;
mov eax,[zb]
mov eax,[eax+offs_zbuf_current_texture]
mov [texture],eax
}
 
macro PUT_PIXEL _a
{
; float zinv;
local .end_0
; int s,t;
; zz=z >> ZB_POINT_Z_FRAC_BITS;
; if (zz >= pz[_a]) {
; zinv= 1.0 / (float) z;
; s= (int) (sz * zinv);
; t= (int) (tz * zinv);
mov eax,[z]
shr eax,ZB_POINT_Z_FRAC_BITS
mov [zz],eax
mov ebx,[pz]
cmp ax,word[ebx+2*_a] ;if (zz >= pz[_a])
jl .end_0
; pz[_a]=zz;
fild dword[z]
fld dword[s_z]
fdiv st0,st1
;fistp dword[...s...] ;s = (int) (s_z / (float) z)
; t= (int) (t_z / (float) z);
; pp[_a]=texture[((t & 0x3FC00000) | s) >> 14];
; pz[_a]=zz;
; }
.end_0:
mov eax,[dzdx]
add [z],eax
mov eax,[dszdx]
add [sz],eax
mov eax,[dtzdx]
add [tz],eax
fld dword[dszdx]
fadd dword[s_z]
fstp dword[s_z]
fld dword,[dtzdx]
fadd dword[t_z]
fstp dword[t_z]
}
 
align 4