forked from KolibriOS/kolibrios
View3ds 0.068: Editing option - new 'editor' button [by macgub]
git-svn-id: svn://kolibrios.org@6769 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
3d2f646747
commit
c83f800bbe
@ -28,6 +28,137 @@ make_vector:
|
||||
|
||||
ret
|
||||
end if
|
||||
reverse_mx_3x3:
|
||||
; esi - source matrix
|
||||
; edi - desired reversed matrix
|
||||
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
sub esp,4
|
||||
.det equ ebp-4
|
||||
|
||||
fninit
|
||||
fld dword[esi]
|
||||
fmul dword[esi+16]
|
||||
fmul dword[esi+32]
|
||||
fld dword[esi+12]
|
||||
fmul dword[esi+28]
|
||||
fmul dword[esi+8]
|
||||
faddp
|
||||
fld dword[esi+24]
|
||||
fmul dword[esi+4]
|
||||
fmul dword[esi+20]
|
||||
faddp
|
||||
fld dword[esi]
|
||||
fmul dword[esi+28]
|
||||
fmul dword[esi+20]
|
||||
fchs
|
||||
faddp
|
||||
fld dword[esi+24]
|
||||
fmul dword[esi+16]
|
||||
fmul dword[esi+8]
|
||||
fchs
|
||||
faddp
|
||||
fld dword[esi+12]
|
||||
fmul dword[esi+4]
|
||||
fmul dword[esi+32]
|
||||
fchs
|
||||
faddp
|
||||
fstp dword[.det]
|
||||
cmp dword[.det],0
|
||||
jne @f
|
||||
int3
|
||||
@@:
|
||||
; fld1
|
||||
; fdiv dword[.det]
|
||||
; fstp dword[.det]
|
||||
|
||||
fld dword[esi+16]
|
||||
fmul dword[esi+32]
|
||||
fld dword[esi+20]
|
||||
fmul dword[esi+28]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi]
|
||||
|
||||
fld dword[esi+8]
|
||||
fmul dword[esi+28]
|
||||
fld dword[esi+4]
|
||||
fmul dword[esi+32]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+4]
|
||||
|
||||
fld dword[esi+4]
|
||||
fmul dword[esi+20]
|
||||
fld dword[esi+8]
|
||||
fmul dword[esi+16]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+8]
|
||||
|
||||
fld dword[esi+20]
|
||||
fmul dword[esi+24]
|
||||
fld dword[esi+12]
|
||||
fmul dword[esi+32]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+12]
|
||||
|
||||
fld dword[esi]
|
||||
fmul dword[esi+32]
|
||||
fld dword[esi+8]
|
||||
fmul dword[esi+24]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+16]
|
||||
|
||||
fld dword[esi+8]
|
||||
fmul dword[esi+12]
|
||||
fld dword[esi]
|
||||
fmul dword[esi+20]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+20]
|
||||
|
||||
fld dword[esi+12]
|
||||
fmul dword[esi+28]
|
||||
fld dword[esi+16]
|
||||
fmul dword[esi+24]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+24]
|
||||
|
||||
fld dword[esi+4]
|
||||
fmul dword[esi+24]
|
||||
fld dword[esi]
|
||||
fmul dword[esi+28]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+28]
|
||||
|
||||
fld dword[esi]
|
||||
fmul dword[esi+16]
|
||||
fld dword[esi+4]
|
||||
fmul dword[esi+12]
|
||||
fchs
|
||||
faddp
|
||||
fdiv dword[.det]
|
||||
fstp dword[edi+32]
|
||||
|
||||
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
ret
|
||||
|
||||
make_vector_r:
|
||||
fninit
|
||||
fld dword[edi] ;edi+x3d
|
||||
@ -211,7 +342,7 @@ make_rotation_matrix:
|
||||
faddp
|
||||
fstp dword[edi+24]
|
||||
|
||||
fld .siny
|
||||
fld .cosy
|
||||
fmul .sinz
|
||||
fstp dword[edi+4]
|
||||
|
||||
@ -377,6 +508,7 @@ ret
|
||||
translate_points: ; just convert into integer; z coord still needed
|
||||
fninit
|
||||
.again:
|
||||
if 0
|
||||
fld dword[esi+8]
|
||||
; fmul [rsscale]
|
||||
fist word[edi+4]
|
||||
@ -403,7 +535,19 @@ translate_points: ; just convert into integer; z coord still needed
|
||||
fiadd [yobs]
|
||||
fiadd [vect_y]
|
||||
fistp word[edi+2]
|
||||
|
||||
end if
|
||||
; movups xmm0,[esi]
|
||||
; cvtps2dq xmm0,xmm0
|
||||
; packsdw xmm0,xmm0
|
||||
; movq [edi]
|
||||
fld dword[esi]
|
||||
fiadd [vect_x]
|
||||
fistp word[edi]
|
||||
fld dword[esi+4]
|
||||
fiadd [vect_y]
|
||||
fistp word[edi+2]
|
||||
fld dword[esi+8]
|
||||
fistp word[edi+4]
|
||||
add esi,12
|
||||
add edi,6
|
||||
dec ecx
|
||||
|
@ -176,9 +176,9 @@ if Ext >= SSE2
|
||||
punpcklbw xmm3,xmm0
|
||||
punpcklbw xmm4,xmm0
|
||||
psubsw xmm1,xmm2
|
||||
paddw xmm1,[.bias]
|
||||
paddw xmm1,[emboss_bias]
|
||||
psubsw xmm3,xmm4
|
||||
paddw xmm3,[.bias]
|
||||
paddw xmm3,[emboss_bias]
|
||||
pmulhw xmm1,xmm3
|
||||
movaps xmm7,xmm1
|
||||
movaps xmm6,xmm1
|
||||
@ -228,9 +228,9 @@ end if
|
||||
end if
|
||||
ret
|
||||
|
||||
align 16
|
||||
.bias:
|
||||
dw 128, 128, 128, 128, 128, 128, 128, 128
|
||||
;align 16
|
||||
; emboss_bias:
|
||||
; dw 128, 128, 128, 128, 128, 128, 128, 128
|
||||
|
||||
if 0 ; old emb proc
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
tex_y_div2 dw TEX_Y / 2
|
||||
xobs dw 0 ;SIZE_X / 2 ;200 ;observer = camera
|
||||
yobs dw 0 ;SIZE_Y / 2 ;200 ;coordinates
|
||||
zobs dw -500
|
||||
zobs dw -1000
|
||||
; size_x dw SIZE_X
|
||||
; size_y dw SIZE_Y
|
||||
|
||||
@ -38,8 +38,32 @@
|
||||
XYZpartices:
|
||||
db 'X','Y','Z'
|
||||
i10 dw 10
|
||||
draw_win_at_first db 1
|
||||
offset_y:
|
||||
i25 dw 25 ; screen buff offset
|
||||
offset_x:
|
||||
i5 dw 5
|
||||
triangles_ptr dd 0
|
||||
triangles_w_z_ptr dd 0
|
||||
triangles_normals_ptr dd 0
|
||||
points_normals_ptr dd 0
|
||||
points_normals_rot_ptr dd 0
|
||||
points_ptr dd 0
|
||||
points_rotated_ptr dd 0
|
||||
points_translated_ptr dd 0
|
||||
screen_ptr dd 0
|
||||
Zbuffer_ptr dd 0
|
||||
vertices_index_ptr dd 0
|
||||
|
||||
|
||||
; draw_win_at_first db 1
|
||||
vertex_edit_no dw 0
|
||||
edit_start_x:
|
||||
dw 0
|
||||
edit_start_y dw 0
|
||||
edit_end_x:
|
||||
dw 0
|
||||
edit_end_y dw 0
|
||||
mouse_state dd 0
|
||||
menu:
|
||||
db 2 ; button number = index
|
||||
db 'rotary ' ; label
|
||||
@ -179,6 +203,12 @@ dec_bright_flag db 0 ;1
|
||||
sinus_flag db 0
|
||||
dd onoff_f
|
||||
|
||||
|
||||
db 25
|
||||
db 'editor '
|
||||
db 2
|
||||
edit_flag db 0
|
||||
dd onoff_f
|
||||
; db 24
|
||||
; db 'max '
|
||||
; db 2
|
||||
@ -314,7 +344,7 @@ base_vector:
|
||||
if Ext=SSE2
|
||||
db ' (SSE2)'
|
||||
end if
|
||||
db ' 0.067',0
|
||||
db ' 0.068',0
|
||||
labellen:
|
||||
STRdata db '-1 '
|
||||
|
||||
@ -343,7 +373,7 @@ else
|
||||
db '/rd/1/teapot.3ds',0
|
||||
end if
|
||||
|
||||
I_END:
|
||||
;I_END:
|
||||
|
||||
rb 256
|
||||
|
||||
@ -390,7 +420,11 @@ lights:
|
||||
;===============================================
|
||||
|
||||
lightsend:
|
||||
align 16
|
||||
emboss_bias:
|
||||
dw 128, 128, 128, 128, 128, 128, 128, 128
|
||||
|
||||
I_END:
|
||||
if USE_LFN = 0
|
||||
hash_table rb 4096
|
||||
SourceFile:
|
||||
@ -425,16 +459,20 @@ align 8
|
||||
;==
|
||||
triangles_count_var dw ?
|
||||
points_count_var dw ?
|
||||
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 ?
|
||||
; 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:
|
||||
dw ?
|
||||
|
@ -77,7 +77,7 @@ end if
|
||||
macro .draw_pixel
|
||||
{
|
||||
mov [esi],ebx ; actualize Z buffer
|
||||
if Ext=SSE2
|
||||
if Ext>=SSE2
|
||||
movaps xmm7,xmm1 ;[.cb] ;;xmm1
|
||||
shufps xmm7,xmm7,00111001b
|
||||
psrld xmm7,ROUND
|
||||
@ -136,8 +136,10 @@ end if
|
||||
jne .end_line
|
||||
movzx edx,word [size_x_var]
|
||||
mov [.xres],edx
|
||||
dec edx
|
||||
movzx ecx,word [size_y_var]
|
||||
mov [.yres],ecx
|
||||
dec ecx
|
||||
cmp word[.x1],dx ;SIZE_X
|
||||
jg .end_line
|
||||
cmp word[.x2],dx ;SIZE_X
|
||||
@ -209,7 +211,7 @@ end if
|
||||
|
||||
call .calc_delta
|
||||
|
||||
movzx eax,word [size_x_var] ;SIZE_X
|
||||
mov eax,[.xres] ;SIZE_X
|
||||
movsx ebx,word[.y1]
|
||||
mul ebx
|
||||
add esi,eax
|
||||
@ -275,7 +277,7 @@ end if
|
||||
|
||||
call .calc_delta
|
||||
|
||||
movzx eax,word[size_x_var] ;SIZE_X
|
||||
mov eax,[.xres] ;SIZE_X
|
||||
movsx ebx,word[.y1]
|
||||
mul ebx
|
||||
add esi,eax
|
||||
|
@ -1,3 +1,6 @@
|
||||
View3ds 0.067 - XI 2016
|
||||
1. Sizable app window.
|
||||
-----------------------------------------------------------------------------------
|
||||
|
||||
View3ds 0,066 - X 2016
|
||||
1. App window size according to current screen resolution.
|
||||
|
@ -1,10 +1,10 @@
|
||||
View3ds 0.067 - tiny viewer to .3ds and .asc files with several graphics
|
||||
View3ds 0.068 - tiny viewer to .3ds and .asc files with several graphics
|
||||
effects implementation.
|
||||
|
||||
|
||||
What's new?
|
||||
1. Sizable app window.
|
||||
|
||||
1. Editing option - new 'editor' button.
|
||||
2. For now I disable perspective correction, to make implemtation of editing option easier.
|
||||
|
||||
Buttons description:
|
||||
1. rotary: choosing rotary axle: x, y, x+y.
|
||||
@ -34,5 +34,9 @@ Buttons description:
|
||||
19. bright + -> increase picture brightness.
|
||||
20. bright - -> decrease picture brightness.
|
||||
21. wav effect -> do effect based sine function.
|
||||
22. editor -> setting editing option. If is "on" then red bars are draw according to each vertex, Pressing
|
||||
and moving left mouse button (cursor must be on handler)- change vertex position. If left mouse button
|
||||
is released apply current position. You may also decrease whole handlers count by enable culling (using
|
||||
appropriate button) - some back handlers become hidden.
|
||||
|
||||
Maciej Guba XI 2016
|
||||
|
@ -788,7 +788,9 @@ two_tex_line_z:
|
||||
mov ecx,.y
|
||||
or ecx,ecx
|
||||
jl .bl_end
|
||||
cmp cx,word[size_y_var] ;SIZE_Y
|
||||
mov dx,word[size_y_var]
|
||||
dec dx
|
||||
cmp cx,dx ;word[size_y_var] ;SIZE_Y
|
||||
jge .bl_end
|
||||
|
||||
cmp eax,ebx
|
||||
@ -827,6 +829,7 @@ end if
|
||||
push eax ebx ;store x1, x2
|
||||
mov ebx,.x1
|
||||
movzx edx,word[size_x_var]
|
||||
dec edx
|
||||
cmp ebx,edx
|
||||
; cmp bx,word[size_x_var] ;SIZE_X
|
||||
jg .bl_end
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
; application : View3ds ver. 0.067 - tiny .3ds and .asc files viewer
|
||||
; application : View3ds ver. 0.068 - tiny .3ds and .asc files viewer
|
||||
; with a few graphics effects demonstration.
|
||||
; compiler : FASM
|
||||
; system : KolibriOS
|
||||
@ -8,7 +8,7 @@
|
||||
; web : www.macgub.hekko.pl
|
||||
; Fell free to use this intro in your own distribution of KolibriOS.
|
||||
; Special greetings to KolibriOS team .
|
||||
; I hope because my intros Christian Belive will be near to each of You.
|
||||
; I hope because my demos Christian Belive will be near to each of You.
|
||||
|
||||
|
||||
; Some adjustments made by Madis Kalme
|
||||
@ -57,7 +57,7 @@ START: ; start of execution
|
||||
; mov eax,14 ; window size according to cur res ...
|
||||
; int 0x40
|
||||
; sub eax,150 shl 16 + 150
|
||||
mov eax, 600 shl 16 + 600 ; ... or set manually
|
||||
mov eax, 500 shl 16 + 600 ; ... or set manually
|
||||
mov [size_y_var],ax
|
||||
shr ax,1
|
||||
mov [vect_y],ax
|
||||
@ -132,16 +132,33 @@ START: ; start of execution
|
||||
call calc_bumpmap
|
||||
call calc_bumpmap_coords ; bump and texture mapping
|
||||
call draw_window
|
||||
mov [draw_win_at_first],0
|
||||
|
||||
; mov [draw_win_at_first],0
|
||||
; mov eax,40 ; set events mask
|
||||
; mov ebx,1100000000000000000000000100111b
|
||||
; int 0x40
|
||||
still:
|
||||
cmp [edit_flag],1
|
||||
jne @f
|
||||
mov eax,40 ; set events mask
|
||||
mov ebx,1100000000000000000000000100111b
|
||||
jmp .int
|
||||
@@:
|
||||
mov eax,40 ; set events mask
|
||||
mov ebx,111b
|
||||
.int:
|
||||
int 0x40
|
||||
|
||||
mov eax,23 ; wait here for event with timeout
|
||||
mov eax,23
|
||||
mov ebx,TIMEOUT
|
||||
cmp [speed_flag],1
|
||||
jne .skip
|
||||
cmp [speed_flag],0
|
||||
je .skip
|
||||
mov eax,11
|
||||
.skip:
|
||||
cmp [edit_flag],1
|
||||
jne @f
|
||||
mov eax,10
|
||||
|
||||
@@:
|
||||
int 0x40
|
||||
|
||||
cmp eax,1 ; redraw request ?
|
||||
@ -150,7 +167,16 @@ still:
|
||||
je key
|
||||
cmp eax,3 ; button in buffer ?
|
||||
je button
|
||||
|
||||
cmp eax,6
|
||||
jne @f
|
||||
cmp [edit_flag],1
|
||||
jne @f
|
||||
mov eax,37
|
||||
mov ebx,3 ;read mouse state
|
||||
int 0x40
|
||||
mov [mouse_state],eax
|
||||
call edit
|
||||
@@:
|
||||
jmp noclose
|
||||
|
||||
red: ; redraw
|
||||
@ -216,7 +242,7 @@ still:
|
||||
; ah = 5 -> scale-
|
||||
cmp ah,5
|
||||
jne @f
|
||||
mov [scale],0.7
|
||||
mov dword[scale],0.7
|
||||
fninit
|
||||
fld [rsscale]
|
||||
fmul [scale]
|
||||
@ -225,7 +251,7 @@ still:
|
||||
@@:
|
||||
cmp ah,6 ; ah = 6 -> scale+
|
||||
jne @f
|
||||
mov [scale],1.3
|
||||
mov dword[scale],1.3
|
||||
fninit
|
||||
fld [rsscale]
|
||||
fmul [scale]
|
||||
@ -430,6 +456,8 @@ still:
|
||||
|
||||
noclose:
|
||||
|
||||
cmp [edit_flag],1
|
||||
jz .end_rot
|
||||
cmp [r_flag],2
|
||||
jne .no_x
|
||||
inc [angle_x]
|
||||
@ -516,6 +544,19 @@ still:
|
||||
jmp .blurrr
|
||||
@@:
|
||||
call draw_triangles ; draw all triangles from the list
|
||||
cmp [edit_flag],0
|
||||
jz .no_edit
|
||||
call clear_vertices_index
|
||||
call draw_handlers
|
||||
; call edit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.no_edit:
|
||||
|
||||
.blurrr:
|
||||
cmp [sinus_flag],0
|
||||
je @f
|
||||
@ -652,75 +693,7 @@ else
|
||||
jnc .oop1
|
||||
end if
|
||||
.no_dec_bright:
|
||||
;======================================commmented====================
|
||||
if 0
|
||||
if Ext >= SSE
|
||||
cmp [max_flag],0
|
||||
je .no_max
|
||||
;movzx ebx,[max_flag]
|
||||
.again_max:
|
||||
; push ecx
|
||||
mov edi,screen
|
||||
mov ecx,SIZE_X*3/4
|
||||
; ; pxor mm5,mm5
|
||||
xor eax,eax
|
||||
rep stosd
|
||||
|
||||
mov ecx,(SIZE_X*(SIZE_Y-3))*3/8
|
||||
.calc_max:
|
||||
@@:
|
||||
movq mm0,[edi+SIZE_X*3]
|
||||
movq mm1,[edi-SIZE_X*3]
|
||||
movq mm2,[edi-3]
|
||||
movq mm3,[edi+3]
|
||||
|
||||
pmaxub mm0,mm1
|
||||
pmaxub mm2,mm3
|
||||
pmaxub mm0,mm2
|
||||
|
||||
movq [edi],mm0
|
||||
add edi,8
|
||||
loop @b
|
||||
|
||||
xor eax,eax
|
||||
mov ecx,SIZE_X*3/4
|
||||
rep stosd
|
||||
end if
|
||||
|
||||
.no_max:
|
||||
|
||||
if Ext >= SSE
|
||||
cmp [min_flag],0
|
||||
je .no_min
|
||||
; push ecx
|
||||
mov edi,screen
|
||||
mov ecx,SIZE_X*3/4
|
||||
; ; pxor mm5,mm5
|
||||
xor eax,eax
|
||||
rep stosd
|
||||
|
||||
mov ecx,(SIZE_X*(SIZE_Y-3))*3/8
|
||||
@@:
|
||||
movq mm0,[edi+SIZE_X*3]
|
||||
movq mm1,[edi-SIZE_X*3]
|
||||
movq mm2,[edi-3]
|
||||
movq mm3,[edi+3]
|
||||
|
||||
pminub mm0,mm1
|
||||
pminub mm2,mm3
|
||||
pminub mm0,mm2
|
||||
|
||||
movq [edi],mm0
|
||||
add edi,8
|
||||
loop @b
|
||||
|
||||
xor eax,eax
|
||||
|
||||
mov ecx,SIZE_X*3/4
|
||||
rep stosd
|
||||
end if
|
||||
.no_min:
|
||||
end if
|
||||
|
||||
RDTSC
|
||||
sub eax,[esp]
|
||||
@ -741,7 +714,7 @@ end if
|
||||
mov ebx,[screen_ptr]
|
||||
mov ecx,[size_y_var]
|
||||
; mov ecx,SIZE_X shl 16 + SIZE_Y
|
||||
mov edx,5 shl 16 + 25
|
||||
mov edx,[offset_y] ;5 shl 16 + 25
|
||||
int 0x40
|
||||
|
||||
mov eax,13
|
||||
@ -792,10 +765,184 @@ include "BUMP_TEX.INC"
|
||||
include "GRD_TEX.INC"
|
||||
include "TWO_TEX.INC"
|
||||
include "ASC.INC"
|
||||
clear_vertices_index:
|
||||
mov edi,[vertices_index_ptr]
|
||||
movzx eax,word[size_x_var]
|
||||
movzx ecx,word[size_y_var]
|
||||
imul ecx,eax
|
||||
xor eax,eax
|
||||
shr ecx,1
|
||||
rep stosd
|
||||
ret
|
||||
edit: ; mmx required, edit mesh by vertex
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
sub esp,128
|
||||
|
||||
.y_coord equ ebp-2
|
||||
.x_coord equ ebp-4
|
||||
.points_translated equ ebp-10
|
||||
.points equ ebp-22
|
||||
.points_rotated equ ebp-34
|
||||
.mx equ ebp-70
|
||||
|
||||
macro check_bar
|
||||
{
|
||||
movzx ebx,word[.x_coord]
|
||||
movzx ecx,word[.y_coord]
|
||||
movzx edx,word[size_x_var]
|
||||
imul edx,ecx
|
||||
add ebx,edx
|
||||
|
||||
lea ecx,[ebx*2]
|
||||
lea ebx,[ebx*3]
|
||||
add ebx,[screen_ptr]
|
||||
mov ebx,[ebx]
|
||||
and ebx,0x00ffffff
|
||||
cmp ebx,0x00ff0000 ; is handle bar ?
|
||||
}
|
||||
|
||||
emms
|
||||
mov eax,37 ; get mouse state
|
||||
mov ebx,1 ; x = 5, y = 25 - offsets
|
||||
int 0x40
|
||||
|
||||
mov ebx,[offset_y] ;5 shl 16 + 25
|
||||
movd mm0,ebx
|
||||
movd mm1,eax
|
||||
movd mm3,[size_y_var]
|
||||
pcmpgtw mm0,mm1
|
||||
pcmpgtw mm3,mm1
|
||||
pxor mm3,mm0
|
||||
movd eax,mm3
|
||||
mov cx,ax
|
||||
shr eax,16
|
||||
and ax,cx
|
||||
or ax,ax
|
||||
jz .no_edit
|
||||
|
||||
|
||||
movd mm0,ebx
|
||||
psubw mm1,mm0
|
||||
movd eax,mm1
|
||||
|
||||
; store both x and y coordinates
|
||||
ror eax,16
|
||||
; push eax
|
||||
; sub esp,256
|
||||
mov [.x_coord],eax
|
||||
test word[mouse_state],100000000b
|
||||
jz .not_press ; check if left mouse button press
|
||||
|
||||
; left button pressed
|
||||
|
||||
; macro check_bar
|
||||
; {
|
||||
; movzx ebx,word[.x_coord]
|
||||
; movzx ecx,word[.y_coord]
|
||||
; imul ebx,ecx
|
||||
; lea ecx,[ebx*2]
|
||||
; lea ebx,[ebx*3]
|
||||
; add ebx,[screen_ptr]
|
||||
; mov ebx,[ebx]
|
||||
; and ebx,0x00ffffff
|
||||
; cmp ebx,0x00ff0000 ; is handle bar ?
|
||||
; }
|
||||
|
||||
check_bar
|
||||
jne .no_edit
|
||||
add ecx,[vertices_index_ptr]
|
||||
mov cx,word[ecx]
|
||||
inc cx
|
||||
|
||||
|
||||
mov [vertex_edit_no],cx ;if vert_edit_no = 0, no vertex selected
|
||||
|
||||
mov eax,dword[.x_coord]
|
||||
mov dword[edit_end_x],eax
|
||||
mov dword[edit_start_x],eax
|
||||
jmp .end
|
||||
.not_press:
|
||||
test byte[mouse_state],1b ; check if left button is held
|
||||
jz .not_held
|
||||
; check_bar
|
||||
; jne .no_edit
|
||||
; add ecx,[vertices_index_ptr]
|
||||
; mov cx,[ecx]
|
||||
; inc cx
|
||||
cmp [vertex_edit_no],0 ; cx ; vertex number
|
||||
je .end
|
||||
push dword[.x_coord]
|
||||
pop dword[edit_end_x]
|
||||
jmp .end
|
||||
.not_held:
|
||||
shr [mouse_state],16
|
||||
test byte[mouse_state],1b ; test if left button released
|
||||
jz .end
|
||||
check_bar
|
||||
jne .end
|
||||
|
||||
movzx esi,[vertex_edit_no]
|
||||
dec esi
|
||||
lea esi,[esi*3]
|
||||
add esi,esi
|
||||
add esi,[points_translated_ptr]
|
||||
emms
|
||||
|
||||
movd mm1,dword[esi]
|
||||
paddw mm1,mm0
|
||||
psubw mm1,qword[vect_x]
|
||||
movd dword[esi],mm1
|
||||
|
||||
lea edi,[.points]
|
||||
; detranslate
|
||||
fninit
|
||||
fild word[esi+4]
|
||||
fstp dword[edi+8]
|
||||
fild word[esi+2]
|
||||
fisub word[offset_x]
|
||||
fstp dword[edi+4]
|
||||
fild word[esi]
|
||||
fisub word[offset_y] ; proteza
|
||||
fstp dword[edi]
|
||||
|
||||
mov esi,matrix
|
||||
lea edi,[.mx]
|
||||
call reverse_mx_3x3
|
||||
|
||||
lea esi,[.points]
|
||||
lea edi,[.points_rotated]
|
||||
lea ebx,[.mx]
|
||||
mov ecx,1
|
||||
call rotary
|
||||
|
||||
; inject into vertex list
|
||||
movzx edi,[vertex_edit_no]
|
||||
dec edi
|
||||
lea edi,[edi*3]
|
||||
shl edi,2
|
||||
add edi,[points_ptr]
|
||||
lea esi,[.points_rotated]
|
||||
mov ecx,3
|
||||
cld
|
||||
rep movsd
|
||||
|
||||
|
||||
mov dword[edit_end_x],0
|
||||
mov [vertex_edit_no],0
|
||||
|
||||
.no_edit:
|
||||
.end:
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
ret
|
||||
|
||||
alloc_buffer_mem:
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
.temp equ ebp-4
|
||||
push dword 0
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 11
|
||||
int 0x40 ; -> create heap, to be sure
|
||||
@ -804,31 +951,43 @@ alloc_buffer_mem:
|
||||
movzx ecx,word[size_x_var]
|
||||
movzx eax,word[size_y_var]
|
||||
mul ecx
|
||||
; add eax,100
|
||||
push eax
|
||||
|
||||
mov [.temp],eax
|
||||
lea ecx,[eax*3]
|
||||
add ecx,256
|
||||
mov eax,68
|
||||
mov ebx,20
|
||||
mov edx,[screen_ptr]
|
||||
cmp [draw_win_at_first],1
|
||||
jne @f
|
||||
xor edx,edx
|
||||
@@:
|
||||
int 0x40
|
||||
; and eax,0xfffffff0
|
||||
mov [screen_ptr],eax
|
||||
|
||||
pop ecx
|
||||
mov ecx,[.temp]
|
||||
shl ecx,2
|
||||
add ecx,256
|
||||
mov eax,68
|
||||
mov ebx,20
|
||||
mov edx,[Zbuffer_ptr]
|
||||
cmp [draw_win_at_first],1
|
||||
jne @f
|
||||
xor edx,edx
|
||||
@@:
|
||||
int 0x40
|
||||
; and eax,0xfffffff0
|
||||
mov [Zbuffer_ptr],eax
|
||||
|
||||
|
||||
mov ecx,[.temp]
|
||||
add ecx,ecx
|
||||
add ecx,256
|
||||
mov eax,68
|
||||
mov ebx,20
|
||||
mov edx,[vertices_index_ptr]
|
||||
int 0x40
|
||||
; and eax,0xfffffff0
|
||||
mov [vertices_index_ptr],eax
|
||||
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
|
||||
|
||||
|
||||
if 0
|
||||
;old Menuet style alloc
|
||||
movzx ecx,word[size_x_var]
|
||||
@ -1757,6 +1916,25 @@ ret
|
||||
|
||||
|
||||
draw_triangles:
|
||||
|
||||
emms
|
||||
; update translated list MMX required
|
||||
cmp [vertex_edit_no],0
|
||||
je @f
|
||||
movzx eax,[vertex_edit_no]
|
||||
dec eax
|
||||
movd mm0,[edit_end_x]
|
||||
psubw mm0,[edit_start_x]
|
||||
lea eax,[eax*3]
|
||||
add eax,eax
|
||||
add eax,[points_translated_ptr]
|
||||
movd mm1,dword[eax]
|
||||
paddw mm1,mm0
|
||||
movd dword[eax],mm1
|
||||
@@:
|
||||
|
||||
|
||||
|
||||
mov esi,[triangles_ptr]
|
||||
mov [edges_counter],0
|
||||
.again_dts:
|
||||
@ -1769,6 +1947,10 @@ draw_triangles:
|
||||
push ebp
|
||||
add ebp,eax
|
||||
mov eax,[ebp]
|
||||
cmp [vertex_edit_no],0
|
||||
jne @f
|
||||
|
||||
@@:
|
||||
mov dword[xx1],eax
|
||||
mov eax,[ebp+4]
|
||||
mov [zz1],ax
|
||||
@ -1823,6 +2005,44 @@ draw_triangles:
|
||||
movq qword[xx3],mm2
|
||||
; emms
|
||||
end if ; *********************************
|
||||
if 0
|
||||
cmp [vertex_edit_no],0
|
||||
jne .no_edit
|
||||
mov ax,[vertex_edit_no]
|
||||
dec ax
|
||||
cmp ax,[point_index1]
|
||||
jne @f
|
||||
movd mm0,[edit_start_x]
|
||||
psubw mm0,[edit_end_x]
|
||||
movd mm1,dword[xx1]
|
||||
paddw mm1,mm0
|
||||
movd dword[xx1],mm1
|
||||
jmp .no_edit
|
||||
@@:
|
||||
|
||||
cmp ax,[point_index2]
|
||||
jne @f
|
||||
movd mm0,[edit_start_x]
|
||||
psubw mm0,[edit_end_x]
|
||||
movd mm1,dword[xx2]
|
||||
paddw mm1,mm0
|
||||
movd dword[xx2],mm1
|
||||
jmp .no_edit
|
||||
@@:
|
||||
|
||||
cmp ax,[point_index3]
|
||||
jne @f
|
||||
movd mm0,[edit_start_x]
|
||||
psubw mm0,[edit_end_x]
|
||||
movd mm1,dword[xx3]
|
||||
paddw mm1,mm0
|
||||
movd dword[xx3],mm1
|
||||
jmp .no_edit
|
||||
@@:
|
||||
|
||||
|
||||
.no_edit:
|
||||
end if
|
||||
push esi ;
|
||||
fninit ; DO culling AT FIRST
|
||||
cmp [culling_flag],1 ; (if culling_flag = 1)
|
||||
@ -2705,6 +2925,111 @@ draw_triangles:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
draw_handlers:
|
||||
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
|
||||
.counter equ ebp-16
|
||||
.xres3m18 equ ebp-8
|
||||
.xres2m12 equ ebp-12
|
||||
|
||||
|
||||
; init counter
|
||||
sub esp,12
|
||||
push dword 0
|
||||
|
||||
movzx eax,word[size_x_var]
|
||||
lea ebx,[eax*3]
|
||||
sub ebx,18
|
||||
add eax,eax
|
||||
sub eax,12
|
||||
mov [.xres3m18],ebx
|
||||
mov [.xres2m12],eax
|
||||
|
||||
mov esi,[points_translated_ptr]
|
||||
.loop:
|
||||
push esi
|
||||
; DO culling AT FIRST
|
||||
cmp [culling_flag],1 ; (if culling_flag = 1)
|
||||
jne .no_culling
|
||||
mov edi,[.counter] ; *********************************
|
||||
lea edi,[edi*3]
|
||||
shl edi,2
|
||||
add edi,[points_normals_rot_ptr]
|
||||
mov eax,[edi+8] ; check sign of z coof
|
||||
shr eax,31
|
||||
cmp eax,1
|
||||
jnz .skip
|
||||
.no_culling:
|
||||
mov eax,[esi]
|
||||
movzx ebx,ax ; ebx - x
|
||||
shr eax,16 ; eax - y
|
||||
cmp eax,4 ; check if markers not exceedes screen
|
||||
jle .skip
|
||||
cmp ebx,4
|
||||
jle .skip
|
||||
movzx edx,word[size_x_var]
|
||||
sub edx,4
|
||||
movzx ecx,word[size_y_var]
|
||||
sub ecx,4
|
||||
cmp ebx,edx
|
||||
jge .skip
|
||||
cmp eax,ecx
|
||||
jge .skip
|
||||
|
||||
movzx edx,word[size_x_var]
|
||||
; sub ebx,3
|
||||
; sub eax,3
|
||||
imul eax,edx
|
||||
add eax,ebx
|
||||
lea edi,[eax*3]
|
||||
lea eax,[eax*2]
|
||||
; draw bar 6x6
|
||||
add edi,[screen_ptr]
|
||||
add eax,dword[vertices_index_ptr]
|
||||
|
||||
|
||||
|
||||
|
||||
mov edx,[.counter]
|
||||
mov ecx,6
|
||||
|
||||
.oop:
|
||||
push ecx
|
||||
mov ecx,6
|
||||
|
||||
@@:
|
||||
mov word[edi],0x0000 ;ax
|
||||
mov byte[edi+2],0xff ;al
|
||||
mov word[eax],dx
|
||||
add eax,2
|
||||
add edi,3
|
||||
loop @b
|
||||
add edi,[.xres3m18]
|
||||
add eax,[.xres2m12]
|
||||
pop ecx
|
||||
loop .oop
|
||||
|
||||
.skip:
|
||||
pop esi
|
||||
add esi,6
|
||||
inc dword[.counter]
|
||||
mov ecx,[.counter]
|
||||
cmp cx,[points_count_var]
|
||||
jng .loop
|
||||
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
|
||||
ret
|
||||
|
||||
|
||||
fill_Z_buffer:
|
||||
mov eax,0x70000000
|
||||
mov edi,[Zbuffer_ptr]
|
||||
@ -2900,11 +3225,11 @@ read_from_file:
|
||||
@@:
|
||||
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+0]
|
||||
push dword[esi+4]
|
||||
pop dword[edi+ebx*2+4]
|
||||
push dword[esi+8]
|
||||
pop dword[edi+ebx*2+8]
|
||||
pop edi
|
||||
; fld dword[esi+4]
|
||||
@ -3001,6 +3326,13 @@ alloc_mem_for_tp:
|
||||
int 0x40 ; -> allocate memory for triangles normals
|
||||
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
|
||||
movzx ecx, [points_count_var]
|
||||
lea ecx,[3+ecx*3]
|
||||
@ -3008,6 +3340,11 @@ alloc_mem_for_tp:
|
||||
mov edx,[points_normals_ptr]
|
||||
int 0x40
|
||||
mov [points_normals_ptr], eax
|
||||
; int3
|
||||
|
||||
|
||||
; int3
|
||||
|
||||
|
||||
mov eax, 68
|
||||
; mov ebx, 12
|
||||
@ -3067,7 +3404,6 @@ if USE_LFN
|
||||
int 0x40 ; -> read file
|
||||
|
||||
mov [fsize],ebx
|
||||
|
||||
cmp eax,6
|
||||
jnz @f
|
||||
xor eax,eax ;;;;---
|
||||
@ -3081,6 +3417,9 @@ else
|
||||
shr eax,9
|
||||
inc eax
|
||||
mov [fsize],eax
|
||||
|
||||
|
||||
|
||||
; mov ecx,ebx
|
||||
; add ecx,MEM_END
|
||||
; mov ebx,1
|
||||
@ -3192,7 +3531,7 @@ ret
|
||||
|
||||
call buttons ; more buttons
|
||||
|
||||
.Y_ADD equ 1 ;-> offset of 'add vector' buttons
|
||||
.Y_ADD equ 2 ;-> offset of 'add vector' buttons
|
||||
|
||||
; ADD VECTOR LABEL ; add vector buttons - 30 ++
|
||||
mov eax,4 ; function 4 : write text to window
|
||||
|
@ -337,12 +337,9 @@ proc get_font_size, color:dword ; x86 calling convention uses eax ecx edx
|
||||
ret
|
||||
endp
|
||||
|
||||
CODE_END: ; ¬¥âª ª®æ ¯à®£à ¬¬ë; ---------------------------------------------------------------------------- ;
|
||||
; ---------------------------------------------------------------------------- ;
|
||||
;---------------------------------------------------------------------
|
||||
;--- „€<E2809E><E282AC>›… <20><>Žƒ<C5BD>€ŒŒ› ----------------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
proc_info rd 1024
|
||||
|
||||
DATA_END: ; ¬¥âª ª®æ ¤ ëå ¯à®£à ¬¬ë; ---------------------------------------------------------------------------- ;
|
||||
|
Loading…
Reference in New Issue
Block a user