forked from KolibriOS/kolibrios
1547 lines
38 KiB
PHP
1547 lines
38 KiB
PHP
|
;
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tinygl
|
|||
|
;
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
macro normal_gran param, gran
|
|||
|
{
|
|||
|
mov dword[param],0.0
|
|||
|
bt dword[edi+vox_ogl_planes],vox_ogl_gran_#gran
|
|||
|
jnc @f
|
|||
|
mov dword[param],normal_gran_#gran
|
|||
|
@@:
|
|||
|
}
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
macro normal_gran_2 param, gran2, gran1
|
|||
|
{
|
|||
|
bt dword[edi+vox_ogl_planes],vox_ogl_gran_#gran2
|
|||
|
jnc @f
|
|||
|
mov dword[param],normal_gran_#gran1 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.0 <20> dword[param] <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
@@:
|
|||
|
}
|
|||
|
|
|||
|
vox_ogl_x0 equ 0
|
|||
|
vox_ogl_y0 equ 4
|
|||
|
vox_ogl_z0 equ 8
|
|||
|
vox_ogl_x1 equ 12
|
|||
|
vox_ogl_y1 equ 16
|
|||
|
vox_ogl_z1 equ 20
|
|||
|
vox_ogl_color equ 24
|
|||
|
vox_ogl_zoom equ 28
|
|||
|
vox_ogl_planes equ 30
|
|||
|
vox_ogl_size equ 34
|
|||
|
|
|||
|
def_del_planes equ 63
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
vox_ogl_gran_z1 equ 1
|
|||
|
vox_ogl_gran_z0 equ 0
|
|||
|
vox_ogl_gran_y1 equ 3
|
|||
|
vox_ogl_gran_y0 equ 2
|
|||
|
vox_ogl_gran_x1 equ 5
|
|||
|
vox_ogl_gran_x0 equ 4
|
|||
|
vox_ogl_gran_y1z1 equ 7
|
|||
|
vox_ogl_gran_y0z0 equ 6
|
|||
|
vox_ogl_gran_x1z1 equ 9
|
|||
|
vox_ogl_gran_x0z0 equ 8
|
|||
|
vox_ogl_gran_y0z1 equ 11
|
|||
|
vox_ogl_gran_y1z0 equ 10
|
|||
|
vox_ogl_gran_x0z1 equ 13
|
|||
|
vox_ogl_gran_x1z0 equ 12
|
|||
|
vox_ogl_gran_x1y1 equ 15
|
|||
|
vox_ogl_gran_x0y0 equ 14
|
|||
|
vox_ogl_gran_x0y1 equ 17
|
|||
|
vox_ogl_gran_x1y0 equ 16
|
|||
|
|
|||
|
|
|||
|
vox_offs_tree_table equ 4
|
|||
|
vox_offs_data equ 12
|
|||
|
|
|||
|
|
|||
|
;description:
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 3d <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;input:
|
|||
|
align 4
|
|||
|
proc buf_vox_obj_create_3d, v_obj:dword, p_mem:dword, coord_x:dword,\
|
|||
|
coord_y:dword, k_scale:dword
|
|||
|
cmp [k_scale],0
|
|||
|
jl .end_f
|
|||
|
pushad
|
|||
|
mov edi,[p_mem]
|
|||
|
mov dword[edi],0 ;count voxels
|
|||
|
|
|||
|
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 create_sub_vox_obj_3d, [v_obj],[p_mem],[k_scale]
|
|||
|
|
|||
|
; (1)
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x,y,z
|
|||
|
;
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
;inc ecx
|
|||
|
add edi,4
|
|||
|
sub edi,vox_ogl_size
|
|||
|
stdcall pole_fl_sort, edi, ecx
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_0:
|
|||
|
mov ax,word[edi+vox_ogl_zoom]
|
|||
|
cmp ax,word[edi+vox_ogl_size+vox_ogl_zoom]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_x0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_y0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
inc eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_z0]
|
|||
|
jne @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_planes],vox_ogl_gran_z1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_z0 ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_0
|
|||
|
|
|||
|
push ebx edx esi
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
mov ebx,ecx
|
|||
|
;inc ebx ;??? cmp esi,ebx -> jge @f
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,edi
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_3:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_4:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_4
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
inc eax ; y+
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jl @f
|
|||
|
jne .cycle_4
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
inc eax ; z+
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jne .cycle_4
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_y1z1 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_y0z0 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_3
|
|||
|
|
|||
|
; ***
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_7:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_8:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_8
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
inc eax ; y+
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jl @f
|
|||
|
jne .cycle_8
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
dec eax ; z-
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jne .cycle_8
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_y1z0 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_y0z1 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_7
|
|||
|
pop esi edx ebx
|
|||
|
|
|||
|
; (2)
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x,z,y
|
|||
|
;
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
add edi,4
|
|||
|
sub edi,vox_ogl_size
|
|||
|
stdcall pole_fl_sort_zxy, edi, ecx
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_1:
|
|||
|
mov ax,word[edi+vox_ogl_zoom]
|
|||
|
cmp ax,word[edi+vox_ogl_size+vox_ogl_zoom]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_z0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_x0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
inc eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_y0]
|
|||
|
jne @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_planes],vox_ogl_gran_y1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_y0 ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_1
|
|||
|
|
|||
|
push ebx edx esi
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
mov ebx,ecx
|
|||
|
;inc ebx ;??? cmp esi,ebx -> jge @f
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,edi
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_11:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_12:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_12
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
inc eax ; x+
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jl @f
|
|||
|
jne .cycle_12
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
inc eax ; y+
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jne .cycle_12
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_x1y1 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_x0y0 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_11
|
|||
|
|
|||
|
; ***
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_15:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_16:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_16
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
inc eax ; x+
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jl @f
|
|||
|
jne .cycle_16
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
dec eax ; y-
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jne .cycle_16
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_x1y0 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_x0y1 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_15
|
|||
|
|
|||
|
pop esi edx ebx
|
|||
|
|
|||
|
; (3)
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y,z,x
|
|||
|
;
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
add edi,4
|
|||
|
sub edi,vox_ogl_size
|
|||
|
stdcall pole_fl_sort_yzx, edi, ecx
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_2:
|
|||
|
mov ax,word[edi+vox_ogl_zoom]
|
|||
|
cmp ax,word[edi+vox_ogl_size+vox_ogl_zoom]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_y0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_z0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
inc eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
cmp eax,dword[edi+vox_ogl_size+vox_ogl_x0]
|
|||
|
jne @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_planes],vox_ogl_gran_x1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_x0 ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_2
|
|||
|
|
|||
|
push ebx edx esi
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
mov ebx,ecx
|
|||
|
;inc ebx ;??? cmp esi,ebx -> jge @f
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,edi
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_5:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_6:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_6
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
inc eax ; z+
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jl @f
|
|||
|
jne .cycle_6
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
inc eax ; x+
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jne .cycle_6
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_x1z1 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_x0z0 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_5
|
|||
|
|
|||
|
; ***
|
|||
|
mov edi,[p_mem]
|
|||
|
mov ecx,dword[edi]
|
|||
|
dec ecx
|
|||
|
add edi,4
|
|||
|
|
|||
|
align 4
|
|||
|
.cycle_9:
|
|||
|
mov dx,word[edi+vox_ogl_zoom]
|
|||
|
mov esi,edi
|
|||
|
align 4
|
|||
|
.cycle_10:
|
|||
|
add esi,vox_ogl_size
|
|||
|
cmp esi,ebx
|
|||
|
jg @f
|
|||
|
cmp dx,word[esi+vox_ogl_zoom]
|
|||
|
jne .cycle_10
|
|||
|
|
|||
|
mov eax,dword[edi+vox_ogl_y0]
|
|||
|
cmp eax,dword[esi+vox_ogl_y0]
|
|||
|
jne @f
|
|||
|
mov eax,dword[edi+vox_ogl_z0]
|
|||
|
inc eax ; z+
|
|||
|
cmp eax,dword[esi+vox_ogl_z0]
|
|||
|
jl @f
|
|||
|
jne .cycle_10
|
|||
|
mov eax,dword[edi+vox_ogl_x0]
|
|||
|
dec eax ; x-
|
|||
|
cmp eax,dword[esi+vox_ogl_x0]
|
|||
|
jne .cycle_10
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bts dword[edi+vox_ogl_planes],vox_ogl_gran_x0z1 ;
|
|||
|
bts dword[esi+vox_ogl_planes],vox_ogl_gran_x1z0 ;
|
|||
|
@@:
|
|||
|
add edi,vox_ogl_size
|
|||
|
loop .cycle_9
|
|||
|
|
|||
|
pop esi edx ebx
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> float
|
|||
|
stdcall vox_obj_3d_recalc, [p_mem]
|
|||
|
popad
|
|||
|
.end_f:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;input:
|
|||
|
; ebx - coord_x
|
|||
|
; edx - coord_y
|
|||
|
; esi - coord_z
|
|||
|
; ecx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; edi - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
proc create_sub_vox_obj_3d, v_obj:dword, p_mem:dword, k_scale:dword
|
|||
|
cmp byte[edi+3],0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
je .sub_trees
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
cmp ecx,0
|
|||
|
jne @f
|
|||
|
push ecx
|
|||
|
mov eax,[p_mem]
|
|||
|
inc dword[eax] ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1
|
|||
|
mov eax,[eax]
|
|||
|
imul eax,vox_ogl_size ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add eax,4-vox_ogl_size ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add eax,[p_mem]
|
|||
|
mov [eax+vox_ogl_x0],ebx
|
|||
|
mov [eax+vox_ogl_y0],edx
|
|||
|
mov [eax+vox_ogl_z0],esi
|
|||
|
sub ecx,[k_scale]
|
|||
|
mov word[eax+vox_ogl_zoom],cx
|
|||
|
mov dword[eax+vox_ogl_planes],def_del_planes
|
|||
|
mov ecx,dword[edi]
|
|||
|
and ecx,0xffffff
|
|||
|
mov [eax+vox_ogl_color],ecx
|
|||
|
pop ecx
|
|||
|
@@:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
push edx
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
dec ecx
|
|||
|
|
|||
|
mov eax,1
|
|||
|
cmp ecx,1
|
|||
|
jl @f
|
|||
|
shl eax,cl
|
|||
|
@@:
|
|||
|
|
|||
|
add edx,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
mov ah,byte[edi+3]
|
|||
|
add edi,4
|
|||
|
mov al,8
|
|||
|
.cycle:
|
|||
|
bt ax,8 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ah
|
|||
|
jnc .c_next
|
|||
|
push eax ebx edx esi
|
|||
|
stdcall vox_corect_coords_pl, [v_obj],1
|
|||
|
stdcall create_sub_vox_obj_3d, [v_obj], [p_mem],[k_scale]
|
|||
|
pop esi edx ebx eax
|
|||
|
.c_next:
|
|||
|
shr ah,1
|
|||
|
dec al
|
|||
|
jnz .cycle
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
inc ecx
|
|||
|
pop edx
|
|||
|
jmp .end_f
|
|||
|
.sub_trees:
|
|||
|
cmp ecx,0
|
|||
|
jl .end_0 ;<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
;cmp ecx,1
|
|||
|
;jl @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;stdcall vox_draw_square_1g, [buf_i],[buf_z],eax
|
|||
|
;jmp .end_0
|
|||
|
;@@:
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
push ecx
|
|||
|
mov eax,[p_mem]
|
|||
|
inc dword[eax] ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1
|
|||
|
mov eax,[eax]
|
|||
|
imul eax,vox_ogl_size ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add eax,4-vox_ogl_size ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
add eax,[p_mem]
|
|||
|
mov [eax+vox_ogl_x0],ebx
|
|||
|
mov [eax+vox_ogl_y0],edx
|
|||
|
mov [eax+vox_ogl_z0],esi
|
|||
|
cmp ecx,1
|
|||
|
jl @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
shr dword[eax+vox_ogl_x0],cl
|
|||
|
shr dword[eax+vox_ogl_y0],cl
|
|||
|
shr dword[eax+vox_ogl_z0],cl
|
|||
|
@@:
|
|||
|
sub ecx,[k_scale]
|
|||
|
mov word[eax+vox_ogl_zoom],cx
|
|||
|
mov dword[eax+vox_ogl_planes],def_del_planes
|
|||
|
mov ecx,dword[edi]
|
|||
|
and ecx,0xffffff
|
|||
|
mov [eax+vox_ogl_color],ecx
|
|||
|
pop ecx
|
|||
|
.end_0:
|
|||
|
add edi,4
|
|||
|
.end_f:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;description:
|
|||
|
; <EFBFBD> OpenGL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> float
|
|||
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> int <EFBFBD><EFBFBD> float,
|
|||
|
align 4
|
|||
|
proc vox_obj_3d_recalc uses eax ebx ecx, p_mem:dword
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 0 <EFBFBD><EFBFBD> 1 <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,[p_mem]
|
|||
|
mov ecx,dword[eax]
|
|||
|
add eax,4
|
|||
|
|
|||
|
finit
|
|||
|
align 4
|
|||
|
@@:
|
|||
|
fild word[eax+vox_ogl_zoom]
|
|||
|
fld1 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fscale ; st0=1*2^st1 <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fxch
|
|||
|
|
|||
|
;coord x
|
|||
|
fild dword[eax+vox_ogl_x0]
|
|||
|
fscale
|
|||
|
fchs
|
|||
|
fst dword[eax+vox_ogl_x0]
|
|||
|
fsub st0,st2 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fstp dword[eax+vox_ogl_x1]
|
|||
|
;coord y
|
|||
|
fild dword[eax+vox_ogl_y0]
|
|||
|
fscale
|
|||
|
fst dword[eax+vox_ogl_y0]
|
|||
|
fadd st0,st2
|
|||
|
fstp dword[eax+vox_ogl_y1]
|
|||
|
;coord z
|
|||
|
fild dword[eax+vox_ogl_z0]
|
|||
|
fscale
|
|||
|
fst dword[eax+vox_ogl_z0]
|
|||
|
fadd st0,st2
|
|||
|
fstp dword[eax+vox_ogl_z1]
|
|||
|
|
|||
|
;goto next voxel
|
|||
|
add eax,vox_ogl_size
|
|||
|
ffree st0
|
|||
|
fincstp
|
|||
|
ffree st0
|
|||
|
fincstp
|
|||
|
loop @b
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 0.5 <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,[p_mem]
|
|||
|
mov ecx,dword[eax]
|
|||
|
add eax,4
|
|||
|
fld1 ;st0=1
|
|||
|
fchs ;st0=-1
|
|||
|
fld1 ;st0=1 st1=-1
|
|||
|
fscale ;st0=1*2^st1 <EFBFBD><EFBFBD><EFBFBD> 1*2^-1=1/2=0.5
|
|||
|
align 4
|
|||
|
@@:
|
|||
|
;coord x
|
|||
|
fld dword[eax+vox_ogl_x0]
|
|||
|
fadd st0,st1 ;+0.5
|
|||
|
fstp dword[eax+vox_ogl_x0]
|
|||
|
fld dword[eax+vox_ogl_x1]
|
|||
|
fadd st0,st1 ;+0.5
|
|||
|
fstp dword[eax+vox_ogl_x1]
|
|||
|
;coord y
|
|||
|
fld dword[eax+vox_ogl_y0]
|
|||
|
fsub st0,st1 ;-0.5
|
|||
|
fstp dword[eax+vox_ogl_y0]
|
|||
|
fld dword[eax+vox_ogl_y1]
|
|||
|
fsub st0,st1 ;-0.5
|
|||
|
fstp dword[eax+vox_ogl_y1]
|
|||
|
;coord z
|
|||
|
fld dword[eax+vox_ogl_z0]
|
|||
|
fsub st0,st1 ;-0.5
|
|||
|
fstp dword[eax+vox_ogl_z0]
|
|||
|
fld dword[eax+vox_ogl_z1]
|
|||
|
fsub st0,st1 ;-0.5
|
|||
|
fstp dword[eax+vox_ogl_z1]
|
|||
|
|
|||
|
;goto next voxel
|
|||
|
add eax,vox_ogl_size
|
|||
|
loop @b
|
|||
|
ffree st0
|
|||
|
fincstp
|
|||
|
ffree st0
|
|||
|
fincstp
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..n] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
proc pole_fl_sort, a:dword, n:dword
|
|||
|
pushad
|
|||
|
mov ecx,dword[a]
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
shr eax,1
|
|||
|
@@: ;for(i=n/2; i>=2; i--)
|
|||
|
stdcall pole_fl_surface, ecx,eax,[n] ;(a,i,n)
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
@@: ;for(i=n; i>=2; i--){
|
|||
|
stdcall pole_fl_surface, ecx,1,eax ;(a,1,i)
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall swap_cell, ecx,1,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1] <-> a[i]
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..k]
|
|||
|
align 4
|
|||
|
proc pole_fl_surface, a:dword, i:dword, k:dword
|
|||
|
pushad
|
|||
|
;edx -> ...
|
|||
|
;edi -> m
|
|||
|
;esi -> j
|
|||
|
mov eax,dword[a]
|
|||
|
mov ebx,dword[i]
|
|||
|
mov ecx,dword[k]
|
|||
|
|
|||
|
stdcall copy_cell, eax, -1,ebx ;copy=a[i];
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i <EFBFBD><EFBFBD><EFBFBD> edi=m
|
|||
|
.cycle_b: ;while (m<=k) {
|
|||
|
cmp edi,ecx
|
|||
|
jg .cycle_e
|
|||
|
jne @f ;if (m==k) j=m;
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else if (pole_compare_cells_bm(a[m],a[m+1])) j=m;
|
|||
|
mov edx,edi
|
|||
|
inc edx
|
|||
|
stdcall pole_compare_cells_bm, eax, edi,edx
|
|||
|
cmp dl,0
|
|||
|
je @f
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else j=m+1;
|
|||
|
mov esi,edi
|
|||
|
inc esi
|
|||
|
.else_e:
|
|||
|
|
|||
|
;if (pole_compare_cells_bm(a[j],copy)) {
|
|||
|
stdcall pole_compare_cells_bm, eax, esi,-1
|
|||
|
cmp dl,0
|
|||
|
je .cycle_e ;} else break; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
stdcall copy_cell, eax, ebx,esi ;a[i]=a[j];
|
|||
|
mov ebx,esi ;i=j;
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i;
|
|||
|
|
|||
|
jmp .cycle_b
|
|||
|
.cycle_e:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>. <EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall copy_cell, eax, ebx,-1 ;a[i]=copy;
|
|||
|
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;output:
|
|||
|
; dl
|
|||
|
align 4
|
|||
|
proc pole_compare_cells_bm uses eax ebx ecx, p_mem:dword, i0:dword, i1:dword
|
|||
|
|
|||
|
mov eax,[i0] ;eax -> cell[i0]
|
|||
|
imul eax,vox_ogl_size
|
|||
|
add eax,[p_mem]
|
|||
|
|
|||
|
mov ebx,[i1] ;ebx -> cell[i1]
|
|||
|
cmp ebx,0
|
|||
|
jl .copy
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy:
|
|||
|
mov ebx,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
mov cx,word[ebx+vox_ogl_zoom] ;zoom
|
|||
|
cmp word[eax+vox_ogl_zoom],cx
|
|||
|
jle @f ;zoom0>zoom1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if zoom0<zoom1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_x0] ;coord x
|
|||
|
cmp dword[eax+vox_ogl_x0],ecx
|
|||
|
jle @f ;x0>x1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if x0<x1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_y0] ;coord y
|
|||
|
cmp dword[eax+vox_ogl_y0],ecx
|
|||
|
jle @f ;y0>y1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if y0<y1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_z0] ;coord z
|
|||
|
cmp dword[eax+vox_ogl_z0],ecx
|
|||
|
jle @f ;z0>z1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
|
|||
|
.r_0:
|
|||
|
xor dl,dl
|
|||
|
.fun_e:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
if 0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..n] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
proc pole_fl_sort_xzy, a:dword, n:dword
|
|||
|
pushad
|
|||
|
mov ecx,dword[a]
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
shr eax,1
|
|||
|
@@: ;for(i=n/2; i>=2; i--)
|
|||
|
stdcall pole_fl_surface_xzy, ecx,eax,[n] ;(a,i,n)
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
@@: ;for(i=n; i>=2; i--){
|
|||
|
stdcall pole_fl_surface_xzy, ecx,1,eax ;(a,1,i)
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall swap_cell, ecx,1,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1] <-> a[i]
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..k]
|
|||
|
align 4
|
|||
|
proc pole_fl_surface_xzy, a:dword, i:dword, k:dword
|
|||
|
pushad
|
|||
|
;edx -> ...
|
|||
|
;edi -> m
|
|||
|
;esi -> j
|
|||
|
mov eax,dword[a]
|
|||
|
mov ebx,dword[i]
|
|||
|
mov ecx,dword[k]
|
|||
|
|
|||
|
stdcall copy_cell, eax, -1,ebx ;copy=a[i];
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i <EFBFBD><EFBFBD><EFBFBD> edi=m
|
|||
|
.cycle_b: ;while (m<=k) {
|
|||
|
cmp edi,ecx
|
|||
|
jg .cycle_e
|
|||
|
jne @f ;if (m==k) j=m;
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else if (pole_compare_bm_xzy(a[m],a[m+1])) j=m;
|
|||
|
mov edx,edi
|
|||
|
inc edx
|
|||
|
stdcall pole_compare_bm_xzy, eax, edi,edx
|
|||
|
cmp dl,0
|
|||
|
je @f
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else j=m+1;
|
|||
|
mov esi,edi
|
|||
|
inc esi
|
|||
|
.else_e:
|
|||
|
|
|||
|
;if (pole_compare_bm_xzy(a[j],copy)) {
|
|||
|
stdcall pole_compare_bm_xzy, eax, esi,-1
|
|||
|
cmp dl,0
|
|||
|
je .cycle_e ;} else break; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
stdcall copy_cell, eax, ebx,esi ;a[i]=a[j];
|
|||
|
mov ebx,esi ;i=j;
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i;
|
|||
|
|
|||
|
jmp .cycle_b
|
|||
|
.cycle_e:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>. <EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall copy_cell, eax, ebx,-1 ;a[i]=copy;
|
|||
|
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;output:
|
|||
|
; dl
|
|||
|
align 4
|
|||
|
proc pole_compare_bm_xzy uses eax ebx ecx, p_mem:dword, i0:dword, i1:dword
|
|||
|
|
|||
|
mov eax,[i0] ;eax -> cell[i0]
|
|||
|
imul eax,vox_ogl_size
|
|||
|
add eax,[p_mem]
|
|||
|
|
|||
|
mov ebx,[i1] ;ebx -> cell[i1]
|
|||
|
cmp ebx,0
|
|||
|
jl .copy
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy:
|
|||
|
mov ebx,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
mov cx,word[ebx+vox_ogl_zoom] ;zoom
|
|||
|
cmp word[eax+vox_ogl_zoom],cx
|
|||
|
jle @f ;zoom0>zoom1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if zoom0<zoom1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_x0] ;coord x
|
|||
|
cmp dword[eax+vox_ogl_x0],ecx
|
|||
|
jle @f ;x0>x1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if x0<x1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_z0] ;coord z
|
|||
|
cmp dword[eax+vox_ogl_z0],ecx
|
|||
|
jle @f ;z0>z1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if z0<z1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_y0] ;coord y
|
|||
|
cmp dword[eax+vox_ogl_y0],ecx
|
|||
|
jle @f ;y0>y1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
|
|||
|
.r_0:
|
|||
|
xor dl,dl
|
|||
|
.fun_e:
|
|||
|
ret
|
|||
|
endp
|
|||
|
end if
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..n] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
proc pole_fl_sort_zxy, a:dword, n:dword
|
|||
|
pushad
|
|||
|
mov ecx,dword[a]
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
shr eax,1
|
|||
|
@@: ;for(i=n/2; i>=2; i--)
|
|||
|
stdcall pole_fl_surface_zxy, ecx,eax,[n] ;(a,i,n)
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
@@: ;for(i=n; i>=2; i--){
|
|||
|
stdcall pole_fl_surface_zxy, ecx,1,eax ;(a,1,i)
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall swap_cell, ecx,1,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1] <-> a[i]
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..k]
|
|||
|
align 4
|
|||
|
proc pole_fl_surface_zxy, a:dword, i:dword, k:dword
|
|||
|
pushad
|
|||
|
;edx -> ...
|
|||
|
;edi -> m
|
|||
|
;esi -> j
|
|||
|
mov eax,dword[a]
|
|||
|
mov ebx,dword[i]
|
|||
|
mov ecx,dword[k]
|
|||
|
|
|||
|
stdcall copy_cell, eax, -1,ebx ;copy=a[i];
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i <EFBFBD><EFBFBD><EFBFBD> edi=m
|
|||
|
.cycle_b: ;while (m<=k) {
|
|||
|
cmp edi,ecx
|
|||
|
jg .cycle_e
|
|||
|
jne @f ;if (m==k) j=m;
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else if (pole_compare_bm_xzy(a[m],a[m+1])) j=m;
|
|||
|
mov edx,edi
|
|||
|
inc edx
|
|||
|
stdcall pole_compare_bm_zxy, eax, edi,edx
|
|||
|
cmp dl,0
|
|||
|
je @f
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else j=m+1;
|
|||
|
mov esi,edi
|
|||
|
inc esi
|
|||
|
.else_e:
|
|||
|
|
|||
|
;if (pole_compare_bm_xzy(a[j],copy)) {
|
|||
|
stdcall pole_compare_bm_zxy, eax, esi,-1
|
|||
|
cmp dl,0
|
|||
|
je .cycle_e ;} else break; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
stdcall copy_cell, eax, ebx,esi ;a[i]=a[j];
|
|||
|
mov ebx,esi ;i=j;
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i;
|
|||
|
|
|||
|
jmp .cycle_b
|
|||
|
.cycle_e:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>. <EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall copy_cell, eax, ebx,-1 ;a[i]=copy;
|
|||
|
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;output:
|
|||
|
; dl
|
|||
|
align 4
|
|||
|
proc pole_compare_bm_zxy uses eax ebx ecx, p_mem:dword, i0:dword, i1:dword
|
|||
|
|
|||
|
mov eax,[i0] ;eax -> cell[i0]
|
|||
|
imul eax,vox_ogl_size
|
|||
|
add eax,[p_mem]
|
|||
|
|
|||
|
mov ebx,[i1] ;ebx -> cell[i1]
|
|||
|
cmp ebx,0
|
|||
|
jl .copy
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy:
|
|||
|
mov ebx,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
mov cx,word[ebx+vox_ogl_zoom] ;zoom
|
|||
|
cmp word[eax+vox_ogl_zoom],cx
|
|||
|
jle @f ;zoom0>zoom1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if zoom0<zoom1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_z0] ;coord z
|
|||
|
cmp dword[eax+vox_ogl_z0],ecx
|
|||
|
jle @f ;z0>z1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if z0<z1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_x0] ;coord x
|
|||
|
cmp dword[eax+vox_ogl_x0],ecx
|
|||
|
jle @f ;x0>x1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if x0<x1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_y0] ;coord y
|
|||
|
cmp dword[eax+vox_ogl_y0],ecx
|
|||
|
jle @f ;y0>y1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
|
|||
|
.r_0:
|
|||
|
xor dl,dl
|
|||
|
.fun_e:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..n] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
align 4
|
|||
|
proc pole_fl_sort_yzx, a:dword, n:dword
|
|||
|
pushad
|
|||
|
mov ecx,dword[a]
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
shr eax,1
|
|||
|
@@: ;for(i=n/2; i>=2; i--)
|
|||
|
stdcall pole_fl_surface_yzx, ecx,eax,[n] ;(a,i,n)
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov eax,dword[n]
|
|||
|
@@: ;for(i=n; i>=2; i--){
|
|||
|
stdcall pole_fl_surface_yzx, ecx,1,eax ;(a,1,i)
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall swap_cell, ecx,1,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1] <-> a[i]
|
|||
|
dec eax
|
|||
|
cmp eax,2
|
|||
|
jge @b
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..k]
|
|||
|
align 4
|
|||
|
proc pole_fl_surface_yzx, a:dword, i:dword, k:dword
|
|||
|
pushad
|
|||
|
;edx -> ...
|
|||
|
;edi -> m
|
|||
|
;esi -> j
|
|||
|
mov eax,dword[a]
|
|||
|
mov ebx,dword[i]
|
|||
|
mov ecx,dword[k]
|
|||
|
|
|||
|
stdcall copy_cell, eax, -1,ebx ;copy=a[i];
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i <EFBFBD><EFBFBD><EFBFBD> edi=m
|
|||
|
.cycle_b: ;while (m<=k) {
|
|||
|
cmp edi,ecx
|
|||
|
jg .cycle_e
|
|||
|
jne @f ;if (m==k) j=m;
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else if (pole_compare_bm_yzx(a[m],a[m+1])) j=m;
|
|||
|
mov edx,edi
|
|||
|
inc edx
|
|||
|
stdcall pole_compare_bm_yzx, eax, edi,edx
|
|||
|
cmp dl,0
|
|||
|
je @f
|
|||
|
mov esi,edi
|
|||
|
jmp .else_e
|
|||
|
@@: ;else j=m+1;
|
|||
|
mov esi,edi
|
|||
|
inc esi
|
|||
|
.else_e:
|
|||
|
|
|||
|
;if (pole_compare_bm_yzx(a[j],copy)) {
|
|||
|
stdcall pole_compare_bm_yzx, eax, esi,-1
|
|||
|
cmp dl,0
|
|||
|
je .cycle_e ;} else break; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
stdcall copy_cell, eax, ebx,esi ;a[i]=a[j];
|
|||
|
mov ebx,esi ;i=j;
|
|||
|
mov edi,ebx
|
|||
|
shl edi,1 ;m=2*i;
|
|||
|
|
|||
|
jmp .cycle_b
|
|||
|
.cycle_e:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>. <EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall copy_cell, eax, ebx,-1 ;a[i]=copy;
|
|||
|
|
|||
|
popad
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
;output:
|
|||
|
; dl
|
|||
|
align 4
|
|||
|
proc pole_compare_bm_yzx uses eax ebx ecx, p_mem:dword, i0:dword, i1:dword
|
|||
|
|
|||
|
mov eax,[i0] ;eax -> cell[i0]
|
|||
|
imul eax,vox_ogl_size
|
|||
|
add eax,[p_mem]
|
|||
|
|
|||
|
mov ebx,[i1] ;ebx -> cell[i1]
|
|||
|
cmp ebx,0
|
|||
|
jl .copy
|
|||
|
imul ebx,vox_ogl_size
|
|||
|
add ebx,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy:
|
|||
|
mov ebx,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
mov cx,word[ebx+vox_ogl_zoom] ;zoom
|
|||
|
cmp word[eax+vox_ogl_zoom],cx
|
|||
|
jle @f ;zoom0>zoom1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if zoom0<zoom1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_y0] ;coord y
|
|||
|
cmp dword[eax+vox_ogl_y0],ecx
|
|||
|
jle @f ;y0>y1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if y0<y1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_z0] ;coord z
|
|||
|
cmp dword[eax+vox_ogl_z0],ecx
|
|||
|
jle @f ;z0>z1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
jne .r_0 ;if z0<z1 return 0
|
|||
|
|
|||
|
mov ecx,dword[ebx+vox_ogl_x0] ;coord x
|
|||
|
cmp dword[eax+vox_ogl_x0],ecx
|
|||
|
jle @f ;x0>x1
|
|||
|
mov dl,1
|
|||
|
jmp .fun_e
|
|||
|
@@:
|
|||
|
|
|||
|
.r_0:
|
|||
|
xor dl,dl
|
|||
|
.fun_e:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc copy_cell uses ecx edi esi, p_mem:dword, i0:dword, i1:dword
|
|||
|
|
|||
|
mov esi,[i1]
|
|||
|
cmp esi,0
|
|||
|
jl .copy_0
|
|||
|
imul esi,vox_ogl_size
|
|||
|
add esi,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy_0:
|
|||
|
mov esi,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
mov edi,[i0]
|
|||
|
cmp edi,0
|
|||
|
jl .copy_1
|
|||
|
imul edi,vox_ogl_size
|
|||
|
add edi,[p_mem]
|
|||
|
jmp @f
|
|||
|
.copy_1:
|
|||
|
mov edi,mem_copy_32
|
|||
|
@@:
|
|||
|
|
|||
|
if vox_ogl_size eq 34
|
|||
|
mov ecx,8 ;ecx=32/4
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
movsw
|
|||
|
else
|
|||
|
vox_ogl_size <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 34 !
|
|||
|
end if
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
proc swap_cell uses eax ebx ecx edi esi, p_mem:dword, i0:dword, i1:dword
|
|||
|
mov esi,[i0]
|
|||
|
imul esi,vox_ogl_size
|
|||
|
add esi,[p_mem]
|
|||
|
mov edi,[i1]
|
|||
|
imul edi,vox_ogl_size
|
|||
|
add edi,[p_mem]
|
|||
|
if vox_ogl_size eq 34
|
|||
|
;vox_ogl_size = 34 = 32 + 2
|
|||
|
mov ecx,8 ;ecx=32/4
|
|||
|
cld
|
|||
|
@@:
|
|||
|
mov eax,dword[edi]
|
|||
|
mov ebx,dword[esi]
|
|||
|
mov dword[edi],ebx
|
|||
|
mov dword[esi],eax
|
|||
|
add esi,4
|
|||
|
add edi,4
|
|||
|
loop @b
|
|||
|
mov ax,word[edi]
|
|||
|
mov bx,word[esi]
|
|||
|
mov word[edi],bx
|
|||
|
mov word[esi],ax
|
|||
|
else
|
|||
|
vox_ogl_size <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 34 !
|
|||
|
end if
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
align 4
|
|||
|
mem_copy_32 rb vox_ogl_size
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
;*z
|
|||
|
;|
|
|||
|
;+-* x
|
|||
|
;input:
|
|||
|
; al - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD> 8)
|
|||
|
; ebx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x
|
|||
|
; edx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y
|
|||
|
; esi - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> z
|
|||
|
; ecx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;output:
|
|||
|
; ebx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x
|
|||
|
; edx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> y
|
|||
|
; esi - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> z
|
|||
|
align 4
|
|||
|
proc vox_corect_coords_pl, v_obj:dword, v_size:dword
|
|||
|
cmp ecx,0
|
|||
|
jl .end_f ;<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
push eax edi
|
|||
|
and eax,15 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
mov edi,[v_obj]
|
|||
|
add edi,vox_offs_tree_table
|
|||
|
add edi,8
|
|||
|
sub edi,eax
|
|||
|
|
|||
|
mov eax,[v_size]
|
|||
|
cmp ecx,1
|
|||
|
jl @f
|
|||
|
shl eax,cl
|
|||
|
@@:
|
|||
|
|
|||
|
bt word[edi],0 ;test voxel coord x
|
|||
|
jnc @f
|
|||
|
add ebx,eax
|
|||
|
@@:
|
|||
|
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 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> z
|
|||
|
@@:
|
|||
|
pop edi eax
|
|||
|
.end_f:
|
|||
|
ret
|
|||
|
endp
|
|||
|
|
|||
|
normal_gran_z1 equ -1.0
|
|||
|
normal_gran_z0 equ 1.0
|
|||
|
normal_gran_y1 equ 1.0
|
|||
|
normal_gran_y0 equ -1.0
|
|||
|
normal_gran_x1 equ -1.0
|
|||
|
normal_gran_x0 equ 1.0
|
|||
|
align 4
|
|||
|
p1 dd ?
|
|||
|
p2 dd ?
|
|||
|
|
|||
|
align 4
|
|||
|
proc draw_voxels_3d uses ebx ecx edx edi, p_mem:dword
|
|||
|
locals
|
|||
|
v_count dd ?
|
|||
|
endl
|
|||
|
mov edi,[p_mem]
|
|||
|
cmp edi,0
|
|||
|
je .end_f
|
|||
|
mov eax,dword[edi]
|
|||
|
mov dword[v_count],eax
|
|||
|
add edi,4
|
|||
|
|
|||
|
bt word[opt_cube_box],0
|
|||
|
jnc @f
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall [glColor3ub],128,128,128
|
|||
|
stdcall [glBegin],GL_LINE_STRIP
|
|||
|
stdcall [glVertex3f], -0.5, -0.5, -0.5
|
|||
|
stdcall [glVertex3f], -0.5, 0.5, -0.5
|
|||
|
stdcall [glVertex3f], 0.5, 0.5, -0.5
|
|||
|
stdcall [glVertex3f], 0.5, -0.5, -0.5
|
|||
|
stdcall [glVertex3f], -0.5, -0.5, -0.5
|
|||
|
stdcall [glVertex3f], -0.5, -0.5, 0.5
|
|||
|
stdcall [glVertex3f], -0.5, 0.5, 0.5
|
|||
|
stdcall [glVertex3f], 0.5, 0.5, 0.5
|
|||
|
stdcall [glVertex3f], 0.5, -0.5, 0.5
|
|||
|
stdcall [glVertex3f], -0.5, -0.5, 0.5
|
|||
|
stdcall [glEnd]
|
|||
|
stdcall [glBegin],GL_LINES
|
|||
|
stdcall [glVertex3f], -0.5, 0.5, -0.5
|
|||
|
stdcall [glVertex3f], -0.5, 0.5, 0.5
|
|||
|
stdcall [glVertex3f], 0.5, 0.5, -0.5
|
|||
|
stdcall [glVertex3f], 0.5, 0.5, 0.5
|
|||
|
stdcall [glVertex3f], 0.5, -0.5, -0.5
|
|||
|
stdcall [glVertex3f], 0.5, -0.5, 0.5
|
|||
|
stdcall [glEnd]
|
|||
|
@@:
|
|||
|
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
stdcall [glBegin],GL_QUADS
|
|||
|
.cycle_0:
|
|||
|
cmp dword[v_count],1
|
|||
|
jl .cycle_1
|
|||
|
stdcall [glColor3ub],[edi+vox_ogl_color+2],[edi+vox_ogl_color+1],[edi+vox_ogl_color]
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_z1
|
|||
|
jnc .e_gran_z1
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(0.0,0.0,normal_gran_z1)
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0z1,x1
|
|||
|
normal_gran p2,y0
|
|||
|
normal_gran_2 p2,y0z1,y1
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z1
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
normal_gran p1,x1
|
|||
|
normal_gran_2 p1,x1z1,x0
|
|||
|
;normal_gran p2,y0
|
|||
|
;normal_gran_2 p2,y0z1,y1
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z1
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
;normal_gran p1,x1
|
|||
|
;normal_gran_2 p1,x1z1,x0
|
|||
|
normal_gran p2,y1
|
|||
|
normal_gran_2 p2,y1z1,y0
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z1
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0z1,x1
|
|||
|
;normal_gran p2,y1
|
|||
|
;normal_gran_2 p2,y1z1,y0
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z1
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
.e_gran_z1:
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_y0
|
|||
|
jnc .e_gran_y0
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(0.0,normal_gran_y0,0.0)
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0y0,x1
|
|||
|
normal_gran p2,z0
|
|||
|
normal_gran_2 p2,y0z0,z1
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y0,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,x1
|
|||
|
normal_gran_2 p1,x1y0,x0
|
|||
|
;normal_gran p2,z0
|
|||
|
;normal_gran_2 p2,y0z0,z1
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y0,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
;normal_gran p1,x1
|
|||
|
;normal_gran_2 p1,x1y0,x0
|
|||
|
normal_gran p2,z1
|
|||
|
normal_gran_2 p2,y0z1,z0
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y0,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0y0,x1
|
|||
|
;normal_gran p2,z1
|
|||
|
;normal_gran_2 p2,y0z1,z0
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y0,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
.e_gran_y0:
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_y1
|
|||
|
jnc .e_gran_y1
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(0.0,normal_gran_y1,0.0)
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0y1,x1
|
|||
|
normal_gran p2,z1
|
|||
|
normal_gran_2 p2,y1z1,z0
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y1,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
normal_gran p1,x1
|
|||
|
normal_gran_2 p1,x1y1,x0
|
|||
|
;normal_gran p2,z1
|
|||
|
;normal_gran_2 p2,y1z1,z0
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y1,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
;normal_gran p1,x1
|
|||
|
;normal_gran_2 p1,x1y1,x0
|
|||
|
normal_gran p2,z0
|
|||
|
normal_gran_2 p2,y1z0,z1
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y1,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0y1,x1
|
|||
|
;normal_gran p2,z0
|
|||
|
;normal_gran_2 p2,y1z0,z1
|
|||
|
stdcall [glNormal3f], [p1],normal_gran_y1,[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
.e_gran_y1:
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_x0
|
|||
|
jnc .e_gran_x0
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(normal_gran_x0,0.0,0.0)
|
|||
|
normal_gran p1,y0
|
|||
|
normal_gran_2 p1,x0y0,y1
|
|||
|
normal_gran p2,z1
|
|||
|
normal_gran_2 p2,x0z1,z0
|
|||
|
stdcall [glNormal3f], normal_gran_x0,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
normal_gran p1,y1
|
|||
|
normal_gran_2 p1,x0y1,y0
|
|||
|
;normal_gran p2,z1
|
|||
|
;normal_gran_2 p2,x0z1,z0
|
|||
|
stdcall [glNormal3f], normal_gran_x0,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
;normal_gran p1,y1
|
|||
|
;normal_gran_2 p1,x0y1,y0
|
|||
|
normal_gran p2,z0
|
|||
|
normal_gran_2 p2,x0z0,z1
|
|||
|
stdcall [glNormal3f], normal_gran_x0,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,y0
|
|||
|
normal_gran_2 p1,x0y0,y1
|
|||
|
;normal_gran p2,z0
|
|||
|
;normal_gran_2 p2,x0z0,z1
|
|||
|
stdcall [glNormal3f], normal_gran_x0,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
.e_gran_x0:
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_x1
|
|||
|
jnc .e_gran_x1
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(normal_gran_x1,0.0,0.0)
|
|||
|
normal_gran p1,y0
|
|||
|
normal_gran_2 p1,x1y0,y1
|
|||
|
normal_gran p2,z1
|
|||
|
normal_gran_2 p2,x1z1,z0
|
|||
|
stdcall [glNormal3f], normal_gran_x1,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z1]
|
|||
|
;normal_gran p1,y0
|
|||
|
;normal_gran_2 p1,x1y0,y1
|
|||
|
normal_gran p2,z0
|
|||
|
normal_gran_2 p2,x1z0,z1
|
|||
|
stdcall [glNormal3f], normal_gran_x1,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,y1
|
|||
|
normal_gran_2 p1,x1y1,y0
|
|||
|
;normal_gran p2,z0
|
|||
|
;normal_gran_2 p2,x1z0,z1
|
|||
|
stdcall [glNormal3f], normal_gran_x1,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
;normal_gran p1,y1
|
|||
|
;normal_gran_2 p1,x1y1,y0
|
|||
|
normal_gran p2,z1
|
|||
|
normal_gran_2 p2,x1z1,z0
|
|||
|
stdcall [glNormal3f], normal_gran_x1,[p1],[p2]
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z1]
|
|||
|
.e_gran_x1:
|
|||
|
|
|||
|
bt word[edi+vox_ogl_planes],vox_ogl_gran_z0
|
|||
|
jnc .e_gran_z0
|
|||
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normal(0.0,0.0,normal_gran_z0)
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0z0,x1
|
|||
|
normal_gran p2,y1
|
|||
|
normal_gran_2 p2,y1z0,y0
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z0
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,x1
|
|||
|
normal_gran_2 p1,x1z0,x0
|
|||
|
;normal_gran p2,y1
|
|||
|
;normal_gran_2 p2,y1z0,y0
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z0
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y1],[edi+vox_ogl_z0]
|
|||
|
;normal_gran p1,x1
|
|||
|
;normal_gran_2 p1,x1z0,x0
|
|||
|
normal_gran p2,y0
|
|||
|
normal_gran_2 p2,y0z0,y1
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z0
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x1],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
normal_gran p1,x0
|
|||
|
normal_gran_2 p1,x0z0,x1
|
|||
|
;normal_gran p2,y0
|
|||
|
;normal_gran_2 p2,y0z0,y1
|
|||
|
stdcall [glNormal3f], [p1],[p2],normal_gran_z0
|
|||
|
stdcall [glVertex3f],[edi+vox_ogl_x0],[edi+vox_ogl_y0],[edi+vox_ogl_z0]
|
|||
|
.e_gran_z0:
|
|||
|
|
|||
|
;goto next voxel
|
|||
|
add edi,vox_ogl_size
|
|||
|
dec dword[v_count]
|
|||
|
jmp .cycle_0
|
|||
|
.cycle_1:
|
|||
|
|
|||
|
stdcall [glEnd]
|
|||
|
|
|||
|
.end_f:
|
|||
|
ret
|
|||
|
endp
|