2986,172 → 2986,10 |
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) |
; h_br - ª¨áâì á ¨§®¡à ¦¥¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â ) |
; v_obj - ¢®ªá¥«ìë© ®¡ê¥ªâ |
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
3162,10 → 3000,27 |
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 |
3570,7 → 3425,7 |
pop ecx |
|
;eax - à §¬¥à ®¤®£® ª¢ ¤à â |
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ |
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ |
mov ebx,[coord_x] |
mov edx,[coord_y] |
mov edi,[v_obj] |
3577,10 → 3432,7 |
add edi,vox_offs_data |
xor esi,esi |
push eax |
mov eax,1 |
shl eax,cl |
dec eax |
sub eax,[n_plane] |
imul eax,[n_plane] |
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],eax |
popad |
.end_f: |
3679,16 → 3531,13 |
|
mov eax,[v_size] |
;eax - à §¬¥à ®¤®£® ª¢ ¤à â |
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ |
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ |
mov ecx,[k_scale] |
mov ebx,[coord_x] |
mov edx,[coord_y] |
xor esi,esi |
push eax |
mov eax,1 |
shl eax,cl |
dec eax |
sub eax,[n_plane] |
imul eax,[n_plane] |
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax |
|
.end_2: |
3803,8 → 3652,8 |
cmp ecx,0 |
jne @f |
;¯à®¢¥àª £«ã¡¨ë esi |
;clip_z=n_plane |
stdcall vox_is_clip, [clip_z];,[v_size] |
;clip_z=n_plane*v_size |
stdcall vox_is_clip, [clip_z],[v_size] |
cmp eax,0 |
je @f |
push ecx |
3816,6 → 3665,7 |
|
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push edx |
|
;¢å®¤ ¢ãâàì 㧫 |
dec ecx |
|
3824,7 → 3674,6 |
jl @f |
shl eax,cl |
@@: |
|
add edx,eax ;ª®à¥ªâ¨à®¢ª ¢ëá®âë ¯®¤ ¢®ªá¥«ì ¨¦¥£® ã஢ï |
|
mov ah,byte[edi+3] |
3841,9 → 3690,11 |
shr ah,1 |
dec al |
jnz .cycle |
|
;¢ë室 ¨§ 㧫 |
inc ecx |
pop edx |
|
jmp .end_f |
.sub_trees: |
cmp ecx,0 |
3850,8 → 3701,8 |
jl .end_0 ;¥ à¨á㥬 ®ç¥ì ¬ «¥ìª¨¥ ¢®ªá¥«¨ |
|
;¯à®¢¥àª £«ã¡¨ë esi |
;clip_z=n_plane |
stdcall vox_is_clip, [clip_z] |
;clip_z=n_plane*v_size |
stdcall vox_is_clip, [clip_z],[v_size] |
cmp eax,0 |
je .end_0 |
|
3881,6 → 3732,7 |
@@: |
;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡ |
stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax |
|
.end_0: |
add edi,4 |
.end_f: |
3892,14 → 3744,14 |
;input: |
; ecx - ã஢¥ì ⥪ã襣® 㧫 |
; esi - coord z |
; clip_z - n_plane |
; clip_z - n_plane*v_size |
;output: |
; eax - 0 if no draw, 1 if draw |
align 4 |
proc vox_is_clip uses ebx edi, clip_z:dword |
proc vox_is_clip uses ebx edi, clip_z:dword, v_size:dword |
xor eax,eax |
mov ebx,[clip_z] |
mov edi,1 |
mov edi,[v_size] |
cmp ecx,1 |
jl @f |
shl edi,cl |
3906,10 → 3758,10 |
@@: |
;edi = 2^ecx |
add edi,esi |
cmp edi,ebx ;if (esi+2^ecx <= n_plane) no draw |
cmp edi,ebx ;if (esi+2^ecx*v_size <= (n_plane*v_size)) no draw |
jle @f |
inc ebx |
cmp esi,ebx ;if (esi >= (n_plane+1)) no draw |
add ebx,[v_size] |
cmp esi,ebx ;if (esi >= (n_plane+1)*v_size) no draw |
jge @f |
inc eax |
@@: |
3943,9 → 3795,9 |
add edi,8 |
sub edi,eax |
|
mov eax,[v_size] |
mov eax,[v_size] ;eax - ¢ëá®â ®á®¢ ¨ï ¥¤¨¨ç®£® ¢®ªá¥«ï |
cmp ecx,1 |
jl @f |
jl @f ;¢® ¨§¡¥¦ ¨¥ § 横«¨¢ ¨ï |
shl eax,cl |
@@: |
|
3953,19 → 3805,14 |
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 |
4086,7 → 3933,6 |
|
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 |
4122,7 → 3968,6 |
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 |
4160,7 → 4005,6 |
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 |