forked from KolibriOS/kolibrios
View3ds 0.71 by macgub: new glass effect, bugfixing
git-svn-id: svn://kolibrios.org@8232 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f75ba1987d
commit
32941c906d
@ -11,23 +11,6 @@ vec_z equ 8
|
|||||||
;------------------------ edi - pointer to 2nd 3d point ---
|
;------------------------ edi - pointer to 2nd 3d point ---
|
||||||
;------------------------ ebx - pointer to result vector --
|
;------------------------ ebx - pointer to result vector --
|
||||||
;---------------------- out : none ------------------------
|
;---------------------- out : none ------------------------
|
||||||
if 0
|
|
||||||
make_vector:
|
|
||||||
fninit
|
|
||||||
fild word[edi+x3d] ;edi+x3d
|
|
||||||
fisub word[esi+x3d] ;esi+x3d
|
|
||||||
fstp dword[ebx+vec_x]
|
|
||||||
|
|
||||||
fild word[edi+y3d]
|
|
||||||
fisub word[esi+y3d]
|
|
||||||
fstp dword[ebx+vec_y]
|
|
||||||
|
|
||||||
fild word[edi+z3d]
|
|
||||||
fisub word[esi+z3d]
|
|
||||||
fstp dword[ebx+vec_z]
|
|
||||||
|
|
||||||
ret
|
|
||||||
end if
|
|
||||||
reverse_mx_3x3:
|
reverse_mx_3x3:
|
||||||
; esi - source matrix
|
; esi - source matrix
|
||||||
; edi - desired reversed matrix
|
; edi - desired reversed matrix
|
||||||
@ -215,6 +198,20 @@ ret
|
|||||||
;---------------------------- edi - pointer to vector -----
|
;---------------------------- edi - pointer to vector -----
|
||||||
;----------------------- out : none
|
;----------------------- out : none
|
||||||
normalize_vector:
|
normalize_vector:
|
||||||
|
if Ext >= SSE3
|
||||||
|
movups xmm0,[edi]
|
||||||
|
andps xmm0,[zero_hgst_dd]
|
||||||
|
movups xmm1,xmm0
|
||||||
|
mulps xmm0,xmm0
|
||||||
|
haddps xmm0,xmm0
|
||||||
|
haddps xmm0,xmm0
|
||||||
|
rsqrtps xmm0,xmm0
|
||||||
|
mulps xmm0,xmm1
|
||||||
|
movlps [edi],xmm0
|
||||||
|
movhlps xmm0,xmm0
|
||||||
|
movss [edi+8],xmm0
|
||||||
|
else
|
||||||
|
|
||||||
fninit
|
fninit
|
||||||
fld dword [edi+vec_x]
|
fld dword [edi+vec_x]
|
||||||
fmul st, st
|
fmul st, st
|
||||||
@ -244,6 +241,7 @@ normalize_vector:
|
|||||||
fstp dword [edi+vec_y]
|
fstp dword [edi+vec_y]
|
||||||
fdivr dword [edi+vec_z]
|
fdivr dword [edi+vec_z]
|
||||||
fstp dword [edi+vec_z]
|
fstp dword [edi+vec_z]
|
||||||
|
end if
|
||||||
ret
|
ret
|
||||||
;------------------in: -------------------------
|
;------------------in: -------------------------
|
||||||
;------------------ esi - pointer to 1st vector
|
;------------------ esi - pointer to 1st vector
|
||||||
@ -252,6 +250,16 @@ ret
|
|||||||
;------------------ st0 - dot-product
|
;------------------ st0 - dot-product
|
||||||
dot_product:
|
dot_product:
|
||||||
fninit
|
fninit
|
||||||
|
;if Ext >=SSE3
|
||||||
|
; movups xmm0,[esi]
|
||||||
|
; movups xmm1,[edi]
|
||||||
|
; andps xmm0,[zero_hgst_dd]
|
||||||
|
; mulps xmm0,xmm1
|
||||||
|
; haddps xmm0,xmm0
|
||||||
|
; haddps xmm0,xmm0
|
||||||
|
; movss [esp-4],xmm0
|
||||||
|
; fld dword[esp-4]
|
||||||
|
;else
|
||||||
fld dword [esi+vec_x]
|
fld dword [esi+vec_x]
|
||||||
fmul dword [edi+vec_x]
|
fmul dword [edi+vec_x]
|
||||||
fld dword [esi+vec_y]
|
fld dword [esi+vec_y]
|
||||||
@ -260,6 +268,7 @@ dot_product:
|
|||||||
fmul dword [edi+vec_z]
|
fmul dword [edi+vec_z]
|
||||||
faddp
|
faddp
|
||||||
faddp
|
faddp
|
||||||
|
;end if
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; DOS version Coded by Mikolaj Felix aka Majuma
|
; DOS version Coded by Mikolaj Felix aka Majuma
|
||||||
|
329
programs/demos/3DS/3STENCIL.INC
Normal file
329
programs/demos/3DS/3STENCIL.INC
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
ROUND2 equ 10
|
||||||
|
|
||||||
|
stencil_tri:
|
||||||
|
; procedure calculate triangle in stencil buffer
|
||||||
|
; ----------------in - eax - x1 shl 16 + y1 ----------------------
|
||||||
|
; -------------------- ebx - x2 shl 16 + y2 ----------------------
|
||||||
|
; -------------------- ecx - x3 shl 16 + y3 ----------------------
|
||||||
|
; -------------------- esi - pointer to s-buffer -----------------
|
||||||
|
; -------------------- xmm0 - lo -> hi z1, z2, z3 as dword float
|
||||||
|
|
||||||
|
.x1 equ [ebp-2]
|
||||||
|
.y1 equ [ebp-4]
|
||||||
|
.x2 equ [ebp-6]
|
||||||
|
.y2 equ [ebp-8]
|
||||||
|
.x3 equ [ebp-10]
|
||||||
|
.y3 equ [ebp-12]
|
||||||
|
|
||||||
|
.dx12 equ dword[ebp-20]
|
||||||
|
.dx13 equ dword[ebp-24]
|
||||||
|
.dx23 equ dword[ebp-28]
|
||||||
|
.dz12 equ dword[ebp-32]
|
||||||
|
.dz13 equ dword[ebp-36]
|
||||||
|
.dz23 equ dword[ebp-40]
|
||||||
|
.zz2 equ [ebp-44]
|
||||||
|
.zz1 equ [ebp-48]
|
||||||
|
.z3 equ [ebp-56]
|
||||||
|
.z2 equ [ebp-60]
|
||||||
|
.z1 equ [ebp-64]
|
||||||
|
.s_buff equ [ebp-68]
|
||||||
|
|
||||||
|
push ebp
|
||||||
|
mov ebp,esp
|
||||||
|
sub esp,128
|
||||||
|
and ebp,0xfffffff0
|
||||||
|
.sort2:
|
||||||
|
cmp ax,bx
|
||||||
|
jle .sort1
|
||||||
|
xchg eax,ebx
|
||||||
|
shufps xmm0,xmm0,11100001b
|
||||||
|
.sort1:
|
||||||
|
cmp bx,cx
|
||||||
|
jle .sort3
|
||||||
|
xchg ebx,ecx
|
||||||
|
shufps xmm0,xmm0,11011000b
|
||||||
|
jmp .sort2
|
||||||
|
.sort3:
|
||||||
|
mov .y1,eax ; store triangle coordinates in user friendly variables
|
||||||
|
mov .y2,ebx
|
||||||
|
mov .y3,ecx
|
||||||
|
|
||||||
|
; mov edx,100.11
|
||||||
|
; movd xmm0,edx
|
||||||
|
; shufps xmm0,xmm0,11100000b
|
||||||
|
|
||||||
|
movaps .z1,xmm0
|
||||||
|
; mov dword .z1,edx
|
||||||
|
; mov .z2,edx
|
||||||
|
; mov .z3,edx
|
||||||
|
mov .s_buff,esi
|
||||||
|
|
||||||
|
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
|
||||||
|
and edx,ebx ; if *all* of them are negative a sign flag is raised
|
||||||
|
and edx,ecx
|
||||||
|
and edx,eax
|
||||||
|
test edx,80008000h ; Check both X&Y at once
|
||||||
|
jne .loop2_end
|
||||||
|
|
||||||
|
mov bx,.y2 ; calc delta 12
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .dx12_make
|
||||||
|
mov .dx12,0
|
||||||
|
mov .dz12,0
|
||||||
|
jmp .dx12_done
|
||||||
|
.dx12_make:
|
||||||
|
mov ax,.x2
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND2
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx12,eax
|
||||||
|
|
||||||
|
movss xmm1,.z2
|
||||||
|
cvtsi2ss xmm2,ebx
|
||||||
|
subss xmm1,.z1
|
||||||
|
divss xmm1,xmm2
|
||||||
|
movss .dz12,xmm1
|
||||||
|
; mov .dz12, dword 0.11
|
||||||
|
|
||||||
|
.dx12_done:
|
||||||
|
mov bx,.y3 ; calc delta 13
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .dx13_make
|
||||||
|
mov .dx13,0
|
||||||
|
mov .dz13,0
|
||||||
|
jmp .dx13_done
|
||||||
|
.dx13_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND2
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx13,eax
|
||||||
|
|
||||||
|
movss xmm1,.z3
|
||||||
|
cvtsi2ss xmm2,ebx
|
||||||
|
subss xmm1,.z1
|
||||||
|
divss xmm1,xmm2
|
||||||
|
movss .dz13,xmm1
|
||||||
|
; mov .dz13, dword 0.11
|
||||||
|
|
||||||
|
.dx13_done:
|
||||||
|
mov bx,.y3 ; calc delta 23
|
||||||
|
sub bx,.y2
|
||||||
|
jnz .dx23_make
|
||||||
|
mov .dx23,0
|
||||||
|
mov .dz23,0
|
||||||
|
jmp .dx23_done
|
||||||
|
.dx23_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x2
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND2
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx23,eax
|
||||||
|
|
||||||
|
movss xmm1,.z3
|
||||||
|
cvtsi2ss xmm2,ebx
|
||||||
|
subss xmm1,.z2
|
||||||
|
divss xmm1,xmm2
|
||||||
|
movss .dz23,xmm1
|
||||||
|
|
||||||
|
.dx23_done:
|
||||||
|
mov edx,.z1
|
||||||
|
|
||||||
|
mov .zz1,edx
|
||||||
|
mov .zz2,edx
|
||||||
|
movsx eax,word .x1
|
||||||
|
shl eax,ROUND2 ; eax - cur x1
|
||||||
|
mov ebx,eax ; ebx - cur x2
|
||||||
|
|
||||||
|
mov cx,.y1
|
||||||
|
cmp cx,.y2
|
||||||
|
jge .loop1_end
|
||||||
|
.loop1:
|
||||||
|
|
||||||
|
pushad
|
||||||
|
sar ebx,ROUND2
|
||||||
|
sar eax,ROUND2
|
||||||
|
; movq xmm0,.zz1
|
||||||
|
movlps xmm0,.zz1
|
||||||
|
; mov edx,0.11
|
||||||
|
; movd xmm0,edx
|
||||||
|
; shufps xmm0,xmm0,11100000b
|
||||||
|
mov esi,.s_buff
|
||||||
|
|
||||||
|
call stencil_line
|
||||||
|
|
||||||
|
popad
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx12
|
||||||
|
|
||||||
|
movss xmm1,.zz1
|
||||||
|
movss xmm2,.zz2
|
||||||
|
addss xmm1,.dz13
|
||||||
|
addss xmm2,.dz12
|
||||||
|
movss .zz1,xmm1
|
||||||
|
movss .zz2,xmm2
|
||||||
|
|
||||||
|
add cx,1
|
||||||
|
cmp cx,.y2
|
||||||
|
jl .loop1
|
||||||
|
|
||||||
|
.loop1_end:
|
||||||
|
|
||||||
|
mov edx,.z2
|
||||||
|
mov .zz2,edx
|
||||||
|
movsx ebx,word .x2
|
||||||
|
shl ebx,ROUND2
|
||||||
|
|
||||||
|
mov cx,.y2
|
||||||
|
cmp cx,.y3
|
||||||
|
jge .loop2_end
|
||||||
|
.loop2:
|
||||||
|
pushad
|
||||||
|
|
||||||
|
sar ebx,ROUND2
|
||||||
|
sar eax,ROUND2
|
||||||
|
movlps xmm0,.zz1
|
||||||
|
mov esi,.s_buff
|
||||||
|
|
||||||
|
|
||||||
|
call stencil_line
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx23
|
||||||
|
|
||||||
|
movss xmm1,.zz1
|
||||||
|
movss xmm2,.zz2
|
||||||
|
addss xmm1,.dz13
|
||||||
|
addss xmm2,.dz23
|
||||||
|
movss .zz1,xmm1
|
||||||
|
movss .zz2,xmm2
|
||||||
|
|
||||||
|
|
||||||
|
add cx,1
|
||||||
|
cmp cx,.y3
|
||||||
|
jl .loop2
|
||||||
|
.loop2_end:
|
||||||
|
|
||||||
|
add esp,128
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
stencil_line:
|
||||||
|
;----------------------------------------------------
|
||||||
|
;-------------in xmm0 - lo -> hi z1, z2
|
||||||
|
;--------------- eax - x1 ---------------------------
|
||||||
|
;--------------- ebx - x2 ---------------------------
|
||||||
|
;--------------- ecx - y-----------------------------
|
||||||
|
;--------------- esi - pointer to s-buffer
|
||||||
|
|
||||||
|
|
||||||
|
.dz equ [ebp-4]
|
||||||
|
.z2 equ [ebp-8]
|
||||||
|
.z1 equ [ebp-12]
|
||||||
|
.x2 equ [ebp-16]
|
||||||
|
.x1 equ [ebp-20]
|
||||||
|
.s_buf equ [ebp-24]
|
||||||
|
; cmp eax,ebx
|
||||||
|
; je @f
|
||||||
|
; int3
|
||||||
|
; @@:
|
||||||
|
push ebp
|
||||||
|
mov ebp,esp
|
||||||
|
sub esp,64
|
||||||
|
; cmp eax,0
|
||||||
|
; jg @f
|
||||||
|
;
|
||||||
|
; @@:
|
||||||
|
or cx,cx
|
||||||
|
jle .l_quit
|
||||||
|
|
||||||
|
cmp cx,[size_y_var]
|
||||||
|
jge .l_quit
|
||||||
|
|
||||||
|
movzx ecx,cx
|
||||||
|
mov .s_buf,esi
|
||||||
|
cmp eax,ebx
|
||||||
|
je .l_quit
|
||||||
|
jl .l_ok
|
||||||
|
|
||||||
|
xchg eax,ebx
|
||||||
|
shufps xmm0,xmm0,11100001b
|
||||||
|
.l_ok:
|
||||||
|
|
||||||
|
cmp ax,[size_x_var]
|
||||||
|
jge .l_quit
|
||||||
|
cmp bx,0
|
||||||
|
jle .l_quit
|
||||||
|
|
||||||
|
movlps .z1,xmm0
|
||||||
|
mov .x1,eax
|
||||||
|
mov .x2,ebx
|
||||||
|
|
||||||
|
sub ebx,eax
|
||||||
|
movss xmm0,.z2
|
||||||
|
cvtsi2ss xmm1,ebx
|
||||||
|
subss xmm0,.z1
|
||||||
|
divss xmm0,xmm1
|
||||||
|
movss .dz,xmm0
|
||||||
|
|
||||||
|
movzx edx,word[size_x_var]
|
||||||
|
cmp eax,1
|
||||||
|
jge @f
|
||||||
|
mov eax,.x1
|
||||||
|
neg eax
|
||||||
|
cvtsi2ss xmm2,eax
|
||||||
|
mulss xmm2,.dz
|
||||||
|
addss xmm2,.z1
|
||||||
|
movss .z1,xmm2
|
||||||
|
mov dword .x1,0
|
||||||
|
movzx edx,word[size_x_var]
|
||||||
|
sub edx,1
|
||||||
|
@@:
|
||||||
|
cmp .x2,edx
|
||||||
|
jl @f
|
||||||
|
mov .x2,edx
|
||||||
|
|
||||||
|
@@:
|
||||||
|
; mov eax,.x1
|
||||||
|
; cmp .x2,eax
|
||||||
|
; je .l_quit
|
||||||
|
movzx edx,word[size_x_var]
|
||||||
|
mov esi,.s_buf
|
||||||
|
mov eax,ecx ; y
|
||||||
|
mul edx
|
||||||
|
add eax,.x1
|
||||||
|
|
||||||
|
shl eax,2
|
||||||
|
add esi,eax
|
||||||
|
|
||||||
|
mov ecx,.x2
|
||||||
|
sub ecx,.x1
|
||||||
|
movss xmm2,.z1 ; cz
|
||||||
|
.ccalc:
|
||||||
|
movss xmm1,xmm2
|
||||||
|
cmpltss xmm1,dword[esi]
|
||||||
|
movd eax,xmm1
|
||||||
|
cmp eax,-1
|
||||||
|
jnz @f
|
||||||
|
movss dword[esi],xmm2
|
||||||
|
@@:
|
||||||
|
add esi,4
|
||||||
|
addss xmm2,.dz
|
||||||
|
sub ecx,1
|
||||||
|
jnz .ccalc
|
||||||
|
.l_quit:
|
||||||
|
mov esp,ebp
|
||||||
|
pop ebp
|
||||||
|
ret
|
@ -79,7 +79,7 @@ end if
|
|||||||
|
|
||||||
lea ebx,[eax*3]
|
lea ebx,[eax*3]
|
||||||
cmp [dr_flag],12 ; 32 bit col cause
|
cmp [dr_flag],12 ; 32 bit col cause
|
||||||
jne @f
|
jl @f
|
||||||
add ebx,eax
|
add ebx,eax
|
||||||
@@:
|
@@:
|
||||||
mov eax,[esi]
|
mov eax,[esi]
|
||||||
@ -87,7 +87,7 @@ end if
|
|||||||
.skip:
|
.skip:
|
||||||
add esi,3
|
add esi,3
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
jne @f
|
jl @f
|
||||||
inc esi
|
inc esi
|
||||||
@@:
|
@@:
|
||||||
inc dword .x
|
inc dword .x
|
||||||
@ -106,8 +106,8 @@ end if
|
|||||||
movzx ecx,word[size_x_var]
|
movzx ecx,word[size_x_var]
|
||||||
movzx eax,word[size_y_var]
|
movzx eax,word[size_y_var]
|
||||||
imul ecx,eax
|
imul ecx,eax
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
lea ecx,[ecx*3]
|
lea ecx,[ecx*3]
|
||||||
shr ecx,2
|
shr ecx,2
|
||||||
; mov ecx,SIZE_X*SIZE_Y*3/4
|
; mov ecx,SIZE_X*SIZE_Y*3/4
|
||||||
@ -169,7 +169,7 @@ if Ext >= SSE2
|
|||||||
mov esi,[screen_ptr]
|
mov esi,[screen_ptr]
|
||||||
mov edi,[Zbuffer_ptr]
|
mov edi,[Zbuffer_ptr]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
lea ebx,[ebx*3]
|
lea ebx,[ebx*3]
|
||||||
jmp .f
|
jmp .f
|
||||||
@@:
|
@@:
|
||||||
@ -182,7 +182,7 @@ if Ext >= SSE2
|
|||||||
push eax
|
push eax
|
||||||
.emb:
|
.emb:
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
movlps xmm1,[esi+3]
|
movlps xmm1,[esi+3]
|
||||||
movhps xmm1,[esi+6]
|
movhps xmm1,[esi+6]
|
||||||
movlps xmm2,[esi-3]
|
movlps xmm2,[esi-3]
|
||||||
@ -246,7 +246,7 @@ end if
|
|||||||
mov [edi+4],eax
|
mov [edi+4],eax
|
||||||
|
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
jne @f
|
jl @f
|
||||||
add esi,2
|
add esi,2
|
||||||
add ebx,2
|
add ebx,2
|
||||||
add edx,2
|
add edx,2
|
||||||
@ -264,7 +264,7 @@ end if
|
|||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je .e
|
jge .e
|
||||||
@@:
|
@@:
|
||||||
movsd
|
movsd
|
||||||
dec edi
|
dec edi
|
||||||
@ -562,8 +562,6 @@ generate_object2: ; torus
|
|||||||
pop ebp
|
pop ebp
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
generate_object3: ; heart
|
generate_object3: ; heart
|
||||||
;locals
|
;locals
|
||||||
; counter dw ?
|
; counter dw ?
|
||||||
@ -755,3 +753,5 @@ generate_object3: ; heart
|
|||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -751,7 +751,7 @@ if Ext>=SSE2
|
|||||||
movzx ecx,word[size_x_var] ;SIZE_X*3/4
|
movzx ecx,word[size_x_var] ;SIZE_X*3/4
|
||||||
|
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
lea ecx,[ecx*3+1]
|
lea ecx,[ecx*3+1]
|
||||||
shr ecx,2
|
shr ecx,2
|
||||||
@@:
|
@@:
|
||||||
@ -764,7 +764,7 @@ if Ext>=SSE2
|
|||||||
sub ecx,3
|
sub ecx,3
|
||||||
imul ecx,ebx
|
imul ecx,ebx
|
||||||
cmp [dr_flag],12 ; 32 bit per pix cause
|
cmp [dr_flag],12 ; 32 bit per pix cause
|
||||||
je @f
|
jge @f
|
||||||
lea ecx,[ecx*3]
|
lea ecx,[ecx*3]
|
||||||
shr ecx,4
|
shr ecx,4
|
||||||
lea ebx,[ebx *3]
|
lea ebx,[ebx *3]
|
||||||
@ -782,7 +782,7 @@ if Ext>=SSE2
|
|||||||
sub ecx,ebx
|
sub ecx,ebx
|
||||||
movups xmm1,[ecx]
|
movups xmm1,[ecx]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
movups xmm2,[edi-3]
|
movups xmm2,[edi-3]
|
||||||
movups xmm3,[edi+3]
|
movups xmm3,[edi+3]
|
||||||
jmp .f
|
jmp .f
|
||||||
@ -803,7 +803,7 @@ if Ext>=SSE2
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
movzx ecx,word[size_x_var]
|
movzx ecx,word[size_x_var]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
lea ecx,[ecx*3]
|
lea ecx,[ecx*3]
|
||||||
shr ecx,2
|
shr ecx,2
|
||||||
@@:
|
@@:
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
xobs dw 0 ;SIZE_X / 2 ;200 ;observer = camera
|
xobs dw 0 ;SIZE_X / 2 ;200 ;observer = camera
|
||||||
yobs dw 0 ;SIZE_Y / 2 ;200 ;coordinates
|
yobs dw 0 ;SIZE_Y / 2 ;200 ;coordinates
|
||||||
zobs dw -1000
|
zobs dw -1000
|
||||||
; size_x dw SIZE_X
|
|
||||||
; size_y dw SIZE_Y
|
|
||||||
|
|
||||||
re_alloc_flag db 0
|
re_alloc_flag db 0
|
||||||
angle_counter dw 0
|
angle_counter dw 0
|
||||||
@ -56,7 +54,6 @@
|
|||||||
vertices_index_ptr dd 0
|
vertices_index_ptr dd 0
|
||||||
|
|
||||||
|
|
||||||
; draw_win_at_first db 1
|
|
||||||
vertex_edit_no dw 0
|
vertex_edit_no dw 0
|
||||||
edit_start_x:
|
edit_start_x:
|
||||||
dw 0
|
dw 0
|
||||||
@ -76,7 +73,7 @@
|
|||||||
db 3
|
db 3
|
||||||
db 'shd. model'
|
db 'shd. model'
|
||||||
if Ext >= SSE3
|
if Ext >= SSE3
|
||||||
db 13
|
db 14
|
||||||
else
|
else
|
||||||
db 12
|
db 12
|
||||||
end if
|
end if
|
||||||
@ -269,6 +266,7 @@ flags: ; flags description
|
|||||||
db 'cenv'
|
db 'cenv'
|
||||||
db 'grdl'
|
db 'grdl'
|
||||||
db 'rphg'
|
db 'rphg'
|
||||||
|
db 'glas'
|
||||||
spd_f:
|
spd_f:
|
||||||
db 'idle'
|
db 'idle'
|
||||||
db 'full'
|
db 'full'
|
||||||
@ -279,15 +277,6 @@ flags: ; flags description
|
|||||||
onoff_f:
|
onoff_f:
|
||||||
db 'off '
|
db 'off '
|
||||||
db 'on '
|
db 'on '
|
||||||
; light_component_f:
|
|
||||||
; db 'norm ' ; diffuse |
|
|
||||||
; db 'min' ; specular | or sth. like this
|
|
||||||
; db 'max ' ; emmisive |
|
|
||||||
|
|
||||||
;; color_component_f:
|
|
||||||
;; db ' r '
|
|
||||||
;; db ' g '
|
|
||||||
;; db ' b '
|
|
||||||
|
|
||||||
blur_f: ; blur, fire
|
blur_f: ; blur, fire
|
||||||
db 'off '
|
db 'off '
|
||||||
@ -334,14 +323,6 @@ base_vector:
|
|||||||
db 'y +'
|
db 'y +'
|
||||||
labelyplusend:
|
labelyplusend:
|
||||||
|
|
||||||
;navigation_size = $ - labelvector
|
|
||||||
; db 'set color '
|
|
||||||
; db 'r -'
|
|
||||||
; db 'g +'
|
|
||||||
; db 'b -'
|
|
||||||
; db 'b +'
|
|
||||||
; db 'g -'
|
|
||||||
; db 'r +'
|
|
||||||
|
|
||||||
labelt:
|
labelt:
|
||||||
db 'DEUS CARITAS EST'
|
db 'DEUS CARITAS EST'
|
||||||
@ -357,13 +338,12 @@ base_vector:
|
|||||||
if Ext=SSE3
|
if Ext=SSE3
|
||||||
db ' (SSE3)'
|
db ' (SSE3)'
|
||||||
end if
|
end if
|
||||||
db ' 0.070',0
|
db ' 0.071',0
|
||||||
labellen:
|
labellen:
|
||||||
STRdata db '-1 '
|
STRdata db '-1 '
|
||||||
|
|
||||||
all_lights_size dw lightsend-lights
|
all_lights_size dw lightsend-lights
|
||||||
|
|
||||||
if USE_LFN
|
|
||||||
|
|
||||||
file_info:
|
file_info:
|
||||||
dd 0
|
dd 0
|
||||||
@ -373,20 +353,7 @@ if USE_LFN
|
|||||||
fptr dd 0 ;workarea
|
fptr dd 0 ;workarea
|
||||||
file_name:
|
file_name:
|
||||||
db '/rd/1/3d/house.3ds',0
|
db '/rd/1/3d/house.3ds',0
|
||||||
|
; db '/tmp0/1/ant.3ds',0
|
||||||
else
|
|
||||||
|
|
||||||
file_info:
|
|
||||||
dd 0
|
|
||||||
dd 0
|
|
||||||
fsize dd 1
|
|
||||||
dd workarea
|
|
||||||
dd hash_table
|
|
||||||
file_name:
|
|
||||||
db '/rd/1/teapot.3ds',0
|
|
||||||
end if
|
|
||||||
|
|
||||||
;I_END:
|
|
||||||
|
|
||||||
rb 256
|
rb 256
|
||||||
|
|
||||||
@ -448,14 +415,8 @@ align 16
|
|||||||
times 4 dd 0.0
|
times 4 dd 0.0
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
if USE_LFN = 0
|
|
||||||
hash_table rb 4096
|
|
||||||
SourceFile:
|
|
||||||
workarea rb 180000
|
|
||||||
else
|
|
||||||
SourceFile:
|
SourceFile:
|
||||||
workarea rb 180
|
workarea rb 180
|
||||||
end if
|
|
||||||
EndFile dd ?
|
EndFile dd ?
|
||||||
align 8
|
align 8
|
||||||
sinbeta dd ?;+32
|
sinbeta dd ?;+32
|
||||||
@ -478,29 +439,16 @@ align 8
|
|||||||
col2 dd ?
|
col2 dd ?
|
||||||
col3 dd ?
|
col3 dd ?
|
||||||
scale dd ? ; help scale variable
|
scale dd ? ; help scale variable
|
||||||
edges_counter dd ?
|
|
||||||
;==
|
;==
|
||||||
triangles_count_var dd ?
|
triangles_count_var dd ?
|
||||||
points_count_var dd ?
|
points_count_var dd ?
|
||||||
; triangles_ptr dd ?
|
|
||||||
; triangles_w_z_ptr dd ?
|
|
||||||
; triangles_normals_ptr dd ?
|
|
||||||
; points_normals_ptr dd ?
|
|
||||||
; points_normals_rot_ptr dd ?
|
|
||||||
; points_ptr dd ?
|
|
||||||
; points_rotated_ptr dd ?
|
|
||||||
; points_translated_ptr dd ?
|
|
||||||
; screen_ptr dd ?
|
|
||||||
; Zbuffer_ptr dd ?
|
|
||||||
; vertices_index_ptr dd ?
|
|
||||||
; edit_start_x:
|
|
||||||
dw ? ; don't change order
|
|
||||||
; edit_start_y dw ?
|
|
||||||
; edges_ptr dd ?
|
|
||||||
size_y_var:
|
size_y_var:
|
||||||
dw ?
|
yres_var dw ?
|
||||||
|
|
||||||
size_x_var:
|
size_x_var:
|
||||||
dw ?
|
xres_var dw ?
|
||||||
x_start:
|
x_start:
|
||||||
dw ?
|
dw ?
|
||||||
y_start:
|
y_start:
|
||||||
@ -512,6 +460,8 @@ align 8
|
|||||||
point_index2 dd ? ; } don't change order
|
point_index2 dd ? ; } don't change order
|
||||||
point_index3 dd ? ;-/
|
point_index3 dd ? ;-/
|
||||||
temp_col dw ?
|
temp_col dw ?
|
||||||
|
temp1 dd ?
|
||||||
|
temp2 dd ?
|
||||||
high dd ?
|
high dd ?
|
||||||
rand_seed dw ?
|
rand_seed dw ?
|
||||||
align 8
|
align 8
|
||||||
@ -531,41 +481,15 @@ align 8
|
|||||||
|
|
||||||
align 16
|
align 16
|
||||||
|
|
||||||
if USE_LFN = 0
|
|
||||||
points:
|
|
||||||
rw (EndFile-SourceFile)/12*3
|
|
||||||
points_count = ($-points)/6
|
|
||||||
triangles:
|
|
||||||
rw (EndFile-SourceFile)/12*3
|
|
||||||
triangles_count = ($-triangles)/6
|
|
||||||
align 16
|
|
||||||
real_points rd points_count*3 + 1
|
|
||||||
align 16
|
|
||||||
rotated_points_r rd points_count*3 + 1
|
|
||||||
align 16
|
|
||||||
points_rotated rw points_count*3 + 2 ;means translated
|
|
||||||
align 16
|
|
||||||
triangles_normals rb triangles_count * 12 ;
|
|
||||||
align 16
|
|
||||||
point_normals rb points_count * 12 ;one 3dvector - triple float dword x,y,z
|
|
||||||
align 16
|
|
||||||
point_normals_rotated rb points_count * 12
|
|
||||||
align 16
|
|
||||||
triangles_normals_rotated rb triangles_count * 12
|
|
||||||
|
|
||||||
else
|
|
||||||
points_count = 180000/6*3
|
points_count = 180000/6*3
|
||||||
triangles_count = 180000 / 6 ;($-triangles)/6
|
triangles_count = 180000 / 6 ;($-triangles)/6
|
||||||
end if
|
|
||||||
align 16
|
align 16
|
||||||
label trizdd dword
|
label trizdd dword
|
||||||
label trizdq qword
|
label trizdq qword
|
||||||
triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position
|
triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position
|
||||||
align 16
|
align 16
|
||||||
vectors rb 24
|
vectors rb 24
|
||||||
;align 16
|
|
||||||
; points_color rb 6*points_count ; each color as word
|
|
||||||
; sorted_triangles rw triangles_count*3 + 2
|
|
||||||
align 16
|
align 16
|
||||||
bumpmap rb TEXTURE_SIZE + 1
|
bumpmap rb TEXTURE_SIZE + 1
|
||||||
align 16
|
align 16
|
||||||
@ -577,7 +501,7 @@ align 16
|
|||||||
align 16
|
align 16
|
||||||
texmap rb (TEXTURE_SIZE +1) * 3
|
texmap rb (TEXTURE_SIZE +1) * 3
|
||||||
align 16
|
align 16
|
||||||
color_map rb (TEXTURE_SIZE +1) * 3
|
color_map rb (TEXTURE_SIZE +100) * 3
|
||||||
align 16
|
align 16
|
||||||
tex_points rb points_count * 4 ; bump_map and texture coords
|
tex_points rb points_count * 4 ; bump_map and texture coords
|
||||||
; each point word x, word y
|
; each point word x, word y
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
|
||||||
|
View3ds 0.070 - VII 2020
|
||||||
|
|
||||||
|
1. Some keys support by Leency.
|
||||||
|
2. New displaying model - real Phong - real not fake normal vector interpolation,
|
||||||
|
normalising it and calculating dot product (one for each light).
|
||||||
|
It requires SSE3. (by me, Maciej Guba)
|
||||||
|
-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
View3ds 0.069 - May 2020
|
View3ds 0.069 - May 2020
|
||||||
1. KPacked files support by Leency.
|
1. KPacked files support by Leency.
|
||||||
2. 32bit vertices indexes and ability to load whole RAM limited objects.
|
2. 32bit vertices indexes and ability to load whole RAM limited objects.
|
||||||
@ -5,7 +14,6 @@ View3ds 0.069 - May 2020
|
|||||||
3. I switch off painters algotithm mode (depth sorting). In app impelementetion it has
|
3. I switch off painters algotithm mode (depth sorting). In app impelementetion it has
|
||||||
limited vertices count and produce less quality image than Z buffer Catmull algo.
|
limited vertices count and produce less quality image than Z buffer Catmull algo.
|
||||||
In addition this switch off reduces app size, (by me).
|
In addition this switch off reduces app size, (by me).
|
||||||
|
|
||||||
-----------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
View3ds 0.068 - XI 2016
|
View3ds 0.068 - XI 2016
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
View3ds 0.070 - tiny viewer to .3ds and .asc files with several graphics
|
View3ds 0.071 - tiny viewer to .3ds and .asc files with several graphics
|
||||||
effects implementation.
|
effects implementation.
|
||||||
|
|
||||||
|
|
||||||
What's new?
|
What's new?
|
||||||
1. Some keys support by Leency.
|
1. New displaying model - glass - it's two pass rendering. First pass calculates
|
||||||
2. New displaying model - real Phong - real not fake normal vector interpolation, normalising it and calculating
|
Z position of all front pixels, second render image with adding reflective
|
||||||
dot product (one for each light). It requires SSE3. (by me)
|
component of light only for front pixels. Transparent effect by adding with saturation.
|
||||||
|
2. I removed bug with performing generation object after choosing 'emboss' option.
|
||||||
|
|
||||||
Buttons description:
|
Buttons description:
|
||||||
1. rotary: choosing rotary axle: x, y, x+y.
|
1. rotary: choosing rotary axle: x, y, x+y.
|
||||||
@ -39,4 +40,4 @@ Buttons description:
|
|||||||
is released apply current position. You may also decrease whole handlers count by enable culling (using
|
is released apply current position. You may also decrease whole handlers count by enable culling (using
|
||||||
appropriate button) - some back handlers become hidden.
|
appropriate button) - some back handlers become hidden.
|
||||||
|
|
||||||
Maciej Guba VII 2020
|
Maciej Guba VIII 2020
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
; application : View3ds ver. 0.070 - tiny .3ds and .asc files viewer
|
; application : View3ds ver. 0.071 - tiny .3ds and .asc files viewer
|
||||||
; with a few graphics effects demonstration.
|
; with a few graphics effects demonstration.
|
||||||
; compiler : FASM
|
; compiler : FASM
|
||||||
; system : KolibriOS
|
; system : KolibriOS
|
||||||
@ -16,7 +16,7 @@
|
|||||||
; I tried optimizing it a bit, but don't know if it was successful. The objects
|
; I tried optimizing it a bit, but don't know if it was successful. The objects
|
||||||
; can be:
|
; can be:
|
||||||
; 1) Read from a file (*.3DS standard)
|
; 1) Read from a file (*.3DS standard)
|
||||||
; 2) Written in manually (at the end of the code)
|
; 2) Written in manually (at the end of the code) ; now not exist
|
||||||
|
|
||||||
|
|
||||||
SIZE_X equ 512
|
SIZE_X equ 512
|
||||||
@ -37,10 +37,10 @@ MMX = 1
|
|||||||
SSE = 2
|
SSE = 2
|
||||||
SSE2 = 3
|
SSE2 = 3
|
||||||
SSE3 = 4
|
SSE3 = 4
|
||||||
Ext = SSE2 ;Ext={ NON | MMX | SSE | SSE2 }
|
Ext = SSE3 ;Ext={ NON | MMX | SSE | SSE2 | SSE3 }
|
||||||
|
|
||||||
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features)
|
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features)
|
||||||
USE_LFN = 1
|
USE_LFN = 1 ; App is Kolibri only now.
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
@ -63,6 +63,7 @@ START: ; start of execution
|
|||||||
|
|
||||||
shr ax,2
|
shr ax,2
|
||||||
movzx ebx,ax
|
movzx ebx,ax
|
||||||
|
movzx ebx,ax
|
||||||
lea ebx,[ebx*3]
|
lea ebx,[ebx*3]
|
||||||
push ebx
|
push ebx
|
||||||
fninit
|
fninit
|
||||||
@ -75,8 +76,8 @@ START: ; start of execution
|
|||||||
shr ax,1
|
shr ax,1
|
||||||
mov [vect_x],ax
|
mov [vect_x],ax
|
||||||
|
|
||||||
mov eax, 20 shl 16 + 20
|
; mov eax, 20 shl 16 + 20
|
||||||
mov [x_start],eax
|
mov [x_start],dword 20 shl 16 + 20 ;eax
|
||||||
|
|
||||||
|
|
||||||
call alloc_buffer_mem
|
call alloc_buffer_mem
|
||||||
@ -131,6 +132,8 @@ START: ; start of execution
|
|||||||
;mov eax,40 ; set events mask
|
;mov eax,40 ; set events mask
|
||||||
;mov ebx,1100000000000000000000000100111b
|
;mov ebx,1100000000000000000000000100111b
|
||||||
;int 0x40
|
;int 0x40
|
||||||
|
|
||||||
|
|
||||||
still:
|
still:
|
||||||
cmp [edit_flag],1
|
cmp [edit_flag],1
|
||||||
jne @f
|
jne @f
|
||||||
@ -316,7 +319,8 @@ still:
|
|||||||
cmp ah,15
|
cmp ah,15
|
||||||
jne @f
|
jne @f
|
||||||
cmp [emboss_flag],1
|
cmp [emboss_flag],1
|
||||||
call init_envmap2
|
; call init_envmap2
|
||||||
|
call do_emboss
|
||||||
@@:
|
@@:
|
||||||
; cmp ah,17
|
; cmp ah,17
|
||||||
; jne .next_m
|
; jne .next_m
|
||||||
@ -332,8 +336,8 @@ still:
|
|||||||
jne .next_m2
|
jne .next_m2
|
||||||
|
|
||||||
mov [re_alloc_flag],1 ; reallocate memory
|
mov [re_alloc_flag],1 ; reallocate memory
|
||||||
mov [triangles_count_var],1000
|
mov [triangles_count_var],20000
|
||||||
mov [points_count_var],1000
|
mov [points_count_var],20000
|
||||||
call alloc_mem_for_tp
|
call alloc_mem_for_tp
|
||||||
mov [re_alloc_flag],0
|
mov [re_alloc_flag],0
|
||||||
|
|
||||||
@ -347,7 +351,7 @@ still:
|
|||||||
@@:
|
@@:
|
||||||
cmp bl,4
|
cmp bl,4
|
||||||
jg @f
|
jg @f
|
||||||
movzx ax,bl ; ax < - object number
|
movzx eax,bl ; eax < - object number
|
||||||
call generate_object2
|
call generate_object2
|
||||||
jmp .calc_norm
|
jmp .calc_norm
|
||||||
@@:
|
@@:
|
||||||
@ -610,7 +614,8 @@ still:
|
|||||||
movzx ecx,word[size_y_var]
|
movzx ecx,word[size_y_var]
|
||||||
movzx eax,word[size_x_var]
|
movzx eax,word[size_x_var]
|
||||||
mul ecx
|
mul ecx
|
||||||
lea ecx,[eax*3]
|
lea ecx,[eax*4]
|
||||||
|
|
||||||
if (Ext = MMX)|(Ext = SSE)
|
if (Ext = MMX)|(Ext = SSE)
|
||||||
mov bh,bl
|
mov bh,bl
|
||||||
push bx
|
push bx
|
||||||
@ -668,7 +673,7 @@ end if
|
|||||||
movzx eax,word[size_x_var]
|
movzx eax,word[size_x_var]
|
||||||
movzx ecx,word[size_y_var]
|
movzx ecx,word[size_y_var]
|
||||||
mul ecx
|
mul ecx
|
||||||
lea ecx,[eax*3]
|
lea ecx,[eax*4]
|
||||||
if (Ext = MMX)|(Ext = SSE)
|
if (Ext = MMX)|(Ext = SSE)
|
||||||
mov bh,bl
|
mov bh,bl
|
||||||
push bx
|
push bx
|
||||||
@ -736,7 +741,7 @@ end if
|
|||||||
; mov ecx,SIZE_X shl 16 + SIZE_Y
|
; mov ecx,SIZE_X shl 16 + SIZE_Y
|
||||||
mov edx,[offset_y] ;5 shl 16 + 25
|
mov edx,[offset_y] ;5 shl 16 + 25
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je .ff
|
jge .ff
|
||||||
int 0x40
|
int 0x40
|
||||||
jmp .f
|
jmp .f
|
||||||
.ff:
|
.ff:
|
||||||
@ -775,15 +780,11 @@ end if
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;-------------------------PROCEDURES---------------------------------------------
|
;-------------------------PROCEDURES---------------------------------------------
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
;include "TEX3.INC"
|
|
||||||
include "FLAT_CAT.INC"
|
include "FLAT_CAT.INC"
|
||||||
include "TEX_CAT.INC"
|
include "TEX_CAT.INC"
|
||||||
include "BUMP_CAT.INC"
|
include "BUMP_CAT.INC"
|
||||||
include "3DMATH.INC"
|
include "3DMATH.INC"
|
||||||
include "GRD_LINE.INC"
|
include "GRD_LINE.INC"
|
||||||
;include "GRD3.INC"
|
|
||||||
;include "FLAT3.INC"
|
|
||||||
;include "BUMP3.INC"
|
|
||||||
include "B_PROCS.INC"
|
include "B_PROCS.INC"
|
||||||
include "A_PROCS.INC"
|
include "A_PROCS.INC"
|
||||||
include "GRD_CAT.INC"
|
include "GRD_CAT.INC"
|
||||||
@ -793,6 +794,8 @@ include "TWO_TEX.INC"
|
|||||||
include "ASC.INC"
|
include "ASC.INC"
|
||||||
if Ext >= SSE3
|
if Ext >= SSE3
|
||||||
include "3R_PHG.INC"
|
include "3R_PHG.INC"
|
||||||
|
include '3STENCIL.INC'
|
||||||
|
include '3GLASS.INC'
|
||||||
end if
|
end if
|
||||||
clear_vertices_index:
|
clear_vertices_index:
|
||||||
mov edi,[vertices_index_ptr]
|
mov edi,[vertices_index_ptr]
|
||||||
@ -827,7 +830,7 @@ edit: ; mmx required, edit mesh by vertex
|
|||||||
lea ebx,[ebx*3]
|
lea ebx,[ebx*3]
|
||||||
|
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
jne @f
|
jl @f
|
||||||
add ebx,[esp]
|
add ebx,[esp]
|
||||||
@@:
|
@@:
|
||||||
add esp,4
|
add esp,4
|
||||||
@ -946,9 +949,13 @@ edit: ; mmx required, edit mesh by vertex
|
|||||||
shl edi,2
|
shl edi,2
|
||||||
add edi,[points_ptr]
|
add edi,[points_ptr]
|
||||||
lea esi,[.points_rotated]
|
lea esi,[.points_rotated]
|
||||||
mov ecx,3
|
|
||||||
cld
|
cld
|
||||||
rep movsd
|
movsd
|
||||||
|
movsd
|
||||||
|
movsd
|
||||||
|
; mov ecx,3
|
||||||
|
; cld
|
||||||
|
; rep movsd
|
||||||
|
|
||||||
|
|
||||||
mov dword[edit_end_x],0
|
mov dword[edit_end_x],0
|
||||||
@ -982,7 +989,6 @@ alloc_buffer_mem:
|
|||||||
mov ebx,20
|
mov ebx,20
|
||||||
mov edx,[screen_ptr]
|
mov edx,[screen_ptr]
|
||||||
int 0x40
|
int 0x40
|
||||||
; and eax,0xfffffff0
|
|
||||||
mov [screen_ptr],eax
|
mov [screen_ptr],eax
|
||||||
|
|
||||||
mov ecx,[.temp]
|
mov ecx,[.temp]
|
||||||
@ -992,7 +998,6 @@ alloc_buffer_mem:
|
|||||||
mov ebx,20
|
mov ebx,20
|
||||||
mov edx,[Zbuffer_ptr]
|
mov edx,[Zbuffer_ptr]
|
||||||
int 0x40
|
int 0x40
|
||||||
; and eax,0xfffffff0
|
|
||||||
mov [Zbuffer_ptr],eax
|
mov [Zbuffer_ptr],eax
|
||||||
|
|
||||||
|
|
||||||
@ -1003,7 +1008,6 @@ alloc_buffer_mem:
|
|||||||
mov ebx,20
|
mov ebx,20
|
||||||
mov edx,[vertices_index_ptr]
|
mov edx,[vertices_index_ptr]
|
||||||
int 0x40
|
int 0x40
|
||||||
; and eax,0xfffffff0
|
|
||||||
mov [vertices_index_ptr],eax
|
mov [vertices_index_ptr],eax
|
||||||
|
|
||||||
mov esp,ebp
|
mov esp,ebp
|
||||||
@ -1417,7 +1421,78 @@ do_color_buffer: ; do color buffer for Gouraud, flat shading
|
|||||||
mov esp,ebp
|
mov esp,ebp
|
||||||
pop ebp
|
pop ebp
|
||||||
ret
|
ret
|
||||||
|
if Ext >= SSE3
|
||||||
|
init_point_normals:
|
||||||
|
.z equ dword [ebp-8]
|
||||||
|
.y equ dword [ebp-12]
|
||||||
|
.x equ [ebp-16]
|
||||||
|
.point_number equ dword [ebp-28]
|
||||||
|
.hit_faces equ dword [ebp-32]
|
||||||
|
|
||||||
|
fninit
|
||||||
|
push ebp
|
||||||
|
mov ebp,esp
|
||||||
|
sub esp,64
|
||||||
|
and ebp,-16
|
||||||
|
mov edi,[points_normals_ptr]
|
||||||
|
mov .point_number,0
|
||||||
|
.ipn_loop:
|
||||||
|
movd xmm0,.point_number
|
||||||
|
pshufd xmm0,xmm0,0
|
||||||
|
mov .hit_faces,0
|
||||||
|
mov .x,dword 0
|
||||||
|
mov .y,0
|
||||||
|
mov .z,0
|
||||||
|
mov esi,[triangles_ptr]
|
||||||
|
xor ecx,ecx ; ecx - triangle number
|
||||||
|
.ipn_check_face:
|
||||||
|
movdqu xmm1,[esi]
|
||||||
|
pcmpeqd xmm1,xmm0
|
||||||
|
pmovmskb eax,xmm1
|
||||||
|
and eax,0xfff
|
||||||
|
or eax,eax
|
||||||
|
jz .ipn_next_face
|
||||||
|
push esi
|
||||||
|
mov esi,ecx
|
||||||
|
lea esi,[esi*3]
|
||||||
|
shl esi,2
|
||||||
|
add esi,[triangles_normals_ptr]
|
||||||
|
movups xmm7,[esi]
|
||||||
|
addps xmm7,.x
|
||||||
|
movaps .x,xmm7
|
||||||
|
pop esi
|
||||||
|
inc .hit_faces
|
||||||
|
|
||||||
|
.ipn_next_face:
|
||||||
|
add esi,12
|
||||||
|
inc ecx
|
||||||
|
cmp ecx,[triangles_count_var]
|
||||||
|
jne .ipn_check_face
|
||||||
|
cvtsi2ss xmm6,.hit_faces
|
||||||
|
movaps xmm7,.x
|
||||||
|
rcpss xmm6,xmm6
|
||||||
|
shufps xmm6,xmm6,11000000b
|
||||||
|
mulps xmm7,xmm6
|
||||||
|
movaps xmm6,xmm7
|
||||||
|
mulps xmm6,xmm6
|
||||||
|
andps xmm6,[zero_hgst_dd]
|
||||||
|
haddps xmm6,xmm6
|
||||||
|
haddps xmm6,xmm6
|
||||||
|
rsqrtps xmm6,xmm6
|
||||||
|
mulps xmm7,xmm6
|
||||||
|
movlps [edi],xmm7
|
||||||
|
movhlps xmm7,xmm7
|
||||||
|
movss [edi+8],xmm7
|
||||||
|
add edi,12
|
||||||
|
inc .point_number
|
||||||
|
mov edx,.point_number
|
||||||
|
cmp edx,[points_count_var]
|
||||||
|
jne .ipn_loop
|
||||||
|
|
||||||
|
add esp,64
|
||||||
|
pop ebp
|
||||||
|
ret
|
||||||
|
else
|
||||||
init_point_normals:
|
init_point_normals:
|
||||||
.x equ dword [ebp-4]
|
.x equ dword [ebp-4]
|
||||||
.y equ dword [ebp-8]
|
.y equ dword [ebp-8]
|
||||||
@ -1491,7 +1566,7 @@ init_point_normals:
|
|||||||
mov esp,ebp
|
mov esp,ebp
|
||||||
ret
|
ret
|
||||||
;===============================================================
|
;===============================================================
|
||||||
|
end if
|
||||||
init_triangles_normals2:
|
init_triangles_normals2:
|
||||||
mov ebx,[triangles_normals_ptr]
|
mov ebx,[triangles_normals_ptr]
|
||||||
mov ebp,[triangles_ptr]
|
mov ebp,[triangles_ptr]
|
||||||
@ -1626,12 +1701,69 @@ draw_triangles:
|
|||||||
movd mm1,dword[eax]
|
movd mm1,dword[eax]
|
||||||
paddw mm1,mm0
|
paddw mm1,mm0
|
||||||
movd dword[eax],mm1
|
movd dword[eax],mm1
|
||||||
@@:
|
@@:
|
||||||
|
if Ext >= SSE3
|
||||||
|
cmp [dr_flag],13
|
||||||
|
jne .no_stencil
|
||||||
|
mov esi,[triangles_ptr]
|
||||||
|
mov ecx,[triangles_count_var]
|
||||||
|
@@:
|
||||||
|
push esi
|
||||||
|
push ecx
|
||||||
|
|
||||||
|
mov eax,[esi]
|
||||||
|
mov ebx,[esi+4]
|
||||||
|
mov ecx,[esi+8]
|
||||||
|
imul eax,[i12]
|
||||||
|
imul ebx,[i12]
|
||||||
|
imul ecx,[i12]
|
||||||
|
add eax,[points_rotated_ptr]
|
||||||
|
add ebx,[points_rotated_ptr]
|
||||||
|
add ecx,[points_rotated_ptr]
|
||||||
|
push dword[ecx+8]
|
||||||
|
push dword[ebx+8]
|
||||||
|
push dword[eax+8]
|
||||||
|
movups xmm0,[esp]
|
||||||
|
add esp,12
|
||||||
|
andps xmm0,[zero_hgst_dd]
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,[esi]
|
||||||
|
mov ebx,[esi+4]
|
||||||
|
mov ecx,[esi+8]
|
||||||
|
shl eax,1
|
||||||
|
shl ebx,1
|
||||||
|
shl ecx,1
|
||||||
|
lea eax,[eax*3]
|
||||||
|
lea ebx,[ebx*3]
|
||||||
|
lea ecx,[ecx*3]
|
||||||
|
add eax,[points_translated_ptr]
|
||||||
|
add ebx,[points_translated_ptr]
|
||||||
|
add ecx,[points_translated_ptr]
|
||||||
|
mov eax,[eax]
|
||||||
|
mov ebx,[ebx]
|
||||||
|
mov ecx,[ecx]
|
||||||
|
ror eax,16
|
||||||
|
ror ebx,16
|
||||||
|
ror ecx,16
|
||||||
|
|
||||||
|
|
||||||
|
mov esi,[Zbuffer_ptr]
|
||||||
|
|
||||||
|
call stencil_tri
|
||||||
|
|
||||||
|
pop ecx
|
||||||
|
pop esi
|
||||||
|
add esi,12
|
||||||
|
dec ecx
|
||||||
|
jnz @b
|
||||||
|
|
||||||
|
.no_stencil:
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov esi,[triangles_ptr]
|
mov esi,[triangles_ptr]
|
||||||
mov [edges_counter],0
|
|
||||||
mov ecx,[triangles_count_var]
|
mov ecx,[triangles_count_var]
|
||||||
.again_dts:
|
.again_dts:
|
||||||
push ecx
|
push ecx
|
||||||
@ -1744,6 +1876,7 @@ draw_triangles:
|
|||||||
|
|
||||||
.no_edit:
|
.no_edit:
|
||||||
end if
|
end if
|
||||||
|
|
||||||
push esi ;
|
push esi ;
|
||||||
fninit ; DO culling AT FIRST
|
fninit ; DO culling AT FIRST
|
||||||
cmp [culling_flag],1 ; (if culling_flag = 1)
|
cmp [culling_flag],1 ; (if culling_flag = 1)
|
||||||
@ -1790,6 +1923,8 @@ end if
|
|||||||
if Ext >= SSE3
|
if Ext >= SSE3
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je .r_phg
|
je .r_phg
|
||||||
|
cmp [dr_flag],13
|
||||||
|
je .glass
|
||||||
end if ; ****************
|
end if ; ****************
|
||||||
mov esi,point_index3 ; do Gouraud shading
|
mov esi,point_index3 ; do Gouraud shading
|
||||||
mov ecx,3
|
mov ecx,3
|
||||||
@ -1802,15 +1937,16 @@ end if
|
|||||||
fld dword[eax] ; x cooficient of normal vector
|
fld dword[eax] ; x cooficient of normal vector
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[esp-2]
|
fistp [temp1]
|
||||||
; texture y=(rotated point normal -> y * 255)+255
|
; texture y=(rotated point normal -> y * 255)+255
|
||||||
fld dword[eax+4] ; y cooficient
|
fld dword[eax+4] ; y cooficient
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[esp-4]
|
fistp [temp2]
|
||||||
|
|
||||||
movzx eax,word[esp-4]
|
mov eax,[temp2]
|
||||||
movzx ebx,word[esp-2]
|
mov ebx,[temp1]
|
||||||
|
and ebx,0xfffffff
|
||||||
shl eax,TEX_SHIFT
|
shl eax,TEX_SHIFT
|
||||||
add eax,ebx
|
add eax,ebx
|
||||||
lea eax,[eax*3+color_map]
|
lea eax,[eax*3+color_map]
|
||||||
@ -1873,8 +2009,8 @@ end if
|
|||||||
; push [temp_col]
|
; push [temp_col]
|
||||||
; push [temp_col]
|
; push [temp_col]
|
||||||
.rainbow:
|
.rainbow:
|
||||||
cmp [catmull_flag],1 ; put on stack z coordinate if necessary
|
; cmp [catmull_flag],1 ; put on stack z coordinate if necessary
|
||||||
jne @f
|
; jne @f
|
||||||
push [zz3]
|
push [zz3]
|
||||||
@@:
|
@@:
|
||||||
mov eax,dword[yy3]
|
mov eax,dword[yy3]
|
||||||
@ -1883,19 +2019,15 @@ end if
|
|||||||
push eax
|
push eax
|
||||||
neg al
|
neg al
|
||||||
push ax
|
push ax
|
||||||
; cmp [catmull_flag],1
|
|
||||||
; jne @f
|
|
||||||
push [zz2]
|
push [zz2]
|
||||||
; @@:
|
|
||||||
mov eax,dword[yy2]
|
mov eax,dword[yy2]
|
||||||
and eax,ebx
|
and eax,ebx
|
||||||
push eax
|
push eax
|
||||||
neg al
|
neg al
|
||||||
push ax
|
push ax
|
||||||
; cmp [catmull_flag],1
|
|
||||||
; jne @f
|
|
||||||
push [zz1]
|
push [zz1]
|
||||||
; @@:
|
|
||||||
mov eax,dword[yy1]
|
mov eax,dword[yy1]
|
||||||
and eax,ebx
|
and eax,ebx
|
||||||
push eax
|
push eax
|
||||||
@ -1909,17 +2041,12 @@ end if
|
|||||||
mov ecx,dword[xx3]
|
mov ecx,dword[xx3]
|
||||||
ror ecx,16
|
ror ecx,16
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
call gouraud_triangle_z
|
call gouraud_triangle_z
|
||||||
; jmp .end_draw
|
|
||||||
; @@:
|
|
||||||
; call gouraud_triangle
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
|
|
||||||
.flat_draw: ;**************************
|
.flat_draw: ;**************************
|
||||||
; FLAT DRAWING
|
fninit ; FLAT DRAWING
|
||||||
mov eax,[point_index1]
|
mov eax,[point_index1]
|
||||||
mov ebx,[point_index2]
|
mov ebx,[point_index2]
|
||||||
mov ecx,[point_index3]
|
mov ecx,[point_index3]
|
||||||
@ -1938,17 +2065,20 @@ end if
|
|||||||
fidiv [i3]
|
fidiv [i3]
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp dword[esp-4] ; x temp variables
|
fistp [temp1] ;dword[esp-4] ; x temp variables
|
||||||
fld dword[eax+4] ; y cooficient of normal vector
|
fld dword[eax+4] ; y cooficient of normal vector
|
||||||
fadd dword[ebx+4]
|
fadd dword[ebx+4]
|
||||||
fadd dword[ecx+4]
|
fadd dword[ecx+4]
|
||||||
fidiv [i3]
|
fidiv [i3]
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp dword[esp-8] ; y
|
fistp [temp2] ;dword[esp-8] ; y
|
||||||
mov edx,dword[esp-8]
|
mov edx,[temp2] ;dword[esp-8]
|
||||||
|
and edx,0xfffffff
|
||||||
|
and [temp1],0xfffffff
|
||||||
shl edx,TEX_SHIFT
|
shl edx,TEX_SHIFT
|
||||||
add edx,dword[esp-4]
|
add edx,[temp1] ;dword[esp-4]
|
||||||
|
|
||||||
lea eax,[3*edx]
|
lea eax,[3*edx]
|
||||||
add eax,color_map
|
add eax,color_map
|
||||||
mov edx,dword[eax]
|
mov edx,dword[eax]
|
||||||
@ -1976,25 +2106,19 @@ end if
|
|||||||
mov ecx,dword[xx3]
|
mov ecx,dword[xx3]
|
||||||
ror ecx,16
|
ror ecx,16
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
push word[zz3]
|
push word[zz3]
|
||||||
push word[zz2]
|
push word[zz2]
|
||||||
push word[zz1]
|
push word[zz1]
|
||||||
call flat_triangle_z
|
call flat_triangle_z
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
; @@:
|
|
||||||
; call draw_triangle
|
|
||||||
; jmp .end_draw
|
|
||||||
.env_mapping:
|
.env_mapping:
|
||||||
; fninit
|
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
push [zz3]
|
push [zz3]
|
||||||
push [zz2]
|
push [zz2]
|
||||||
push [zz1]
|
push [zz1]
|
||||||
; @@:
|
|
||||||
mov esi,point_index1
|
mov esi,point_index1
|
||||||
sub esp,12
|
sub esp,12
|
||||||
mov edi,esp
|
mov edi,esp
|
||||||
@ -2004,19 +2128,6 @@ end if
|
|||||||
lea eax,[eax*3]
|
lea eax,[eax*3]
|
||||||
shl eax,2
|
shl eax,2
|
||||||
add eax,[points_normals_rot_ptr] ;point_normals_rotated
|
add eax,[points_normals_rot_ptr] ;point_normals_rotated
|
||||||
; #
|
|
||||||
; fld dword[eax]
|
|
||||||
; fmul dword[eax+4]
|
|
||||||
; fld1
|
|
||||||
; fld1
|
|
||||||
; faddp
|
|
||||||
; fmulp
|
|
||||||
; fimul [correct_tex]
|
|
||||||
; fiadd [correct_tex]
|
|
||||||
; fistp word[edi]
|
|
||||||
; mov word[edi+2],0
|
|
||||||
;; fistp word[edi+2]
|
|
||||||
; # last change
|
|
||||||
; texture x=(rotated point normal -> x * 255)+255
|
; texture x=(rotated point normal -> x * 255)+255
|
||||||
fld dword[eax]
|
fld dword[eax]
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
@ -2027,7 +2138,7 @@ end if
|
|||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[edi+2]
|
fistp word[edi+2]
|
||||||
; # end of last ch.
|
|
||||||
add edi,4
|
add edi,4
|
||||||
add esi,4
|
add esi,4
|
||||||
loop @b
|
loop @b
|
||||||
@ -2040,24 +2151,17 @@ end if
|
|||||||
ror ecx,16
|
ror ecx,16
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,envmap
|
mov esi,envmap
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
|
|
||||||
mov edx,[Zbuffer_ptr]
|
mov edx,[Zbuffer_ptr]
|
||||||
call tex_triangle_z
|
call tex_triangle_z
|
||||||
; jmp .end_draw
|
|
||||||
; @@:
|
|
||||||
; call tex_triangle
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
.cubic_env_mapping:
|
.cubic_env_mapping:
|
||||||
; fninit
|
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
push [zz3]
|
push [zz3]
|
||||||
push [zz2]
|
push [zz2]
|
||||||
push [zz1]
|
push [zz1]
|
||||||
; @@:
|
|
||||||
mov esi,point_index1
|
mov esi,point_index1
|
||||||
sub esp,12
|
sub esp,12
|
||||||
mov edi,esp
|
mov edi,esp
|
||||||
@ -2066,8 +2170,8 @@ end if
|
|||||||
mov eax,dword[esi]
|
mov eax,dword[esi]
|
||||||
lea eax,[eax*3]
|
lea eax,[eax*3]
|
||||||
shl eax,2
|
shl eax,2
|
||||||
add eax,[points_normals_rot_ptr] ;point_normals_rotated
|
add eax,[points_normals_rot_ptr]
|
||||||
; #
|
|
||||||
fld dword[eax]
|
fld dword[eax]
|
||||||
fmul dword[eax+4]
|
fmul dword[eax+4]
|
||||||
fld1
|
fld1
|
||||||
@ -2103,27 +2207,21 @@ end if
|
|||||||
ror ecx,16
|
ror ecx,16
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,envmap_cub
|
mov esi,envmap_cub
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
mov edx,[Zbuffer_ptr]
|
mov edx,[Zbuffer_ptr]
|
||||||
|
|
||||||
call tex_triangle_z
|
call tex_triangle_z
|
||||||
; jmp .end_draw
|
|
||||||
; @@:
|
|
||||||
; call tex_triangle
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
|
|
||||||
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
.bump_mapping:
|
.bump_mapping:
|
||||||
; fninit
|
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
|
|
||||||
push [Zbuffer_ptr]
|
push [Zbuffer_ptr]
|
||||||
push [zz3]
|
push [zz3]
|
||||||
push [zz2]
|
push [zz2]
|
||||||
push [zz1]
|
push [zz1]
|
||||||
; @@:
|
|
||||||
mov esi,point_index1
|
mov esi,point_index1
|
||||||
sub esp,12
|
sub esp,12
|
||||||
mov edi,esp
|
mov edi,esp
|
||||||
@ -2177,19 +2275,12 @@ end if
|
|||||||
mov esi,envmap
|
mov esi,envmap
|
||||||
mov edx,bumpmap ;BUMP_MAPPING
|
mov edx,bumpmap ;BUMP_MAPPING
|
||||||
|
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
call bump_triangle_z
|
call bump_triangle_z
|
||||||
; jmp .end_draw
|
|
||||||
; @@:
|
|
||||||
; call bump_triangle
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
|
|
||||||
.tex_mapping:
|
.tex_mapping:
|
||||||
|
|
||||||
; fninit
|
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
push [zz3]
|
push [zz3]
|
||||||
push [zz2]
|
push [zz2]
|
||||||
push [zz1]
|
push [zz1]
|
||||||
@ -2215,13 +2306,10 @@ end if
|
|||||||
ror ecx,16
|
ror ecx,16
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,texmap
|
mov esi,texmap
|
||||||
; cmp [catmull_flag],0
|
|
||||||
; je @f
|
|
||||||
mov edx,[Zbuffer_ptr]
|
mov edx,[Zbuffer_ptr]
|
||||||
|
|
||||||
call tex_triangle_z
|
call tex_triangle_z
|
||||||
; jmp .end_draw
|
|
||||||
; @@:
|
|
||||||
; call tex_triangle
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
; .ray:
|
; .ray:
|
||||||
; grd_triangle according to points index
|
; grd_triangle according to points index
|
||||||
@ -2283,7 +2371,7 @@ end if
|
|||||||
|
|
||||||
lea edx,[ecx*3]
|
lea edx,[ecx*3]
|
||||||
push word[edx*2+xx1-2] ; zz1 ,2 ,3
|
push word[edx*2+xx1-2] ; zz1 ,2 ,3
|
||||||
|
fninit
|
||||||
mov eax,dword[esi]
|
mov eax,dword[esi]
|
||||||
shl eax,2
|
shl eax,2
|
||||||
lea eax,[eax*3] ;+point_normals_rotated]
|
lea eax,[eax*3] ;+point_normals_rotated]
|
||||||
@ -2292,18 +2380,20 @@ end if
|
|||||||
fld dword[eax] ; x cooficient of normal vector
|
fld dword[eax] ; x cooficient of normal vector
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[ebp-2]
|
fistp [temp1] ;word[ebp-2]
|
||||||
; texture y=(rotated point normal -> y * 255)+255
|
; texture y=(rotated point normal -> y * 255)+255
|
||||||
fld dword[eax+4] ; y cooficient
|
fld dword[eax+4] ; y cooficient
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[ebp-4]
|
fistp [temp2] ;word[ebp-4]
|
||||||
|
|
||||||
movzx eax,word[ebp-4]
|
mov eax,[temp2] ;word[ebp-4]
|
||||||
movzx ebx,word[ebp-2]
|
mov ebx,[temp1] ;word[ebp-2]
|
||||||
|
and ebx,0xfffffff ; some onjects need thid 'and'
|
||||||
shl eax,TEX_SHIFT
|
shl eax,TEX_SHIFT
|
||||||
add eax,ebx
|
add eax,ebx
|
||||||
lea eax,[eax*3+color_map]
|
lea eax,[eax*3]
|
||||||
|
add eax,color_map
|
||||||
mov eax,dword[eax]
|
mov eax,dword[eax]
|
||||||
|
|
||||||
ror eax,16 ; eax -0xxxrrggbb -> 0xggbbxxrr
|
ror eax,16 ; eax -0xxxrrggbb -> 0xggbbxxrr
|
||||||
@ -2370,12 +2460,13 @@ end if
|
|||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[edi]
|
fistp word[edi]
|
||||||
|
|
||||||
; texture y=(rotated point normal -> y * 255)+255
|
; texture y=(rotated point normal -> y * 255)+255
|
||||||
fld dword[eax+4]
|
fld dword[eax+4]
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[edi+2]
|
fistp word[edi+2]
|
||||||
|
and word[edi+2],0x7fff ; some objects need it
|
||||||
add edi,4
|
add edi,4
|
||||||
add esi,4
|
add esi,4
|
||||||
loop @b
|
loop @b
|
||||||
@ -2488,15 +2579,16 @@ end if
|
|||||||
fld dword[eax] ; x cooficient of normal vector
|
fld dword[eax] ; x cooficient of normal vector
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[esp-2]
|
fistp [temp1] ;word[esp-2]
|
||||||
; texture y=(rotated point normal -> y * 255)+255
|
; texture y=(rotated point normal -> y * 255)+255
|
||||||
fld dword[eax+4] ; y cooficient
|
fld dword[eax+4] ; y cooficient
|
||||||
fimul [correct_tex]
|
fimul [correct_tex]
|
||||||
fiadd [correct_tex]
|
fiadd [correct_tex]
|
||||||
fistp word[esp-4]
|
fistp [temp2] ;word[esp-4]
|
||||||
|
|
||||||
movzx eax,word[esp-4]
|
mov eax,[temp2] ;word[esp-4]
|
||||||
movzx ebx,word[esp-2]
|
mov ebx,[temp1] ;word[esp-2]
|
||||||
|
and ebx,0xfffffff
|
||||||
shl eax,TEX_SHIFT
|
shl eax,TEX_SHIFT
|
||||||
add eax,ebx
|
add eax,ebx
|
||||||
lea eax,[eax*3+color_map]
|
lea eax,[eax*3+color_map]
|
||||||
@ -2509,11 +2601,6 @@ end if
|
|||||||
dec ecx
|
dec ecx
|
||||||
jnz .again_line_param
|
jnz .again_line_param
|
||||||
|
|
||||||
; mov eax,[edges_ptr] ; this not works correctly
|
|
||||||
; add eax,[edges_counter] ; I mean chosing overlapped edges.
|
|
||||||
; mov bl,[eax] ;
|
|
||||||
; test bl,00000001b ;
|
|
||||||
; jz @f ;
|
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
|
|
||||||
@ -2543,11 +2630,6 @@ end if
|
|||||||
|
|
||||||
call smooth_line
|
call smooth_line
|
||||||
@@:
|
@@:
|
||||||
; mov eax,[edges_ptr] ; this not works correctly
|
|
||||||
; add eax,[edges_counter]
|
|
||||||
; mov bl,[eax]
|
|
||||||
; test bl,00000010b
|
|
||||||
; jz @f
|
|
||||||
|
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
@ -2579,11 +2661,6 @@ end if
|
|||||||
call smooth_line
|
call smooth_line
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
; mov eax,[edges_ptr] ; this not works correctly
|
|
||||||
; add eax,[edges_counter] ;
|
|
||||||
; mov bl,[eax] ;
|
|
||||||
; test bl,00000100b ;
|
|
||||||
; jz @f ;
|
|
||||||
|
|
||||||
mov edi,[screen_ptr]
|
mov edi,[screen_ptr]
|
||||||
mov esi,[Zbuffer_ptr]
|
mov esi,[Zbuffer_ptr]
|
||||||
@ -2615,7 +2692,8 @@ end if
|
|||||||
call smooth_line
|
call smooth_line
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
@@:
|
@@:
|
||||||
if Ext >= SSE3
|
|
||||||
|
if Ext >= SSE3
|
||||||
.r_phg:
|
.r_phg:
|
||||||
|
|
||||||
|
|
||||||
@ -2671,11 +2749,62 @@ end if
|
|||||||
call real_phong_tri_z
|
call real_phong_tri_z
|
||||||
|
|
||||||
jmp .end_draw
|
jmp .end_draw
|
||||||
end if
|
|
||||||
|
.glass:
|
||||||
|
|
||||||
|
movd xmm5,[size_y_var]
|
||||||
|
punpcklwd xmm5,[the_zero]
|
||||||
|
pshufd xmm5,xmm5,01110011b
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,[point_index1]
|
||||||
|
mov ebx,[point_index2]
|
||||||
|
mov ecx,[point_index3]
|
||||||
|
imul eax,[i12]
|
||||||
|
imul ebx,[i12]
|
||||||
|
imul ecx,[i12]
|
||||||
|
add eax,[points_normals_rot_ptr]
|
||||||
|
add ebx,[points_normals_rot_ptr]
|
||||||
|
add ecx,[points_normals_rot_ptr]
|
||||||
|
movups xmm0,[eax]
|
||||||
|
movups xmm1,[ebx]
|
||||||
|
movups xmm2,[ecx]
|
||||||
|
andps xmm0,[zero_hgst_dd]
|
||||||
|
andps xmm1,[zero_hgst_dd]
|
||||||
|
andps xmm2,[zero_hgst_dd]
|
||||||
|
xorps xmm3,xmm3
|
||||||
|
|
||||||
|
mov eax,[point_index1]
|
||||||
|
mov ebx,[point_index2]
|
||||||
|
mov ecx,[point_index3]
|
||||||
|
imul eax,[i12]
|
||||||
|
imul ebx,[i12]
|
||||||
|
imul ecx,[i12]
|
||||||
|
add eax,[points_rotated_ptr]
|
||||||
|
add ebx,[points_rotated_ptr]
|
||||||
|
add ecx,[points_rotated_ptr]
|
||||||
|
push dword[ecx+8]
|
||||||
|
push dword[ebx+8]
|
||||||
|
push dword[eax+8]
|
||||||
|
movups xmm4,[esp]
|
||||||
|
add esp,12
|
||||||
|
andps xmm4,[zero_hgst_dd]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,dword[xx1]
|
||||||
|
ror eax,16
|
||||||
|
mov ebx,dword[xx2]
|
||||||
|
ror ebx,16
|
||||||
|
mov ecx,dword[xx3]
|
||||||
|
ror ecx,16
|
||||||
|
mov edi,[screen_ptr]
|
||||||
|
mov esi,[Zbuffer_ptr]
|
||||||
|
|
||||||
|
call glass_tri
|
||||||
|
|
||||||
|
jmp .end_draw
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2683,10 +2812,10 @@ end if
|
|||||||
.end_draw:
|
.end_draw:
|
||||||
pop esi
|
pop esi
|
||||||
add esi,12
|
add esi,12
|
||||||
inc [edges_counter]
|
|
||||||
pop ecx
|
pop ecx
|
||||||
sub ecx,1
|
sub ecx,1
|
||||||
; cmp dword[esi],-1
|
|
||||||
jnz .again_dts
|
jnz .again_dts
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -2716,7 +2845,7 @@ draw_handlers:
|
|||||||
|
|
||||||
movzx eax,word[size_x_var]
|
movzx eax,word[size_x_var]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
je @f
|
jge @f
|
||||||
lea ebx,[eax*3]
|
lea ebx,[eax*3]
|
||||||
sub ebx,18
|
sub ebx,18
|
||||||
add eax,eax
|
add eax,eax
|
||||||
@ -2774,7 +2903,7 @@ draw_handlers:
|
|||||||
push eax
|
push eax
|
||||||
lea edi,[eax*3]
|
lea edi,[eax*3]
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
jne @f
|
jl @f
|
||||||
add edi,[esp]
|
add edi,[esp]
|
||||||
@@:
|
@@:
|
||||||
add esp,4
|
add esp,4
|
||||||
@ -2799,7 +2928,7 @@ draw_handlers:
|
|||||||
mov word[eax],dx
|
mov word[eax],dx
|
||||||
add eax,2
|
add eax,2
|
||||||
cmp [dr_flag],12
|
cmp [dr_flag],12
|
||||||
jne @f
|
jl @f
|
||||||
add edi,4
|
add edi,4
|
||||||
loop .do
|
loop .do
|
||||||
jmp .ad
|
jmp .ad
|
||||||
@ -3073,7 +3202,6 @@ read_from_file:
|
|||||||
mov dword[edi],-1
|
mov dword[edi],-1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
if USE_LFN
|
|
||||||
alloc_mem_for_tp:
|
alloc_mem_for_tp:
|
||||||
mov eax, 68
|
mov eax, 68
|
||||||
cmp [re_alloc_flag],1
|
cmp [re_alloc_flag],1
|
||||||
@ -3092,28 +3220,6 @@ alloc_mem_for_tp:
|
|||||||
int 0x40 ; -> allocate memory to triangles
|
int 0x40 ; -> allocate memory to triangles
|
||||||
mov [triangles_ptr], eax ; -> eax = pointer to allocated mem
|
mov [triangles_ptr], eax ; -> eax = pointer to allocated mem
|
||||||
|
|
||||||
; mov eax, 68
|
|
||||||
; movzx ecx, [triangles_count_var]
|
|
||||||
; inc ecx
|
|
||||||
; mov edx,[edges_ptr]
|
|
||||||
; int 0x40 ; -> allocate memory to edges
|
|
||||||
; mov [edges_ptr], eax ; -> eax = pointer to allocated mem
|
|
||||||
|
|
||||||
; mov eax,-1 ; fill edges list
|
|
||||||
; movzx ecx,[triangles_count_var] ; importand if object generated
|
|
||||||
; shr ecx,2
|
|
||||||
; inc ecx
|
|
||||||
; mov edi,[edges_ptr]
|
|
||||||
; cld
|
|
||||||
; rep stosd
|
|
||||||
|
|
||||||
|
|
||||||
; mov eax, 68
|
|
||||||
; mov ebx, 12
|
|
||||||
; movzx ecx, [triangles_count_var]
|
|
||||||
; shl ecx, 4
|
|
||||||
; int 0x40
|
|
||||||
; mov [triangles_w_z_ptr], eax ; for trainagles_with_z list
|
|
||||||
; ststic memory
|
; ststic memory
|
||||||
|
|
||||||
mov eax, 68
|
mov eax, 68
|
||||||
@ -3124,12 +3230,6 @@ alloc_mem_for_tp:
|
|||||||
int 0x40 ; -> allocate memory for triangles normals
|
int 0x40 ; -> allocate memory for triangles normals
|
||||||
mov [triangles_normals_ptr], eax ; -> eax = pointer to allocated mem
|
mov [triangles_normals_ptr], eax ; -> eax = pointer to allocated mem
|
||||||
|
|
||||||
; mov eax, 68
|
|
||||||
; movzx ecx,[points_count_var]
|
|
||||||
; lea ecx,[2+ecx*2]
|
|
||||||
; mov edx,dword [vertices_index_ptr]
|
|
||||||
; int 0x40
|
|
||||||
; mov dword[vertices_index_ptr], eax
|
|
||||||
|
|
||||||
mov eax, 68
|
mov eax, 68
|
||||||
mov ecx, [points_count_var]
|
mov ecx, [points_count_var]
|
||||||
@ -3138,10 +3238,6 @@ alloc_mem_for_tp:
|
|||||||
mov edx,[points_normals_ptr]
|
mov edx,[points_normals_ptr]
|
||||||
int 0x40
|
int 0x40
|
||||||
mov [points_normals_ptr], eax
|
mov [points_normals_ptr], eax
|
||||||
; int3
|
|
||||||
|
|
||||||
|
|
||||||
; int3
|
|
||||||
|
|
||||||
|
|
||||||
mov eax, 68
|
mov eax, 68
|
||||||
@ -3171,7 +3267,7 @@ alloc_mem_for_tp:
|
|||||||
int 0x40
|
int 0x40
|
||||||
mov [points_translated_ptr], eax
|
mov [points_translated_ptr], eax
|
||||||
ret
|
ret
|
||||||
end if
|
|
||||||
|
|
||||||
|
|
||||||
read_from_disk:
|
read_from_disk:
|
||||||
|
Loading…
Reference in New Issue
Block a user