forked from KolibriOS/kolibrios
'buf2d.obj' new function and 2 examples
git-svn-id: svn://kolibrios.org@2815 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -2986,7 +2986,169 @@ proc buf_vox_obj_get_img_h_3g uses ecx, h_br:dword,k_scale:dword
|
||||
endp
|
||||
|
||||
;description:
|
||||
; äãªæ¨ï à¨áãîé ï ¢®ªá¥«ìë© ®¡ê¥ªâ
|
||||
; äãªæ¨ï à¨áãîé ï ¢®ªá¥«ìë© ®¡ê¥ªâ (¢¨¤ 1 £à ì)
|
||||
;input:
|
||||
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
|
||||
; buf_z - ¡ãä¥à £«ã¡¨ë (32 ¡¨â ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥ ᮢ¯ ¤ âì á buf_i)
|
||||
align 4
|
||||
proc buf_vox_obj_draw_1g, buf_i:dword, buf_z:dword, v_obj:dword, coord_x:dword,\
|
||||
coord_y:dword, k_scale:dword
|
||||
cmp [k_scale],0
|
||||
jl .end_f
|
||||
pushad
|
||||
mov edi,[buf_i]
|
||||
cmp buf2d_bits,24
|
||||
jne .error1
|
||||
mov edi,[buf_z]
|
||||
cmp buf2d_bits,32
|
||||
jne .error2
|
||||
|
||||
mov ecx,[k_scale]
|
||||
mov ebx,[coord_x]
|
||||
mov edx,[coord_y]
|
||||
mov edi,[v_obj]
|
||||
add edi,vox_offs_data
|
||||
xor esi,esi
|
||||
stdcall draw_sub_vox_obj_1g, [buf_i],[buf_z],[v_obj]
|
||||
|
||||
jmp .end_0
|
||||
.error1:
|
||||
stdcall print_err,sz_buf2d_vox_obj_draw_1g,txt_err_n24b
|
||||
jmp .end_0
|
||||
.error2:
|
||||
stdcall print_err,sz_buf2d_vox_obj_draw_1g,txt_err_n32b
|
||||
.end_0:
|
||||
popad
|
||||
.end_f:
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; ebx - coord_x
|
||||
; edx - coord_y
|
||||
; esi - coord_z
|
||||
; ecx - ã஢¥ì ⥪ã襣® ã§«
|
||||
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ
|
||||
align 4
|
||||
proc draw_sub_vox_obj_1g, buf_i:dword, buf_z:dword, v_obj:dword
|
||||
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
|
||||
je .sub_trees
|
||||
|
||||
;¯à®à¨á®¢ª à ¬ª¨ ¥á«¨ à §¬¥à ã§« = 1
|
||||
cmp ecx,0
|
||||
jne @f
|
||||
;¯à®¢¥àª £«ã¡¨ë esi
|
||||
stdcall buf_get_pixel, [buf_z], ebx,edx, esi
|
||||
cmp eax,esi
|
||||
jge @f
|
||||
push ecx
|
||||
mov ecx,dword[edi]
|
||||
and ecx,0xffffff
|
||||
stdcall buf_set_pixel, [buf_i], ebx,edx, ecx
|
||||
stdcall buf_set_pixel, [buf_z], ebx,edx, esi
|
||||
pop ecx
|
||||
@@:
|
||||
|
||||
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
|
||||
push edx
|
||||
;¢å®¤ ¢ãâàì ã§«
|
||||
dec ecx
|
||||
|
||||
mov eax,1
|
||||
cmp ecx,1
|
||||
jl @f
|
||||
shl eax,cl
|
||||
@@:
|
||||
|
||||
add edx,eax ;ª®à¥ªâ¨à®¢ª ¢ëá®âë ¯®¤ ¢®ªá¥«ì ¨¦¥£® ã஢ï
|
||||
|
||||
mov ah,byte[edi+3]
|
||||
add edi,4
|
||||
mov al,8
|
||||
.cycle:
|
||||
bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
|
||||
jnc .c_next
|
||||
push eax ebx edx esi
|
||||
stdcall vox_corect_coords_pl, [v_obj],1
|
||||
stdcall draw_sub_vox_obj_1g, [buf_i],[buf_z],[v_obj]
|
||||
pop esi edx ebx eax
|
||||
.c_next:
|
||||
shr ah,1
|
||||
dec al
|
||||
jnz .cycle
|
||||
;¢ë室 ¨§ ã§«
|
||||
inc ecx
|
||||
pop edx
|
||||
jmp .end_f
|
||||
.sub_trees:
|
||||
cmp ecx,0
|
||||
jl .end_0 ;¥ à¨á㥬 ®ç¥ì ¬ «¥ìª¨¥ ¢®ªá¥«¨
|
||||
|
||||
;à¨á㥬 ã§¥«
|
||||
mov eax,[edi]
|
||||
and eax,0xffffff
|
||||
|
||||
cmp ecx,1
|
||||
jl @f
|
||||
;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡
|
||||
stdcall vox_draw_square_1g, [buf_i],[buf_z],eax
|
||||
jmp .end_0
|
||||
@@:
|
||||
;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡
|
||||
push ecx
|
||||
mov ecx,eax
|
||||
stdcall buf_get_pixel, [buf_z], ebx,edx
|
||||
cmp eax,esi
|
||||
jge .end_1
|
||||
stdcall buf_set_pixel, [buf_i], ebx,edx,ecx
|
||||
stdcall buf_set_pixel, [buf_z], ebx,edx,esi
|
||||
.end_1:
|
||||
pop ecx
|
||||
.end_0:
|
||||
add edi,4
|
||||
.end_f:
|
||||
ret
|
||||
endp
|
||||
|
||||
;output:
|
||||
; eax - à §àãè ¥âáï
|
||||
align 4
|
||||
proc vox_draw_square_1g uses ecx edx edi, buf_i:dword, buf_z:dword, color:dword
|
||||
locals
|
||||
img_size dd ?
|
||||
coord_y dd ?
|
||||
endl
|
||||
mov edi,[buf_z]
|
||||
xor eax,eax
|
||||
inc eax
|
||||
shl eax,cl
|
||||
mov [img_size],eax
|
||||
mov [coord_y],eax
|
||||
.cycle_0:
|
||||
push ebx
|
||||
mov ecx,[img_size]
|
||||
cld
|
||||
.cycle_1:
|
||||
push ecx
|
||||
mov ecx,edx
|
||||
call get_pixel_32
|
||||
pop ecx
|
||||
cmp eax,esi
|
||||
jge @f
|
||||
stdcall buf_set_pixel, [buf_i], ebx,edx, [color]
|
||||
stdcall buf_set_pixel, edi, ebx,edx, esi
|
||||
@@:
|
||||
inc ebx
|
||||
loop .cycle_1
|
||||
pop ebx
|
||||
inc edx
|
||||
dec dword[coord_y]
|
||||
jnz .cycle_0
|
||||
ret
|
||||
endp
|
||||
|
||||
;description:
|
||||
; äãªæ¨ï à¨áãîé ï ¢®ªá¥«ìë© ®¡ê¥ªâ (¢¨¤® 3 £à ¨)
|
||||
;input:
|
||||
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
|
||||
; buf_z - ¡ãä¥à £«ã¡¨ë (32 ¡¨â ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥ ᮢ¯ ¤ âì á buf_i)
|
||||
@@ -3000,27 +3162,10 @@ pushad
|
||||
mov edi,[v_obj]
|
||||
mov ecx,[k_scale]
|
||||
mov ebx,[coord_x]
|
||||
|
||||
;---
|
||||
;â¥á⮢ ï à ¬ª
|
||||
mov eax,[h_br]
|
||||
|
||||
movzx edx,byte[eax]
|
||||
movzx esi,byte[eax+1]
|
||||
cmp ecx,1
|
||||
jl .end_c0
|
||||
shl edx,cl
|
||||
shl esi,cl
|
||||
.end_c0:
|
||||
stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, 0xd0d0d0
|
||||
;---
|
||||
|
||||
mov edx,[coord_y]
|
||||
add edi,vox_offs_data
|
||||
|
||||
mov esi,[coord_z]
|
||||
stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
|
||||
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
@@ -3425,15 +3570,18 @@ pushad
|
||||
pop ecx
|
||||
|
||||
;eax - à §¬¥à ®¤®£® ª¢ ¤à â
|
||||
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ
|
||||
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ
|
||||
mov ebx,[coord_x]
|
||||
mov edx,[coord_y]
|
||||
mov edi,[v_obj]
|
||||
add edi,vox_offs_data
|
||||
xor esi,esi
|
||||
push eax
|
||||
imul eax,[n_plane]
|
||||
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax
|
||||
mov eax,1
|
||||
shl eax,cl
|
||||
dec eax
|
||||
sub eax,[n_plane]
|
||||
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],eax
|
||||
popad
|
||||
.end_f:
|
||||
ret
|
||||
@@ -3531,13 +3679,16 @@ endl
|
||||
|
||||
mov eax,[v_size]
|
||||
;eax - à §¬¥à ®¤®£® ª¢ ¤à â
|
||||
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ
|
||||
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ
|
||||
mov ecx,[k_scale]
|
||||
mov ebx,[coord_x]
|
||||
mov edx,[coord_y]
|
||||
xor esi,esi
|
||||
push eax
|
||||
imul eax,[n_plane]
|
||||
mov eax,1
|
||||
shl eax,cl
|
||||
dec eax
|
||||
sub eax,[n_plane]
|
||||
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax
|
||||
|
||||
.end_2:
|
||||
@@ -3651,21 +3802,20 @@ v_size:dword
|
||||
;¯à®à¨á®¢ª à ¬ª¨ ¥á«¨ à §¬¥à ã§« = 1
|
||||
cmp ecx,0
|
||||
jne @f
|
||||
;¯à®¢¥àª £«ã¡¨ë esi
|
||||
;clip_z=n_plane*v_size
|
||||
stdcall vox_is_clip, [clip_z],[v_size]
|
||||
cmp eax,0
|
||||
je @f
|
||||
push ecx
|
||||
mov ecx,dword[edi]
|
||||
and ecx,0xffffff
|
||||
stdcall buf_rect_by_size, [buf_i], ebx,edx, [v_size],[v_size],ecx
|
||||
pop ecx
|
||||
;¯à®¢¥àª £«ã¡¨ë esi
|
||||
;clip_z=n_plane
|
||||
stdcall vox_is_clip, [clip_z];,[v_size]
|
||||
cmp eax,0
|
||||
je @f
|
||||
push ecx
|
||||
mov ecx,dword[edi]
|
||||
and ecx,0xffffff
|
||||
stdcall buf_rect_by_size, [buf_i], ebx,edx, [v_size],[v_size],ecx
|
||||
pop ecx
|
||||
@@:
|
||||
|
||||
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
|
||||
push edx
|
||||
|
||||
;¢å®¤ ¢ãâàì ã§«
|
||||
dec ecx
|
||||
|
||||
@@ -3674,6 +3824,7 @@ v_size:dword
|
||||
jl @f
|
||||
shl eax,cl
|
||||
@@:
|
||||
|
||||
add edx,eax ;ª®à¥ªâ¨à®¢ª ¢ëá®âë ¯®¤ ¢®ªá¥«ì ¨¦¥£® ã஢ï
|
||||
|
||||
mov ah,byte[edi+3]
|
||||
@@ -3690,49 +3841,46 @@ v_size:dword
|
||||
shr ah,1
|
||||
dec al
|
||||
jnz .cycle
|
||||
|
||||
;¢ë室 ¨§ ã§«
|
||||
inc ecx
|
||||
pop edx
|
||||
|
||||
jmp .end_f
|
||||
.sub_trees:
|
||||
cmp ecx,0
|
||||
jl .end_0 ;¥ à¨á㥬 ®ç¥ì ¬ «¥ìª¨¥ ¢®ªá¥«¨
|
||||
|
||||
;¯à®¢¥àª £«ã¡¨ë esi
|
||||
;clip_z=n_plane*v_size
|
||||
stdcall vox_is_clip, [clip_z],[v_size]
|
||||
cmp eax,0
|
||||
je .end_0
|
||||
;¯à®¢¥àª £«ã¡¨ë esi
|
||||
;clip_z=n_plane
|
||||
stdcall vox_is_clip, [clip_z]
|
||||
cmp eax,0
|
||||
je .end_0
|
||||
|
||||
;à¨á㥬 ã§¥«
|
||||
mov eax,[edi]
|
||||
and eax,0xffffff
|
||||
push eax ;梥â ã§«
|
||||
|
||||
mov eax,[v_size]
|
||||
cmp ecx,1
|
||||
jl @f
|
||||
;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡
|
||||
shl eax,cl ;à §¬¥à ã§«
|
||||
stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
|
||||
push ebx edx esi
|
||||
mov esi,eax
|
||||
inc ebx
|
||||
inc edx
|
||||
sub esi,2
|
||||
mov eax,[buf_i]
|
||||
push dword 128
|
||||
push dword[eax+16] ;+16 - b_color
|
||||
stdcall combine_colors_3,[edi]
|
||||
stdcall buf_rect_by_size, [buf_i], ebx,edx, esi,esi,eax
|
||||
pop esi edx ebx
|
||||
jmp .end_0
|
||||
@@:
|
||||
;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡
|
||||
stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
|
||||
;à¨á㥬 ã§¥«
|
||||
mov eax,[edi]
|
||||
and eax,0xffffff
|
||||
push eax ;梥â ã§«
|
||||
|
||||
mov eax,[v_size]
|
||||
cmp ecx,1
|
||||
jl @f
|
||||
;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡
|
||||
shl eax,cl ;à §¬¥à ã§«
|
||||
stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
|
||||
push ebx edx esi
|
||||
mov esi,eax
|
||||
inc ebx
|
||||
inc edx
|
||||
sub esi,2
|
||||
mov eax,[buf_i]
|
||||
push dword 128
|
||||
push dword[eax+16] ;+16 - b_color
|
||||
stdcall combine_colors_3,[edi]
|
||||
stdcall buf_rect_by_size, [buf_i], ebx,edx, esi,esi,eax
|
||||
pop esi edx ebx
|
||||
jmp .end_0
|
||||
@@:
|
||||
;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡
|
||||
stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
|
||||
.end_0:
|
||||
add edi,4
|
||||
.end_f:
|
||||
@@ -3744,24 +3892,24 @@ endp
|
||||
;input:
|
||||
; ecx - ã஢¥ì ⥪ã襣® ã§«
|
||||
; esi - coord z
|
||||
; clip_z - n_plane*v_size
|
||||
; clip_z - n_plane
|
||||
;output:
|
||||
; eax - 0 if no draw, 1 if draw
|
||||
align 4
|
||||
proc vox_is_clip uses ebx edi, clip_z:dword, v_size:dword
|
||||
proc vox_is_clip uses ebx edi, clip_z:dword
|
||||
xor eax,eax
|
||||
mov ebx,[clip_z]
|
||||
mov edi,[v_size]
|
||||
mov edi,1
|
||||
cmp ecx,1
|
||||
jl @f
|
||||
shl edi,cl
|
||||
@@:
|
||||
;edi = 2^ecx
|
||||
add edi,esi
|
||||
cmp edi,ebx ;if (esi+2^ecx*v_size <= (n_plane*v_size)) no draw
|
||||
cmp edi,ebx ;if (esi+2^ecx <= n_plane) no draw
|
||||
jle @f
|
||||
add ebx,[v_size]
|
||||
cmp esi,ebx ;if (esi >= (n_plane+1)*v_size) no draw
|
||||
inc ebx
|
||||
cmp esi,ebx ;if (esi >= (n_plane+1)) no draw
|
||||
jge @f
|
||||
inc eax
|
||||
@@:
|
||||
@@ -3795,9 +3943,9 @@ proc vox_corect_coords_pl, v_obj:dword, v_size:dword
|
||||
add edi,8
|
||||
sub edi,eax
|
||||
|
||||
mov eax,[v_size] ;eax - ¢ëá®â ®á®¢ ¨ï ¥¤¨¨ç®£® ¢®ªá¥«ï
|
||||
mov eax,[v_size]
|
||||
cmp ecx,1
|
||||
jl @f ;¢® ¨§¡¥¦ ¨¥ § 横«¨¢ ¨ï
|
||||
jl @f
|
||||
shl eax,cl
|
||||
@@:
|
||||
|
||||
@@ -3805,14 +3953,19 @@ proc vox_corect_coords_pl, v_obj:dword, v_size:dword
|
||||
jnc @f
|
||||
add ebx,eax
|
||||
@@:
|
||||
bt word[edi],1 ;test voxel coord y
|
||||
jnc @f
|
||||
add esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z
|
||||
@@:
|
||||
bt word[edi],2 ;test voxel coord z
|
||||
jnc @f
|
||||
sub edx,eax
|
||||
@@:
|
||||
bt word[edi],1 ;test voxel coord y
|
||||
jc @f
|
||||
mov eax,1
|
||||
cmp ecx,1
|
||||
jl .end_0
|
||||
shl eax,cl
|
||||
.end_0:
|
||||
add esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z
|
||||
@@:
|
||||
pop edi eax
|
||||
.end_f:
|
||||
ret
|
||||
@@ -3933,6 +4086,7 @@ endp
|
||||
|
||||
txt_err_n8b db 'need buffer 8 bit',13,10,0
|
||||
txt_err_n24b db 'need buffer 24 bit',13,10,0
|
||||
txt_err_n32b db 'need buffer 32 bit',13,10,0
|
||||
txt_err_n8_24b db 'need buffer 8 or 24 bit',13,10,0
|
||||
|
||||
align 16
|
||||
@@ -3968,6 +4122,7 @@ EXPORTS:
|
||||
dd sz_buf2d_vox_brush_delete, vox_brush_delete
|
||||
dd sz_buf2d_vox_obj_get_img_w_3g, buf_vox_obj_get_img_w_3g
|
||||
dd sz_buf2d_vox_obj_get_img_h_3g, buf_vox_obj_get_img_h_3g
|
||||
dd sz_buf2d_vox_obj_draw_1g, buf_vox_obj_draw_1g
|
||||
dd sz_buf2d_vox_obj_draw_3g, buf_vox_obj_draw_3g
|
||||
dd sz_buf2d_vox_obj_draw_3g_scaled, buf_vox_obj_draw_3g_scaled
|
||||
dd sz_buf2d_vox_obj_draw_pl, buf_vox_obj_draw_pl
|
||||
@@ -4005,6 +4160,7 @@ EXPORTS:
|
||||
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
|
||||
sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
|
||||
sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
|
||||
sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
|
||||
sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
|
||||
sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
|
||||
sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
|
||||
|
||||
Reference in New Issue
Block a user