From 77593a15ece951ca566e3ca1a9afaa0d5037315b Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 26 Nov 2012 14:29:48 +0000 Subject: [PATCH] View 3DS 0.64: bug fixes git-svn-id: svn://kolibrios.org@3066 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/demos/3DS/DATA.INC | 4 +- programs/demos/3DS/History.txt | 15 ++ programs/demos/3DS/VIEW3DS.ASM | 300 ++++++++++++++++----------------- 3 files changed, 165 insertions(+), 154 deletions(-) diff --git a/programs/demos/3DS/DATA.INC b/programs/demos/3DS/DATA.INC index 005e071d5c..36c2020c60 100644 --- a/programs/demos/3DS/DATA.INC +++ b/programs/demos/3DS/DATA.INC @@ -309,7 +309,7 @@ base_vector: if Ext=SSE2 db ' (SSE2)' end if - db ' 0.062',0 + db ' 0.064',0 labellen: STRdata db '-1 ' @@ -430,7 +430,7 @@ align 8 points_translated_ptr dd ? screen_ptr dd ? Zbuffer_ptr dd ? - edges_ptr dd ? + ; edges_ptr dd ? ;=== diff --git a/programs/demos/3DS/History.txt b/programs/demos/3DS/History.txt index e601ff9969..08266c1fcf 100644 --- a/programs/demos/3DS/History.txt +++ b/programs/demos/3DS/History.txt @@ -1,3 +1,18 @@ +View3ds 0.064 - X 2012 +1. Bug fixes. + +----------------------------------------------------------------------------------- + +View3ds 0.063 - X 2012 +1. Postprocessing effect - wave. Ability to change amplitude and frequency. + +----------------------------------------------------------------------------------- + +View3ds 0.062 - VII 2012. +1. Counter fix by Mario. +2. New drawing model - smooth shaded lines (edges only view) by me. +----------------------------------------------------------------------------------- + View3ds 0.061 - Nov 2011. 1. Two new buttons to increase and decrease brightness. ----------------------------------------------------------------------------------- diff --git a/programs/demos/3DS/VIEW3DS.ASM b/programs/demos/3DS/VIEW3DS.ASM index 706fed6f7c..0025840c3e 100644 --- a/programs/demos/3DS/VIEW3DS.ASM +++ b/programs/demos/3DS/VIEW3DS.ASM @@ -1,5 +1,5 @@ -; application : View3ds ver. 0.063 - tiny .3ds files viewer. +; application : View3ds ver. 0.064 - tiny .3ds files viewer. ; compiler : FASM ; system : KolibriOS ; author : Macgub aka Maciej Guba @@ -682,7 +682,7 @@ end if int 40h mov eax,4 ; function 4 : write text to window - mov ebx,530*65536+510 ; [x start] *65536 + [y start] + mov ebx,530*65536+510 ; [x start] *65536 + [y start] mov ecx,0x00888888 mov edx,STRdata ; pointer to text beginning mov esi,10 ; text length @@ -2445,11 +2445,11 @@ draw_triangles: dec ecx jnz .again_line_param - mov eax,[edges_ptr] - add eax,[edges_counter] - mov bl,[eax] - test bl,00000001b - jz @f +; 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 mov esi,[Zbuffer_ptr] @@ -2479,11 +2479,11 @@ draw_triangles: call smooth_line @@: - mov eax,[edges_ptr] - add eax,[edges_counter] - mov bl,[eax] - test bl,00000010b - jz @f +; mov eax,[edges_ptr] ; this not works correctly +; add eax,[edges_counter] +; mov bl,[eax] +; test bl,00000010b +; jz @f mov edi,screen mov esi,[Zbuffer_ptr] @@ -2515,11 +2515,11 @@ draw_triangles: call smooth_line @@: - mov eax,[edges_ptr] - add eax,[edges_counter] - mov bl,[eax] - test bl,00000100b - jz @f +; mov eax,[edges_ptr] ; this not works correctly +; add eax,[edges_counter] ; +; mov bl,[eax] ; +; test bl,00000100b ; +; jz @f ; mov edi,screen mov esi,[Zbuffer_ptr] @@ -2568,128 +2568,6 @@ fill_Z_buffer: rep stosd ret -read_from_file: - fninit - mov edi,[triangles_ptr] - xor ebx,ebx - xor ebp,ebp - mov [points_count_var],0 - mov [triangles_count_var],0 - if USE_LFN = 0 - mov esi,SourceFile - else - mov esi,[fptr] - end if - cmp [esi],word 4D4Dh - jne .exit ;Must be legal .3DS file -; cmp dword[esi+2],EndFile-SourceFile -; jne .exit ;This must tell the length - mov eax,dword[esi+2] - ; cmp eax,[fsize] - ; jne .exit - - add eax,esi - mov [EndFile],eax ; - - add esi,6 - mov eax,[edges_ptr] - @@: - cmp [esi],word 3D3Dh - je @f - add esi,[esi+2] - jmp @b - @@: - add esi,6 - .find4k: - cmp [esi],word 4000h - je @f - add esi,[esi+2] - cmp esi,[EndFile] - jc .find4k - jmp .exit - @@: - add esi,6 - @@: - cmp [esi],byte 0 - je @f - inc esi - jmp @b - @@: - inc esi - @@: - cmp [esi],word 4100h - je @f - add esi,[esi+2] - jmp @b - @@: - add esi,6 - @@: - cmp [esi],word 4110h - je @f - add esi,[esi+2] - jmp @b - @@: - movzx ecx,word[esi+6] - add [points_count_var],cx - - mov edx,ecx - add esi,8 - @@: - push edi - mov edi,[points_ptr] - push dword[esi+4] - pop dword[edi+ebx*2+0] - push dword[esi+8] - pop dword[edi+ebx*2+4] - push dword[esi+0] - pop dword[edi+ebx*2+8] - pop edi -; fld dword[esi+4] -; fstp dword[real_points+ebx*2+0] ; x -; fld dword[esi+8] -; fstp dword[real_points+ebx*2+4] ; y -; fld dword[esi+0] -; fstp dword[real_points+ebx*2+8] ; z - - add ebx,6 - add esi,12 - dec ecx - jnz @b - @@: - ; mov dword[points+ebx],-1 - push edi - mov edi,[points_ptr] - mov dword[edi+ebx*2],-1 ; end mark (not always in use) - pop edi - @@: - cmp [esi],word 4120h - je @f - add esi,[esi+2] - jmp @b - @@: - movzx ecx,word[esi+6] - add [triangles_count_var],cx - add esi,8 - ;mov edi,triangles - @@: - movsd - movsw - add word[edi-6],bp - add word[edi-4],bp - add word[edi-2],bp - mov dl,byte[esi] - mov [eax],dl - inc eax - add esi,2 - dec ecx - jnz @b - add ebp,edx - jmp .find4k - mov eax,-1 ;<---mark if OK - .exit: - mov dword[edi],-1 -ret - read_tp_variables: ; read [triangles_count_var] and [points_count_var] ; and allocate memory xor ebx,ebx @@ -2787,6 +2665,124 @@ read_tp_variables: ; read [triangles_count_var] and [points_count_var] .exit: ret +read_from_file: + fninit + mov edi,[triangles_ptr] + xor ebx,ebx + xor ebp,ebp + mov [points_count_var],0 + mov [triangles_count_var],0 + if USE_LFN = 0 + mov esi,SourceFile + else + mov esi,[fptr] + end if + cmp [esi],word 4D4Dh + jne .exit ;Must be legal .3DS file +; cmp dword[esi+2],EndFile-SourceFile +; jne .exit ;This must tell the length + mov eax,dword[esi+2] + ; cmp eax,[fsize] + ; jne .exit + + add eax,esi + mov [EndFile],eax ; + + add esi,6 + @@: + cmp [esi],word 3D3Dh + je @f + add esi,[esi+2] + jmp @b + @@: + add esi,6 + .find4k: + cmp [esi],word 4000h + je @f + add esi,[esi+2] + cmp esi,[EndFile] + jc .find4k + jmp .exit + @@: + add esi,6 + @@: + cmp [esi],byte 0 + je @f + inc esi + jmp @b + @@: + inc esi + @@: + cmp [esi],word 4100h + je @f + add esi,[esi+2] + jmp @b + @@: + add esi,6 + @@: + cmp [esi],word 4110h + je @f + add esi,[esi+2] + jmp @b + @@: + movzx ecx,word[esi+6] + add [points_count_var],cx + + mov edx,ecx + add esi,8 + @@: + push edi + mov edi,[points_ptr] + push dword[esi+4] + pop dword[edi+ebx*2+0] + push dword[esi+8] + pop dword[edi+ebx*2+4] + push dword[esi+0] + pop dword[edi+ebx*2+8] + pop edi +; fld dword[esi+4] +; fstp dword[real_points+ebx*2+0] ; x +; fld dword[esi+8] +; fstp dword[real_points+ebx*2+4] ; y +; fld dword[esi+0] +; fstp dword[real_points+ebx*2+8] ; z + + add ebx,6 + add esi,12 + dec ecx + jnz @b + @@: + ; mov dword[points+ebx],-1 + push edi + mov edi,[points_ptr] + mov dword[edi+ebx*2],-1 ; end mark (not always in use) + pop edi + @@: + cmp [esi],word 4120h + je @f + add esi,[esi+2] + jmp @b + @@: + movzx ecx,word[esi+6] + add [triangles_count_var],cx + add esi,8 + ;mov edi,triangles + @@: + movsd + movsw + add word[edi-6],bp + add word[edi-4],bp + add word[edi-2],bp + add esi,2 + dec ecx + jnz @b + add ebp,edx + jmp .find4k + mov eax,-1 ;<---mark if OK + .exit: + mov dword[edi],-1 +ret + if USE_LFN alloc_mem_for_tp: mov eax, 68 @@ -2806,20 +2802,20 @@ alloc_mem_for_tp: int 0x40 ; -> allocate memory to triangles 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, 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,-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