Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1931 → Rev 1881

/programs/demos/3DS/History.txt
1,14 → 1,3
View3ds 0.057 - April 2011.
1. By opening file bigger then ~18 KB, and choosing env mode program terminate.
I remove this bug
-----------------------------------------------------------------------------------
 
View3ds 0.056 - February 2011.
1. MMX optimizations in 2tex mode (file two_tex.inc).
2. Tiny SSE optimizations (file BUMP_CAT.INC).
3. Bit (two instructions) improved random light generation procedure.
-----------------------------------------------------------------------------------
 
View3ds 0.055 - January 2011.
1. SSE optimizations (file BUMP_TEX.INC).
2. Compiles correctly in newest FASM.
/programs/demos/3DS/VIEW3DS.ASM
1,5 → 1,5
 
; application : View3ds ver. 0.057 - tiny .3ds files viewer.
; application : View3ds ver. 0.055 - tiny .3ds files viewer.
; compiler : FASM
; system : KolibriOS
; author : Macgub aka Maciej Guba
81,7 → 81,7
call normalize_all_light_vectors
call init_triangles_normals2
call init_point_normals
call init_envmap2
; call init_envmap2
call init_envmap_cub
call generate_texture2
call init_sincos_tab
141,8 → 141,7
jne .next_m6
cmp [dr_flag],2
jne @f
; call init_envmap2 ; <----! this don't works in env mode
; and more than ~18 kb objects
call init_envmap2
; call init_envmap_cub2
@@:
cmp [dr_flag],4
175,15 → 174,15
call make_random_lights ; 'env ' 2
call normalize_all_light_vectors ; 'bump' 3
call do_color_buffer ; intit color_map ; 'tex ' 4
; cmp [emboss_flag],1 ; 'pos ' 5
; je @f ; 'dots' 6
; cmp [dr_flag],8
; jge @f
; cmp [dr_flag],2 ; 'txgr' 7
; jl .next_m5 ; '2tex' 8
; cmp [dr_flag],3 ; 'btex' 9
; jg .next_m5
; @@:
cmp [emboss_flag],1 ; 'pos ' 5
je @f ; 'dots' 6
cmp [dr_flag],8
jge @f
cmp [dr_flag],2 ; 'txgr' 7
jl .next_m5 ; '2tex' 8
cmp [dr_flag],3 ; 'btex' 9
jg .next_m5
@@:
call init_envmap2 ; update env map if shading model = environment or bump
.next_m5:
cmp ah,11
377,8 → 376,8
mov esi,angle_x
mov edi,matrix
call make_rotation_matrix
RDTSC
push eax
; RDTSC
; push eax
mov esi,[points_normals_ptr]
mov edi,[points_normals_rot_ptr]
mov ebx,matrix
426,8 → 425,8
@@:
call fill_Z_buffer ; make background
.non_f:
; RDTSC
; push eax
RDTSC
push eax
cmp [dr_flag],6
jne @f
call draw_dots
800,8 → 799,6
pop ebp
ret
 
 
 
do_color_buffer: ; do color buffer for Gouraud, flat shading
;env_map 512 x 512 x 3 bytes ; many lights using
.temp equ word [ebp-2]
/programs/demos/3DS/data.inc
268,7 → 268,7
if Ext=SSE
db ' (SSE)'
end if
db ' 0.057'
db ' 0.055'
labellen:
STRdata db '-1 '
 
/programs/demos/3DS/readme.txt
1,8 → 1,8
View3ds 0.057 - tiny viewer to .3ds files.
View3ds 0.055 - tiny viewer to .3ds files.
 
What's new?
1. By opening file bigger then ~18 KB, and choosing env mode program terminate.
I remove this bug
1. SSE optimizations (file BUMP_TEX.INC).
3. Compiles correctly in newest FASM.
 
Buttons description:
1. rotary: choosing rotary axle: x, y, x+y.
15,7 → 15,7
3. speed: idle, full.
4,5. zoom in, out: no comment.
6. catmull: on( use z buffer ( z coordinate interpolation), off( depth sorting, painters
alghoritm).Txgrd, 2tex and bumptex models only with catmull = on.
alghoritm).Txgrd and 2tex models only with catmull = on.
7. culling: backface culling on/ off.
8. rand. light: Randomize 3 unlinear lights( so called Phong's illumination).
9. Blur: blur N times; N=0,1,2,3,4,5
22,7 → 22,7
10.11,12,13. loseless operations (rotary 90, 180 degrees).
12. emboss: Do emboss effect( flat bumps ), use blur to do edges more deep.
carefull with emboss + fire - it looks annoying.
13. fire: do motion blur ( looks like fire ).
13. fire: do movement blur ( looks like fire ).
14. move: changes meaning x,y,z +/- buttons -> obj: moving object, camr: moving camera.
15. generate: Generates some objects: node, Thorn Crown, heart...
16. bumps: random, according to texture.
30,4 → 30,4
18. re-map tex -> re-map texture and bump map coordinates, to change spherical mapping
around axle use 'xchg' and 'mirror' buttons, then press 're-map tex' button.
 
Macgub April 2011
Macgub Jan 2011
/programs/demos/3DS/BUMP_CAT.INC
687,10 → 687,10
push .t_bmap
push dword .cey2
push .cex2
push dword .cey1
push .cex1
push dword .cby2
push .cbx2
push dword .cey1
push .cex1
push dword .cby1
push .cbx1
push ecx
712,10 → 712,10
.y equ dword [ebp+4]
.bx1 equ [ebp+8] ; ---
.by1 equ dword [ebp+12] ; |
.ex1 equ [ebp+16] ; |
.ey1 equ dword [ebp+20] ; |> bump and env coords
.bx2 equ [ebp+24] ; |> shifted shl ROUND
.by2 equ dword [ebp+28] ; |
.bx2 equ [ebp+16] ; |
.by2 equ dword [ebp+20] ; |> bump and env coords
.ex1 equ [ebp+24] ; |> shifted shl ROUND
.ey1 equ dword [ebp+28] ; |
.ex2 equ [ebp+32] ; |
.ey2 equ dword [ebp+36] ; ---
.bmap equ dword [ebp+40]
770,8 → 770,8
mov edx,.ey1
xchg edx,.ey2
mov .ey1,edx
end if
if Ext = MMX
else
 
movq mm0,.bx1
movq mm1,.ex1
movq mm2,.bx2
780,13 → 780,8
movq .ex2,mm1
movq .bx1,mm2
movq .ex1,mm3
 
end if
if Ext >= SSE
movups xmm0,.bx1
movups xmm1,.bx2
movups .bx2,xmm0
movups .bx1,xmm1
end if
 
mov edx,.z1
xchg edx,.z2
/programs/demos/3DS/B_PROCS.INC
636,8 → 636,6
.temp2 equ ebp-8 ; - light vector generate variables
.temp3 equ ebp-12
.max equ 800
RDTSC
mov [rand_seed],ax
push ebp
mov ebp,esp
sub esp,12
/programs/demos/3DS/TWO_TEX.INC
716,8 → 716,8
push .cz1
push .cz2
push .z_buff
push .t_emap
push .t_bmap
push .t_emap
push dword .cey2
push .cex2
push dword .cey1
743,16 → 743,20
;-------------- edi - pointer to screen buffer
;stack - another parameters :
.y equ dword [ebp+4]
.bx1 equ [ebp+8] ; ---
.by1 equ [ebp+12] ; |
.bx2 equ [ebp+16] ; |
.by2 equ [ebp+20] ; |> b. texture and e. texture coords
.ex1 equ [ebp+24] ; |> shifted shl ROUND
.ey1 equ [ebp+28] ; |
.ex2 equ [ebp+32] ; |
.ey2 equ [ebp+36] ; ---
.emap equ [ebp+40] ; b texture offset
.bmap equ [ebp+44] ; e texture offset
.bx1q equ [ebp+8]
.bx1 equ dword [ebp+8] ; ---
.by1 equ dword [ebp+12] ; |
.bx2q equ [ebp+16]
.bx2 equ dword [ebp+16] ; |
.by2 equ dword [ebp+20] ; |> b. texture and e. texture coords
.ex1q equ [ebp+24]
.ex1 equ dword [ebp+24] ; |> shifted shl ROUND
.ey1 equ dword [ebp+28] ; |
.ex2q equ [ebp+32]
.ex2 equ dword [ebp+32] ; |
.ey2 equ dword [ebp+36] ; ---
.bmap equ dword [ebp+40] ; b texture offset
.emap equ dword [ebp+44] ; e texture offset
.z_buff equ dword [ebp+48]
.z2 equ dword [ebp+52] ; -- |> z coords shifted
.z1 equ dword [ebp+56] ; -- shl CATMULL_SHIFT
759,15 → 763,19
 
.x1 equ dword [ebp-4]
.x2 equ dword [ebp-8]
.dbx equ [ebp-12]
.dex equ [ebp-16]
.dby equ [ebp-20]
.dey equ [ebp-24]
.dbx equ dword [ebp-12]
.dby equ dword [ebp-16]
.dbyq equ qword [ebp-16] ; - new
.dex equ dword [ebp-20]
.dey equ dword [ebp-24]
.deyq equ qword [ebp-24] ; - new
.dz equ dword [ebp-28]
.cbx equ [ebp-32]
.cex equ [ebp-36]
.cby equ [ebp-40]
.cey equ [ebp-44]
.cbx equ dword [ebp-32]
.cby equ dword [ebp-36]
.cbyq equ qword [ebp-36] ; - new
.cex equ dword [ebp-40]
.cey equ dword [ebp-44]
.ceyq equ qword [ebp-44] ; - new
.cz equ dword [ebp-48]
.czbuff equ dword [ebp-52]
 
799,14 → 807,14
xchg edx,.ey2
mov .ey1,edx
else
movq mm0,.bx1
movq mm1,.ex1
movq mm2,.bx2
movq mm3,.ex2
movq .bx2,mm0
movq .ex2,mm1
movq .bx1,mm2
movq .ex1,mm3
movq mm0,.bx1q
movq mm1,.ex1q
movq mm2,.bx2q
movq mm3,.ex2q
movq .bx2q,mm0
movq .ex2q,mm1
movq .bx1q,mm2
movq .ex1q,mm3
end if
mov edx,.z1
xchg edx,.z2
823,7 → 831,7
mov ebx,.x2
sub ebx,.x1
 
if Ext>=SSE
if Ext=SSE
 
sub esp,16
cvtsi2ss xmm3,ebx ;rcps
839,22 → 847,22
; movlhps xmm1,xmm1
; cvtpi2ps xmm1,mm3
 
cvtpi2ps xmm0,.bx1 ;mm0 ; bx1; by1
cvtpi2ps xmm0,.bx1q ;mm0
movlhps xmm0,xmm0
cvtpi2ps xmm0,.ex1 ;mm2 ; ex1; ey1
cvtpi2ps xmm1,.bx2 ;mm1 ; bx2; by2
cvtpi2ps xmm0,.ex1q ;mm2
cvtpi2ps xmm1,.bx2q ;mm1
movlhps xmm1,xmm1
cvtpi2ps xmm1,.ex2 ;mm3 ; ex2; ey2
cvtpi2ps xmm1,.ex2q ;mm3
subps xmm1,xmm0
; hi lo
divps xmm1,xmm3 ; xmm1 -> dby; dbx; dey; dex
 
shufps xmm1,xmm1,11011000b
divps xmm1,xmm3
 
shufps xmm1,xmm1,10110001b
cvtps2pi mm0,xmm1 ; mm0 -> 2 delta dwords
movhlps xmm1,xmm1
cvtps2pi mm1,xmm1
movq .dex,mm0 ; hi - lo -> dbx, dex
movq .dey,mm1 ; hi - lo -> dby, dey
movq .deyq,mm0
movq .dbyq,mm1
 
else
 
864,14 → 872,14
idiv ebx
push eax
 
mov eax,.ex2 ; calc .dby
sub eax,.ex1
mov eax,.by2 ; calc .dby
sub eax,.by1
cdq
idiv ebx
push eax
 
mov eax,.by2 ; calc .dex
sub eax,.by1
mov eax,.ex2 ; calc .dex
sub eax,.ex1
cdq
idiv ebx
push eax
934,18 → 942,18
mov ecx,.x2
sub ecx,.x1
; init current variables
push dword .bx1 ;.by1 .ex1 .ey1 .z1 esi
push dword .ex1
push dword .by1
push dword .ey1
push .bx1 .by1 .ex1 .ey1 .z1 esi
; push .by1
; push .ex1
; push .ey1
 
push .z1 ; current z shl CATMULL_SHIFT
push esi
; push .z1 ; current z shl CATMULL_SHIFT
; push esi
 
if Ext >= MMX
pxor mm0,mm0
movq mm3,.cex ; hi - lo -> cbx; cex
movq mm4,.cey ; hi - lo -> cby; cey
movq mm3,.ceyq
movq mm4,.cbyq
; movq mm5,mm3
; movq mm6,mm4
; psrad mm5,ROUND
968,42 → 976,35
end if
jge .skip
 
if Ext=NON
;if Ext=NON
mov eax,.cby
mov esi,.cbx
sar eax,ROUND
sar esi,ROUND
;else
; movd eax,mm6
; psrlq mm6,32
; movd esi,mm6
;end if
shl eax,TEX_SHIFT ;-
add esi,eax
lea esi,[esi*3] ;- ; esi - current b. texture addres
add esi,.bmap
 
;if Ext=NON
mov ebx,.cex ;.cex - current env map X
mov eax,.cey ;.cey - current env map y
sar ebx,ROUND
sar eax,ROUND
 
;else
; movd eax,mm5
; psrlq mm5,32
; movd ebx,mm5
;end if
shl eax,TEX_SHIFT
add ebx,eax
lea ebx,[ebx*3]
add ebx,.emap
 
 
else
movq mm5,.cey
psrad mm5,ROUND
pslld mm5,TEX_SHIFT
movq mm6,.cex
psrad mm6,ROUND
paddd mm5,mm6
movq mm6,mm5
paddd mm5,mm5
paddd mm5,mm6
paddd mm5,.emap
movd esi,mm5
psrlq mm5,32
movd ebx,mm5
end if
if Ext>=MMX
movd mm1,[esi]
movd mm2,[ebx]
1055,14 → 1056,14
add .cey,eax
else
add edx,4
paddd mm3,.dex
paddd mm4,.dey
paddd mm3,.deyq
paddd mm4,.dbyq
; movq mm5,mm3
; movq mm6,mm4
; psrad mm5,ROUND
; psrad mm6,ROUND
movq .cex,mm3
movq .cey,mm4
movq .ceyq,mm3
movq .cbyq,mm4
end if
mov eax,.dz
add .cz,eax