Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 5387 → Rev 5388

/programs/media/voxel_editor/trunk/str.inc
0,0 → 1,177
;
; ” ©« ¤«ï à ¡®âë á® áâப®¢ë¬¨ äã­ªæ¨ï¬¨
;
 
; str_len (str1)
; „«¨­  áâப¨ (¢®§¢à é ¥âáï ¢ eax)
 
; str_cat (str1, str2)
; „®¡ ¢«¥­¨¥ ª áâப¥ st1 áâப¨ str2
 
; str_n_cat (str1, str2, n_len)
; „®¡ ¢«¥­¨¥ ª áâப¥ st1 áâப¨ str2. …᫨ áâப  str2 ¤«¨­­¥¥ 祬 n_len, â® ¤®¡ ¢«ïîâáï ¯¥à¢ë¥ n_len ᨬ¢®«®¢.
 
; conv_str_to_int (buf)
; à¥®¡à §®¢ ­¨¥ áâப¨ buf ¢ ç¨á«® (¢®§¢à é ¥âáï ¢ eax)
 
; convert_int_to_str (len)
; à¥®¡à §®¢ ­¨¥ ç¨á«  (eax) ¢ áâபã (edi). len - ¤«¨­­  áâப¨ edi, ª®â®àãî ¬®¦­® ¨á¯®«ì§®¢ âì ¤«ï ¯à¥®¡à §®¢ ­¨ï.
 
 
;output:
; eax = strlen
align 4
proc str_len, str1:dword
mov eax,[str1]
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,[str1]
ret
endp
 
align 4
proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
mov esi,[str2]
stdcall str_len,esi
mov ecx,eax
inc ecx
mov edi,[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
ret
endp
 
align 4
proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n_len:dword
mov esi,[str2]
mov ecx,[n_len]
mov edi,[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
mov byte[edi],0
ret
endp
 
;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int uses ebx ecx esi, buf:dword
xor eax,eax
xor ebx,ebx
mov esi,[buf]
;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
 
cmp word[esi],'0x'
je .load_digit_16
 
.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
 
.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
or ecx,ecx ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
jnz @f
neg eax
inc eax
@@:
ret
endp
 
;input:
; eax - ç¨á«®
; edi - ¡ãä¥à ¤«ï áâப¨
; len - ¤«¨­­  ¡ãä¥à 
;output:
align 4
proc convert_int_to_str, len:dword
pushad
mov esi,[len]
add esi,edi
dec esi
bt eax,31
jae @f
;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
neg eax
;inc eax ;???
mov byte[edi],'-'
inc edi
@@:
call .str
popad
ret
endp
 
align 4
.str:
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
jb @f
xor edx,edx ;®ç¨áâ¨âì edx
div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
push edx ;¯®«®¦¨âì ¢ á⥪
;dec edi ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
pop eax
@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
cmp edi,esi
jge @f
or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
mov byte[edi],0 ;¢ ª®­¥æ áâப¨ áâ ¢¨¬ 0, çâ®-¡ë ­¥ ¢ë« §¨« ¬ãá®à
@@:
ret ;¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
/programs/media/voxel_editor/utilites/build_ru.bat
1,10 → 1,13
if not exist bin mkdir bin
if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png
if not exist bin\toolbar_m.png @copy toolbar_m.png bin\toolbar_m.png
if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj
@kpack bin\buf2d.obj
if not exist bin\toolbar_t.png @copy toolbar_t.png bin\toolbar_t.png
if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\TinyGL\asm_fork\tinygl.asm bin\tinygl.obj
@kpack bin\tinygl.obj
@fasm.exe -m 16384 vox_creator.asm bin\vox_creator.kex
@kpack bin\vox_creator.kex
@fasm.exe -m 16384 vox_mover.asm bin\vox_mover.kex
@kpack bin\vox_mover.kex
@fasm.exe -m 16384 vox_tgl.asm bin\vox_tgl.kex
@kpack bin\vox_tgl.kex
pause
/programs/media/voxel_editor/utilites/toolbar_t.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/media/voxel_editor/utilites/vox_3d.inc
0,0 → 1,1546
;
; Ôóíêöèè íóæíûå äëÿ îòîáðàæåíèÿ âîêñåëüíîãî îáúåêòà ÷åðåç áèáëèîòåêó tinygl
;
 
;ìàðîñ êîðåêòèðîâêè âåêòîðà íîðìàëè äëÿ çàêðóãëåíèÿ êðàéíèõ âîêñåëåé
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
@@:
}
 
;ìàðîñ êîðåêòèðîâêè âåêòîðà íîðìàëè äëÿ äèàãîíàëüíîãî ñãëàæèâàíèÿ âîêñåëåé
;äèàãîíàëüíûå âîêñåëè ïîñëå ýòîãî ñãëàæèâàíèÿ ñìîòðÿòñÿ íå ñòåïåíüêàìè à ñïëîøíîé ïëîñêîñòüþ
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 ;ïîñòàâèòü 0.0 â dword[param] åñëè íóæíî íå ñèëüíîå ñãëàæèâàíèå
@@:
}
 
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
 
;íîìåðà áèòîâ, êîòîðûå óêàçûâàþò íà òî êàêèå åñòü ñîñåäíèå âîêñåëè
;íóæíî äëÿ îòñå÷åíèÿ âíóòðåííèõ ãðàíåé ìåæäó ñîñåäíèìè âîêñåëÿìè
;à åùå íóæíî äëÿ çàäàíèÿ âåêòîðîâ íîðìàëåé, ÷òî-áû âîêñåëè áûëè ñãëàæåííûìè (çàêðóãëåííûìè)
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:
; ñîçäàíèå âîêñåëüíîãî îáúåêòà äëÿ ïîêàçà â 3d ãðàôèêå
;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)
; ñîðòèðîâêà âîêñåëåé ïî êîîðäèíàòàì 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
 
;îòñå÷åíèå ñîñåäíèõ ãðàíåé äëÿ óñêîðåíèÿ îòðèñîâêè
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 ;óâåëè÷èâàåì âûñîòó, äëÿ áóäóùåãî ñðàâíåíèÿ
cmp eax,dword[edi+vox_ogl_size+vox_ogl_z0]
jne @f
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó, òî ñîñåäíèå âûñîòó è íèç îòñåêàåì
btr dword[edi+vox_ogl_planes],vox_ogl_gran_z1 ;âåðõ îòñåêàåì
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_z0 ;íèç îòñåêàåì
@@:
add edi,vox_ogl_size
loop .cycle_0
 
push ebx edx esi
;äèàãîíàëüíûå ñîñåäíèå âîêñåëè
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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)
; ñîðòèðîâêà âîêñåëåé ïî êîîðäèíàòàì 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
 
;îòñå÷åíèå ñîñåäíèõ ãðàíåé äëÿ óñêîðåíèÿ îòðèñîâêè
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 ;óâåëè÷èâàåì âûñîòó, äëÿ áóäóùåãî ñðàâíåíèÿ
cmp eax,dword[edi+vox_ogl_size+vox_ogl_y0]
jne @f
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó, òî ñîñåäíèå âûñîòó è íèç îòñåêàåì
btr dword[edi+vox_ogl_planes],vox_ogl_gran_y1 ;âåðõ îòñåêàåì
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_y0 ;íèç îòñåêàåì
@@:
add edi,vox_ogl_size
loop .cycle_1
 
push ebx edx esi
;äèàãîíàëüíûå ñîñåäíèå âîêñåëè
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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)
; ñîðòèðîâêà âîêñåëåé ïî êîîðäèíàòàì 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
 
;îòñå÷åíèå ñîñåäíèõ ãðàíåé äëÿ óñêîðåíèÿ îòðèñîâêè
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 ;óâåëè÷èâàåì âûñîòó, äëÿ áóäóùåãî ñðàâíåíèÿ
cmp eax,dword[edi+vox_ogl_size+vox_ogl_x0]
jne @f
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó, òî ñîñåäíèå âûñîòó è íèç îòñåêàåì
btr dword[edi+vox_ogl_planes],vox_ogl_gran_x1 ;âåðõ îòñåêàåì
btr dword[edi+vox_ogl_size+vox_ogl_planes],vox_ogl_gran_x0 ;íèç îòñåêàåì
@@:
add edi,vox_ogl_size
loop .cycle_2
 
push ebx edx esi
;äèàãîíàëüíûå ñîñåäíèå âîêñåëè
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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
;åñëè ïî âûñîòå âîêñåëè ðàçëè÷àåòñÿ íà 1 êîîðäèíàòó
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
 
;ïðåîáðàçîâàíèå êîîðäèíàò âî float
stdcall vox_obj_3d_recalc, [p_mem]
popad
.end_f:
ret
endp
 
;input:
; ebx - coord_x
; edx - coord_y
; esi - coord_z
; ecx - óðîâåíü òåêóøåãî óçëà 
; edi - óêàçàòåëü íà äàííûå âîêñåëüíîãî îáúåêòà
align 4
proc create_sub_vox_obj_3d, v_obj:dword, p_mem:dword, k_scale:dword
cmp byte[edi+3],0 ;ñìîòðèì åñòü ëè ïîääåðåâüÿ
je .sub_trees
 
;äîáàâëÿåì óçåë, êîòîðûé ñîäåðæèò äî÷åðíèå óçëû, ïðè ýòîì äî÷åðíèå ìåëêèå è íå ïîïàäàþò íà âûâîä
cmp ecx,0
jne @f
push ecx
mov eax,[p_mem]
inc dword[eax] ;óâåëè÷èâàåì ñ÷åò÷èê âîêñåëåé íà 1
mov eax,[eax]
imul eax,vox_ogl_size ;óìíîæàåì íà ðàçìåð äàííûõ î âîêñåëå
add eax,4-vox_ogl_size ;÷èñëî âîêñåëåé 4 áàéòà
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
@@:
 
;ðåêóðñèâíûé ïåðåáîð ïîääåðåâüåâ
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 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
;âûõîä èç óçëà
inc ecx
pop edx
jmp .end_f
.sub_trees:
cmp ecx,0
jl .end_0 ;íå ðèñóåì î÷åíü ìàëåíüêèå âîêñåëè
 
;cmp ecx,1
;jl @f
;êâàäðàò áîëüøå òåêóùåãî ìàñøòàáà
;stdcall vox_draw_square_1g, [buf_i],[buf_z],eax
;jmp .end_0
;@@:
;êâàäðàò òåêóùåãî ìàñøòàáà
push ecx
mov eax,[p_mem]
inc dword[eax] ;óâåëè÷èâàåì ñ÷åò÷èê âîêñåëåé íà 1
mov eax,[eax]
imul eax,vox_ogl_size ;óìíîæàåì íà ðàçìåð äàííûõ î âîêñåëå
add eax,4-vox_ogl_size ;÷èñëî âîêñåëåé 4 áàéòà
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
;êâàäðàò áîëüøå òåêóùåãî ìàñøòàáà
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:
; â OpenGL òðåáóþòñÿ êîîðäèíàòû float
; ïðåîáðàçîâàíèå êîîðäèíàò èç int âî float,
align 4
proc vox_obj_3d_recalc uses eax ebx ecx, p_mem:dword
 
;ïîëó÷àåì êîîðäèíàòû â ïðåäåëàõ îò 0 äî 1 â äðîáíîì âèäå
mov eax,[p_mem]
mov ecx,dword[eax]
add eax,4
 
finit
align 4
@@:
fild word[eax+vox_ogl_zoom]
fld1 ; ðàçìåð êóáè÷åñêîé ãðàíè áåç ó÷åòà ìàñøòàáà
fscale ; st0=1*2^st1 èëè ðàçìåð êóáè÷åñêîé ãðàíè ñ ó÷åòîì ìàñøòàáà
fxch
 
;coord x
fild dword[eax+vox_ogl_x0]
fscale
fchs
fst dword[eax+vox_ogl_x0]
fsub st0,st2 ;äîáàâëÿåì êî âòîðîé òî÷êå ðàçìåð ìàñøòàáèðîâàííîé êóáè÷åñêîé ãðàíè
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
 
;îòíèìàåì îò êàæäîé êîîðäèíàòû ïî 0.5 äëÿ öåíòðîâêè îáúåêòà ïî öåíòðó ýêðàíà
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 èëè 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
 
;Ñîðòèðîâêà âåêòîðà a[1..n] ìåòîäîì Ôëîéäà
align 4
proc pole_fl_sort, a:dword, n:dword
pushad
mov ecx,dword[a]
;Ôîðìèðîâàòü èñõîäíîå ÷àñòè÷íî óïîðÿäî÷åííîå äåðåâî
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
;Âûïîëíèòü ïðîöåäóðó âñïëûòèÿ Ôëîéäà äëÿ êàæäîãî ïîääåðåâà
mov eax,dword[n]
@@: ;for(i=n; i>=2; i--){
stdcall pole_fl_surface, ecx,1,eax ;(a,1,i)
;Ïîìåñòèòü íàéäåííûé ìàêñèìàëüíûé ýëåìåíò â êîíåö ñïèñêà
stdcall swap_cell, ecx,1,eax ;ìåíÿåì ìåñòàìè a[1] <-> a[i]
dec eax
cmp eax,2
jge @b
popad
ret
endp
 
;Ïðîöåäóðà âñïëûòèÿ Ôëîéäà ïî äåðåâó 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 ãäå 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; //âûõîä èç öèêëà
 
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:
 
;çíà÷åíèÿ ìíîãèõ ðåãèñòðîâ óæå íå âàæíû ò. ê. êîíåö ôóíêöèè
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 ;ïîêà íå íóæíî, íî ðàáîòàëî ïðàâèëüíî
;Ñîðòèðîâêà âåêòîðà a[1..n] ìåòîäîì Ôëîéäà
align 4
proc pole_fl_sort_xzy, a:dword, n:dword
pushad
mov ecx,dword[a]
;Ôîðìèðîâàòü èñõîäíîå ÷àñòè÷íî óïîðÿäî÷åííîå äåðåâî
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
;Âûïîëíèòü ïðîöåäóðó âñïëûòèÿ Ôëîéäà äëÿ êàæäîãî ïîääåðåâà
mov eax,dword[n]
@@: ;for(i=n; i>=2; i--){
stdcall pole_fl_surface_xzy, ecx,1,eax ;(a,1,i)
;Ïîìåñòèòü íàéäåííûé ìàêñèìàëüíûé ýëåìåíò â êîíåö ñïèñêà
stdcall swap_cell, ecx,1,eax ;ìåíÿåì ìåñòàìè a[1] <-> a[i]
dec eax
cmp eax,2
jge @b
popad
ret
endp
 
;Ïðîöåäóðà âñïëûòèÿ Ôëîéäà ïî äåðåâó 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 ãäå 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; //âûõîä èç öèêëà
 
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:
 
;çíà÷åíèÿ ìíîãèõ ðåãèñòðîâ óæå íå âàæíû ò. ê. êîíåö ôóíêöèè
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
 
;Ñîðòèðîâêà âåêòîðà a[1..n] ìåòîäîì Ôëîéäà
align 4
proc pole_fl_sort_zxy, a:dword, n:dword
pushad
mov ecx,dword[a]
;Ôîðìèðîâàòü èñõîäíîå ÷àñòè÷íî óïîðÿäî÷åííîå äåðåâî
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
;Âûïîëíèòü ïðîöåäóðó âñïëûòèÿ Ôëîéäà äëÿ êàæäîãî ïîääåðåâà
mov eax,dword[n]
@@: ;for(i=n; i>=2; i--){
stdcall pole_fl_surface_zxy, ecx,1,eax ;(a,1,i)
;Ïîìåñòèòü íàéäåííûé ìàêñèìàëüíûé ýëåìåíò â êîíåö ñïèñêà
stdcall swap_cell, ecx,1,eax ;ìåíÿåì ìåñòàìè a[1] <-> a[i]
dec eax
cmp eax,2
jge @b
popad
ret
endp
 
;Ïðîöåäóðà âñïëûòèÿ Ôëîéäà ïî äåðåâó 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 ãäå 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; //âûõîä èç öèêëà
 
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:
 
;çíà÷åíèÿ ìíîãèõ ðåãèñòðîâ óæå íå âàæíû ò. ê. êîíåö ôóíêöèè
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
 
;Ñîðòèðîâêà âåêòîðà a[1..n] ìåòîäîì Ôëîéäà
align 4
proc pole_fl_sort_yzx, a:dword, n:dword
pushad
mov ecx,dword[a]
;Ôîðìèðîâàòü èñõîäíîå ÷àñòè÷íî óïîðÿäî÷åííîå äåðåâî
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
;Âûïîëíèòü ïðîöåäóðó âñïëûòèÿ Ôëîéäà äëÿ êàæäîãî ïîääåðåâà
mov eax,dword[n]
@@: ;for(i=n; i>=2; i--){
stdcall pole_fl_surface_yzx, ecx,1,eax ;(a,1,i)
;Ïîìåñòèòü íàéäåííûé ìàêñèìàëüíûé ýëåìåíò â êîíåö ñïèñêà
stdcall swap_cell, ecx,1,eax ;ìåíÿåì ìåñòàìè a[1] <-> a[i]
dec eax
cmp eax,2
jge @b
popad
ret
endp
 
;Ïðîöåäóðà âñïëûòèÿ Ôëîéäà ïî äåðåâó 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 ãäå 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; //âûõîä èç öèêëà
 
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:
 
;çíà÷åíèÿ ìíîãèõ ðåãèñòðîâ óæå íå âàæíû ò. ê. êîíåö ôóíêöèè
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 íå ðàâíî 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 íå ðàâíî 34 !
end if
ret
endp
 
align 4
mem_copy_32 rb vox_ogl_size
 
;ôóíêöèÿ äëÿ êîðåêòèðîâêè êîîðäèíàò
;íàïðàâëåíèÿ îñåé êîîðäèíàò â âîêñåëå:
;*z
;|
;+-* x
;input:
; al - íîìåð óçëà â äåðåâå (îò 1 äî 8)
; ebx - êîîðäèíàòà x
; edx - êîîðäèíàòà y
; esi - êîîðäèíàòà z
; ecx - óðîâåíü òåêóøåãî óçëà
;output:
; ebx - íîâàÿ êîîðäèíàòà x
; edx - íîâàÿ êîîðäèíàòà y
; esi - íîâàÿ êîîðäèíàòà z
align 4
proc vox_corect_coords_pl, v_obj:dword, v_size:dword
cmp ecx,0
jl .end_f ;äëÿ óñêîðåíèÿ îòðèñîâêè
 
push eax edi
and eax,15 ;âûäåëÿåì íîìåð óçëà â äåðåâå
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 ;ìåíÿåì ãëóáèíó äëÿ áóôåðà 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
;ðèñîâàíèå ðàìêè
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]
@@:
 
;ðèñîâàíèå îáúåêòà
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
;ïåðåäíÿÿ ãðàíü 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
;âåðõíÿÿ ãðàíü 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
;íèæíÿÿ ãðàíü 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
;ëåâàÿ ãðàíü 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
;ïðàâàÿ ãðàíü 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
;çàäíÿÿ ãðàíü 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
/programs/media/voxel_editor/utilites/vox_creator.asm
13,6 → 13,7
include '../../../../programs/proc32.inc'
include '../../../../programs/develop/libraries/box_lib/load_lib.mac'
include '../../../../programs/dll.inc'
include '../trunk/str.inc'
 
vox_offs_tree_table equ 4
vox_offs_data equ 12
20,7 → 21,7
include '../trunk/vox_rotate.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel creator 03.10.13',0 ;¯®¤¯¨áì ®ª­ 
caption db 'Voxel creator 29.01.15',0 ;¯®¤¯¨áì ®ª­ 
 
struct FileInfoBlock
Function dd ?
397,20 → 398,13
 
; *** à¨á®¢ ­¨¥ £« ¢­®£® ®ª­  (¢ë¯®«­ï¥âáï 1 à § ¯à¨ § ¯ã᪥) ***
xor eax,eax
mov ebx,(20 shl 16)+410
mov ecx,(20 shl 16)+520
mov edx,[sc.work]
or edx,(3 shl 24)+0x30000000
mov edi,caption
int 0x40
mcall ,(20 shl 16)+410,(20 shl 16)+520,,,caption
 
; *** ᮧ¤ ­¨¥ ª­®¯®ª ­  ¯ ­¥«ì ***
mov eax,8
mov ebx,(5 shl 16)+20
mov ecx,(5 shl 16)+20
mov edx,3
mov esi,[sc.work_button]
int 0x40
mcall 8,(5 shl 16)+20,(5 shl 16)+20,3
 
mov ebx,(30 shl 16)+20
mov edx,4
449,11 → 443,8
int 0x40
 
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov eax,7
mov ebx,[image_data_toolbar]
mov ecx,(16 shl 16)+16
mov edx,(7 shl 16)+7 ;icon new
int 0x40
mcall 7,[image_data_toolbar],(16 shl 16)+16
 
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;icon open
504,8 → 495,6
draw_pok:
;®¡­®¢«¥­¨¥ ¯®¤¯¨á¨ à §¬¥à  ä ©« 
mov edi,txt_f_size.size
mov dword[edi],0
mov dword[edi+4],0
mov eax,dword[vox_obj_size]
mov ebx,txt_pref
.cycle:
516,17 → 505,15
jmp .cycle
@@:
 
call convert_int_to_str
stdcall convert_int_to_str, 16
stdcall str_cat, edi,ebx
stdcall str_cat, edi,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
 
mov eax,4 ;à¨á®¢ ­¨¥ ⥪áâ 
mov ebx,(275 shl 16)+7
;à¨á®¢ ­¨¥ ⥪áâ 
mov ecx,[sc.work_text]
or ecx,0x80000000 or (1 shl 30)
mov edx,txt_f_size
mov edi,[sc.work] ;梥â ä®­  ®ª­ 
int 0x40
mcall 4,(275 shl 16)+7,,txt_f_size
 
ret
 
1237,108 → 1224,6
ret
endp
 
;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int, buf:dword
xor eax,eax
push ebx ecx esi
xor ebx,ebx
mov esi,[buf]
;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
 
cmp word[esi],'0x'
je .load_digit_16
 
.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
 
.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
jne @f
sub ecx,eax
mov eax,ecx
@@:
pop esi ecx ebx
ret
endp
 
align 4
proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
mov esi,dword[str2]
stdcall str_len,esi
mov ecx,eax
inc ecx
mov edi,dword[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
ret
endp
 
;output:
; eax = strlen
align 4
proc str_len, str1:dword
mov eax,[str1]
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,[str1]
ret
endp
 
msgbox_0:
db 1,0
db '‚­¨¬ ­¨¥',0
1691,38 → 1576,7
rb BUF_STRUCT_SIZE*(2+1)
 
 
 
;input:
; eax = value
; edi = string buffer
;output:
align 4
convert_int_to_str:
pushad
cld
mov dword[edi+1],0
mov word[edi+5],0
call .str
popad
ret
 
align 4
.str:
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
jb @f
xor edx,edx ;®ç¨áâ¨âì edx
div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
push edx ;¯®«®¦¨âì ¢ á⥪
;dec edi ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
pop eax
@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
ret ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
 
align 16
i_end:
rb 2048
thread:
/programs/media/voxel_editor/utilites/vox_mover.asm
15,9 → 15,10
include '../../../../programs/dll.inc'
include '../trunk/vox_draw.inc'
include '../trunk/vox_rotate.inc'
include '../trunk/str.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel mover 13.09.12',0 ;¯®¤¯¨áì ®ª­ 
caption db 'Voxel mover 29.01.15',0 ;¯®¤¯¨áì ®ª­ 
 
struct FileInfoBlock
Function dd ?
32,7 → 33,6
run_file_70 FileInfoBlock
image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
 
fn_toolbar db 'toolbar_m.png',0
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*18
image_data_toolbar dd 0
174,7 → 174,7
 
stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z
 
load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE
load_image_file 'toolbar_m.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
 
stdcall mem.Alloc,[max_open_file_size]
mov dword[open_file_vox],eax
352,16 → 352,11
; *** à¨á®¢ ­¨¥ £« ¢­®£® ®ª­  (¢ë¯®«­ï¥âáï 1 à § ¯à¨ § ¯ã᪥) ***
mov edx,[sc.work]
or edx,(3 shl 24)+0x30000000
mov edi,caption
mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4]
mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4],,,caption
 
; *** ᮧ¤ ­¨¥ ª­®¯®ª ­  ¯ ­¥«ì ***
mov eax,8
mov ebx,(5 shl 16)+20
mov ecx,(5 shl 16)+20
mov edx,3
mov esi,[sc.work_button]
int 0x40
mcall 8,(5 shl 16)+20,(5 shl 16)+20,3
 
mov ebx,(30 shl 16)+20
mov edx,4
416,11 → 411,8
int 0x40
 
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov eax,7
mov ebx,[image_data_toolbar]
mov ecx,(16 shl 16)+16
mov edx,(7 shl 16)+7 ;icon new
int 0x40
mcall 7,[image_data_toolbar],(16 shl 16)+16
 
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;icon open
485,14 → 477,10
 
align 4
draw_pok:
mov eax,47
mov ecx,[v_zoom]
mov ebx,(3 shl 16)+(1 shl 31)
mov edx,((350+6*9) shl 16)+OT_CAPT_Y_COLOR+2
mov esi,[sc.work_button_text]
or esi,(1 shl 30)
mov edi,[sc.work_button]
int 0x40 ;¬ áèâ ¡
mcall 47, (3 shl 16)+(1 shl 31), [v_zoom], ((350+6*9) shl 16)+OT_CAPT_Y_COLOR+2 ;¬ áèâ ¡
mov ecx,[n_plane]
add edx,115 shl 16 ;9
int 0x40 ;­®¬¥à á¥ç¥­¨ï
501,11 → 489,11
mov dword[txt_curor.size],0
mov eax,dword[v_cur_x]
mov edi,txt_curor.size
call convert_int_to_str
stdcall convert_int_to_str,10
stdcall str_cat, edi,txt_mull
mov eax,dword[v_cur_y]
mov edi,txt_buf
call convert_int_to_str
stdcall convert_int_to_str,16
stdcall str_cat, txt_curor.size,edi
stdcall str_cat, txt_curor.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
 
513,25 → 501,23
mov dword[txt_mov_offs.size],0
mov eax,dword[mov_x]
mov edi,txt_mov_offs.size
call convert_int_to_str
stdcall convert_int_to_str,30
stdcall str_cat, edi,txt_space
mov eax,dword[mov_y]
mov edi,txt_buf
call convert_int_to_str
stdcall convert_int_to_str,16
stdcall str_cat, txt_mov_offs.size,edi
stdcall str_cat, txt_mov_offs.size,txt_space
mov eax,dword[mov_z]
mov edi,txt_buf
call convert_int_to_str
stdcall convert_int_to_str,16
stdcall str_cat, txt_mov_offs.size,edi
stdcall str_cat, txt_mov_offs.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥«
 
mov eax,4 ;à¨á®¢ ­¨¥ ⥪áâ 
mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2
;à¨á®¢ ­¨¥ ⥪áâ 
mov ecx,[sc.work_text]
or ecx,0x80000000 ;or (1 shl 30)
mov edx,txt_color
int 0x40
mcall 4, (OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2,,txt_color
 
mov edx,txt_curor
add ebx,115 shl 16
559,16 → 545,14
pushad
mov ebx,((OT_CAPT_X_COLOR+35) shl 16)+16 ;¯® ®á¨ x
mov ecx,(OT_CAPT_Y_COLOR shl 16)+12 ;¯® ®á¨ y
mov edx,[v_color]
mcall 13
mcall 13,,,[v_color]
 
mov ebx,(1 shl 8)+(6 shl 16)
mov ecx,edx
mov edx,((OT_CAPT_X_COLOR+55) shl 16)+OT_CAPT_Y_COLOR+2
mov esi,[sc.work_text]
add esi,(1 shl 30)
mov edi,[sc.work]
mcall 47
mcall 47,(1 shl 8)+(6 shl 16)
popad
ret
 
1319,151 → 1303,7
popad
ret
 
if 0
;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int, buf:dword
xor eax,eax
push ebx ecx esi
xor ebx,ebx
mov esi,[buf]
;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
 
cmp word[esi],'0x'
je .load_digit_16
 
.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
 
.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
jne @f
sub ecx,eax
mov eax,ecx
@@:
pop esi ecx ebx
ret
endp
end if
 
;input:
; eax = value
; edi = string buffer
;output:
align 4
convert_int_to_str:
pushad
bt eax,31
jae @f
;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
neg eax
;inc eax
;clc
mov byte[edi],'-'
inc edi
@@:
mov dword[edi+1],0
mov word[edi+5],0
call .str
popad
ret
 
align 4
.str:
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
jb @f
xor edx,edx ;®ç¨áâ¨âì edx
div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
push edx ;¯®«®¦¨âì ¢ á⥪
;dec edi ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
pop eax
@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
ret ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
 
align 4
proc str_cat, str1:dword, str2:dword
push eax ecx edi esi
mov esi,dword[str2]
stdcall str_len,esi
mov ecx,eax
inc ecx
mov edi,dword[str1]
stdcall str_len,edi
add edi,eax
cld
repne movsb
pop esi edi ecx eax
ret
endp
 
;output:
; eax = strlen
align 4
proc str_len, str1:dword
mov eax,[str1]
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,[str1]
ret
endp
 
;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
align 4
OpenDialog_data:
1744,6 → 1584,7
db 6,7,4,3 ;w,h,h_osn,n
rb BUF_STRUCT_SIZE*(3+1)
 
align 16
i_end:
wnd_s_pos: ;¬¥áâ® ¤«ï ­ áâ஥ª áâ à⮢®© ¯®§¨æ¨¨ ®ª­ 
rq 0
/programs/media/voxel_editor/utilites/vox_tgl.asm
0,0 → 1,1030
use32
org 0x0
db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
dd 0x1
dd start
dd i_end ;à §¬¥à ¯à¨«®¦¥­¨ï
dd mem
dd stacktop
dd 0
dd sys_path
 
include '../../../../programs/macros.inc'
include '../../../../programs/proc32.inc'
include '../../../../programs/develop/libraries/box_lib/load_lib.mac'
include '../../../../programs/dll.inc'
include '../../../../programs/develop/libraries/TinyGL/asm_fork/opengl_const.inc'
include 'vox_3d.inc'
include '../trunk/str.inc'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'Voxel viewer 29.01.15',0 ;¯®¤¯¨áì ®ª­ 
 
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
 
run_file_70 FileInfoBlock
image_data dd 0 ;㪠§ â¥«ì ­  ¢à¥¬¥­­ãî ¯ ¬ïâì. ¤«ï ­ã¦¥­ ¯à¥®¡à §®¢ ­¨ï ¨§®¡à ¦¥­¨ï
 
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*9
image_data_toolbar dd 0
 
offs_zbuf_pbuf equ 24
 
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
jmp @f
local .path_str
.path_str db path ;ä®à¬¨à㥬 «®ª «ì­ãî ¯¥à¥¬¥­­ãî
db 0
@@:
;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
end if
 
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
mov [buf],eax
 
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
cmp ebx,0xffffffff
je @f
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
stdcall dword[img_decode], dword[buf],ebx,0
mov dword[image_data],eax
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
stdcall dword[img_destroy], dword[image_data]
@@:
}
 
 
 
align 4
start:
load_libraries l_libs_start,l_libs_end
;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ¡¨¡«¨®â¥ª 
mov ebp,lib_0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
mcall 48,3,sc,sizeof.system_colors
mcall 40,0x27
stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª  ¤¨ «®£ 
 
stdcall [buf2d_create], buf_0 ;ᮧ¤ ­¨¥ ¡ãä¥à 
 
load_image_file 'toolbar_t.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE
 
mcall 26,9
mov [last_time],eax
 
stdcall [kosglMakeCurrent], 5,30,512,512,ctx1
stdcall [glEnable], GL_DEPTH_TEST
stdcall [glEnable], GL_NORMALIZE ;¤¥« ¬ ­®à¬ «¨ ®¤¨­ ª®¢®© ¢¥«¨ç¨­ë ¢® ¨§¡¥¦ ­¨¥  àâ¥ä ªâ®¢
stdcall [glClearColor], 0.0,0.0,0.0,0.0
stdcall [glShadeModel], GL_SMOOTH
 
call but_new_file
 
 
align 4
red_win:
call draw_window
 
align 4
still:
mcall 26,9
mov ebx,[last_time]
add ebx,50 ;§ ¤¥à¦ª 
cmp ebx,eax
jge @f
mov ebx,eax
@@:
sub ebx,eax
mcall 23
bt word[opt_auto_rotate],0
jnc @f
or eax,eax
jz timer_funct
@@:
 
cmp al,1
jz red_win
cmp al,2
jz key
cmp al,3
jz button
 
jmp still
 
align 4
timer_funct:
pushad
mcall 26,9
mov [last_time],eax
 
; ¢â®¬ â¨ç¥áª®¥ ¨§¬¥­¥­¨¥ 㣫  ®¡§®à 
fld dword[angle_y]
fsub dword[delt_size]
fstp dword[angle_y]
call draw_3d
stdcall [kosglSwapBuffers]
 
popad
jmp still
 
align 4
draw_window:
pushad
mcall 12,1
 
; *** à¨á®¢ ­¨¥ £« ¢­®£® ®ª­  (¢ë¯®«­ï¥âáï 1 à § ¯à¨ § ¯ã᪥) ***
xor eax,eax
mov edx,[sc.work]
or edx,(3 shl 24)+0x30000000
mcall ,(20 shl 16)+800,(20 shl 16)+570,,,caption
 
; *** ᮧ¤ ­¨¥ ª­®¯®ª ­  ¯ ­¥«ì ***
mov esi,[sc.work_button]
mcall 8,(5 shl 16)+20,(5 shl 16)+20,3
 
mov ebx,(30 shl 16)+20
mov edx,4
int 0x40
add ebx,25 shl 16
mov edx,5
int 0x40
add ebx,30 shl 16
mov edx,6
int 0x40
add ebx,25 shl 16
mov edx,7
int 0x40
add ebx,25 shl 16
mov edx,8
int 0x40
add ebx,25 shl 16
mov edx,9
int 0x40
add ebx,25 shl 16
mov edx,10
int 0x40
add ebx,25 shl 16
mov edx,11
int 0x40
add ebx,25 shl 16
mov edx,12
int 0x40
 
; *** à¨á®¢ ­¨¥ ¨ª®­®ª ­  ª­®¯ª å ***
mov edx,(7 shl 16)+7 ;icon new
mcall 7,[image_data_toolbar],(16 shl 16)+16
 
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;icon open
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;icon save
int 0x40
 
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(30 shl 16) ;zoom +
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;zoom -
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;light on/off
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;box on/off
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;auto rotate on/off
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;info voxels
int 0x40
add ebx,IMAGE_TOOLBAR_ICON_SIZE
add edx,(25 shl 16) ;refresh
int 0x40
 
stdcall [buf2d_draw], buf_0
stdcall [kosglSwapBuffers]
 
mcall 12,2
popad
ret
 
 
align 4
key:
mcall 2
 
cmp ah,178 ;Up
jne @f
fld dword[angle_z]
fadd dword[delt_size]
fstp dword[angle_z]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
cmp ah,177 ;Down
jne @f
fld dword[angle_z]
fsub dword[delt_size]
fstp dword[angle_z]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
cmp ah,176 ;Left
jne @f
fld dword[angle_x]
fadd dword[delt_size]
fstp dword[angle_x]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
cmp ah,179 ;Right
jne @f
fld dword[angle_x]
fsub dword[delt_size]
fstp dword[angle_x]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
 
jmp still
 
 
align 4
button:
mcall 17
cmp ah,3
jne @f
call but_new_file
@@:
cmp ah,4
jne @f
call but_open_file
@@:
cmp ah,5
jne @f
call but_save_file
@@:
cmp ah,6
jne @f
call but_zoom_p
@@:
cmp ah,7
jne @f
call but_zoom_m
@@:
cmp ah,8
jne @f
call but_3
@@:
cmp ah,9
jne @f
call but_4
@@:
cmp ah,10
jne @f
call but_5
@@:
cmp ah,11
jne @f
call but_6
@@:
cmp ah,12
jne @f
call but_7
@@:
cmp ah,1
jne still
.exit:
stdcall [buf2d_delete],buf_0
stdcall mem.Free,[image_data_toolbar]
stdcall mem.Free,[open_file_data]
stdcall mem.Free,[open_file_ogl]
mcall -1
 
 
align 4
but_new_file:
mov dword[angle_x], 0.0
mov [angle_y], 0.0
mov [angle_z], 180.0
ret
 
align 4
open_file_data dd 0 ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï ®âªàëâ¨ï ä ©«®¢
open_file_size dd 0 ;à §¬¥à ®âªàë⮣® ä ©« 
open_b rb 560
open_file_ogl dd 0 ;¤«ï § ¯¨á¨ ª®®à¤¨­ â èà ­¥© ¢®ªá¥«¥© ¢ ¯®ª §¥ opengl
v_zoom dd 0
 
align 4
but_open_file:
pushad
copy_path open_dialog_name,communication_area_default_path,file_name,0
mov [OpenDialog_data.type],0
stdcall [OpenDialog_Start],OpenDialog_data
cmp [OpenDialog_data.status],2
je .end_open_file
;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
 
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 5
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], 0
mov dword[run_file_70.Buffer], open_b
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], openfile_path
mov ebx,run_file_70
int 0x40
 
;mov eax,dword[open_b+32]
;mov edi,txt_buf
;call conv_int_to_str
;notify_window_run txt_buf
 
mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©«  ¢ ¡ ©â å
stdcall mem.ReAlloc,[open_file_data],ecx
mov [open_file_data],eax
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov dword[run_file_70.Count], ecx
m2m dword[run_file_70.Buffer], dword[open_file_data]
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], openfile_path
mov ebx,run_file_70
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
cmp ebx,0xffffffff
je .end_open_file
 
mov [open_file_size],ebx
mcall 71,1,openfile_path
 
mov eax,[open_file_data]
movzx eax,byte[eax]
mov dword[v_zoom],eax ;¡¥à¥¬ ¬ áèâ ¡ ¯® 㬮«ç ­¨î
mov ecx,[open_file_size]
sub ecx,vox_offs_data
shr ecx,2
imul ecx,vox_ogl_size
add ecx,4 ;ecx = à §¬¥à ¯ ¬ï⨠­¥®¡å®¤¨¬®© ¤«ï à á¯ ª®¢ª¨ ª®®à¤¨­ â
stdcall mem.ReAlloc,[open_file_ogl],ecx
or eax,eax
jz .end_open_file
mov [open_file_ogl],eax
stdcall buf_vox_obj_create_3d,[open_file_data],eax,0,0,[v_zoom]
call draw_cadr_8
.end_open_file:
popad
ret
 
;description:
; à¨á®¢ ­¨¥ 8-¬¨ ª ¤à®¢ ¯®¤ à §­ë¬¨ 㣫 ¬¨ ¯®¢®à®â 
align 4
draw_cadr_8:
call but_new_file ;ãáâ ­®¢ª  㣫®¢ ¯®¢®à®â  ¯® 㬮«ç ­¨î
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
 
;à¨á®¢ ­¨¥ 8-¬¨ ª ¤à®¢
fild dword[rot_angles+4]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 128, 0, buf_1
 
fild dword[rot_angles+8]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 0, 128, buf_1
fild dword[rot_angles+12]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 128, 128, buf_1
 
fild dword[rot_angles+16]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 0, 256, buf_1
fild dword[rot_angles+20]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 128, 256, buf_1
 
fild dword[rot_angles+24]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 0, 384, buf_1
fild dword[rot_angles+28]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 128, 384, buf_1
 
; *** ¯®á«¥¤­¨© ª ¤à ***
fild dword[rot_angles]
fstp dword[angle_y]
call draw_3d
call draw_cadr
stdcall [buf2d_bit_blt], buf_0, 0, 0, buf_1
call draw_3d
; ***
 
stdcall [buf2d_draw], buf_0 ;®¡­®¢«ï¥¬ ¡ãä¥à ­  íªà ­¥
ret
 
align 4
rot_angles dd 0,45,90,135,180,225,270,315
 
align 4
draw_cadr:
mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
mov eax,[eax] ;eax -> ZBuffer
mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
mov dword[buf_1],eax
 
mov dword[buf_1.w],512
mov dword[buf_1.h],512
stdcall [buf2d_img_hdiv2],buf_1
mov dword[buf_1.h],256
stdcall [buf2d_img_hdiv2],buf_1
mov dword[buf_1.h],128
stdcall [buf2d_img_wdiv2],buf_1
mov dword[buf_1.w],256
stdcall [buf2d_img_wdiv2],buf_1
mov dword[buf_1.w],128
ret
 
align 4
but_save_file:
pushad
copy_path open_dialog_name,communication_area_default_path,file_name,0
mov [OpenDialog_data.type],1
stdcall [OpenDialog_Start],OpenDialog_data
cmp [OpenDialog_data.status],2
je .end_save_file
;ª®¤ ¯à¨ 㤠筮¬ ®âªàë⨨ ¤¨ «®£ 
 
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 2
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov ebx, dword[open_file_data]
;¯¨è¥¬ ¢ ä ©« ­®¢ë© ¬ áèâ ¡
mov edx,dword[v_zoom]
mov byte[ebx],dl
;
mov [run_file_70.Buffer], ebx
mov ebx,[open_file_size]
mov dword[run_file_70.Count], ebx ;à §¬¥à ä ©« 
mov byte[run_file_70+20], 0
mov dword[run_file_70.FileName], openfile_path
mov ebx,run_file_70
int 0x40 ;á®å࠭塞 ä ©«
;cmp ebx,0xffffffff
;je .end_save_file
; ... á®®¡é¥­¨¥ ® ­¥ã¤ ç­®¬ á®åà ­¥­¨¨ ...
 
.end_save_file:
popad
ret
 
align 4
proc but_zoom_p uses eax
cmp dword[v_zoom],11 ;max=2^11=2048
jge @f
inc dword[v_zoom]
stdcall buf_vox_obj_create_3d,[open_file_data],[open_file_ogl],0,0,[v_zoom]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
ret
endp
 
align 4
proc but_zoom_m uses eax
cmp dword[v_zoom],1
jle @f
dec dword[v_zoom]
stdcall buf_vox_obj_create_3d,[open_file_data],[open_file_ogl],0,0,[v_zoom]
call draw_3d
stdcall [kosglSwapBuffers]
@@:
ret
endp
 
align 4
proc but_3 uses eax
xor word[opt_light],1
cmp word[opt_light],0
je @f
stdcall [glEnable], GL_LIGHTING
stdcall [glEnable], GL_LIGHT0
jmp .end_light
@@:
stdcall [glDisable], GL_LIGHTING
stdcall [glDisable], GL_LIGHT0
.end_light:
call draw_3d
stdcall [kosglSwapBuffers]
ret
endp
 
align 4
proc but_4 uses eax
xor word[opt_cube_box],1
call draw_3d
stdcall [kosglSwapBuffers]
ret
endp
 
align 4
proc but_5 uses eax
xor word[opt_auto_rotate],1
ret
endp
 
align 4
proc but_6 uses eax ebx ecx edx edi
;¢ëç¨á«¥­¨¥ áâ â¨á⨪¨ ¯® ¢®ªá¥«ï¬
mov eax,[open_file_ogl]
or eax,eax
jz .end_stat
mov ebx,[eax]
mov ecx,ebx
mov edx,ebx
imul ebx,6
add eax,4
align 4
.cycle_0:
bt word[eax+vox_ogl_planes],vox_ogl_gran_z0
jc @f
dec ebx
@@:
bt word[eax+vox_ogl_planes],vox_ogl_gran_z1
jc @f
dec ebx
@@:
bt word[eax+vox_ogl_planes],vox_ogl_gran_y0
jc @f
dec ebx
@@:
bt word[eax+vox_ogl_planes],vox_ogl_gran_y1
jc @f
dec ebx
@@:
bt word[eax+vox_ogl_planes],vox_ogl_gran_x0
jc @f
dec ebx
@@:
bt word[eax+vox_ogl_planes],vox_ogl_gran_x1
jc @f
dec ebx
@@:
add eax,vox_ogl_size
loop .cycle_0
 
mov eax,edx
mov edi,txt_stat_m1.v
stdcall convert_int_to_str,20
 
;mov eax,ebx
;mov edi,txt_stat_m2.v
;stdcall convert_int_to_str,20
 
;stdcall str_n_cat,txt_stat_m1.v,txt_stat_m2,50
notify_window_run txt_stat_m1
.end_stat:
ret
endp
 
align 4
txt_stat_m1:
db '‘â â¨á⨪ ',13,10,'‚®ªá¥«¥©: '
.v: rb 50
txt_stat_m2:
db 13,10,'Žâ®¡à ¦ ¥¬ëå £à ­¥©: '
.v: rb 20
 
align 4
proc but_7 uses eax
call draw_cadr_8
ret
endp
 
align 4
draw_3d:
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
stdcall [glPushMatrix]
 
cmp word[opt_light],0
je @f
call SetLight
@@:
stdcall [glTranslatef], 0.0,0.0,0.5 ;ª®®à¤¨­ âë ¯® ®á¨ z ¤®«¦­ë ¡ëâì ¢ ¯à¥¤¥« å ®â 0.0 ¤® 1.0, ¨­ ç¥ ¨§®¡à ¦¥­¨¥ ¡ã¤¥â ®âᥪ âìáï
;¢®ªá¥«ì­ë© ®¡ê¥ªâ ¨¬¥¥â ª®®à¤¨­ âë ¯® ®áï¬ ®â -0.5 ¤® 0.5, ¯®â®¬ã ¥£® ¤¢¨£ ¥¬ ­  +0.5
;­® ¢á¥ ¦¥ ¯à¨ ¯®¢®à®â å ¡ã¤ãâ ®âᥪ âáï ªà ï, ª®â®àë¥ ¢ë«¥§ãâ §  ¯à¥¤¥«ë ¯«®áª®á⥩ ®âá¥ç¥­¨ï
;¢ ¢¥àᨨ opengl ¯®¤ Win ª®®à¤¨­ âë ¨¤ãâ ®â -1.0 ¤® 1.0 ¯®â®¬ã â ¬ í⮣® ¤¥« âì ­¥ ­ã¦­®
stdcall [glScalef], [scale], [scale], [scale] ;㢥«¨ç¨¢ ¥¬ ¢®ªá¥«ì­ë© ®¡ê¥ªâ, çâ®-¡ë ­¥ ¡ë« ®ç¥­ì ¬ «¥­ìª¨¬
stdcall [glRotatef], [angle_y],0.0,1.0,0.0
stdcall [glRotatef], [angle_x],1.0,0.0,0.0
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
stdcall draw_voxels_3d,[open_file_ogl]
 
stdcall [glPopMatrix]
ret
 
align 4
proc SetLight
stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
 
stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
 
stdcall [glEnable], GL_COLOR_MATERIAL
stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
stdcall [glEnable], GL_LIGHTING
stdcall [glEnable], GL_LIGHT0
;;;stdcall [glLightModeli], GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE
ret
endp
 
;input:
; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int, buf:dword
xor eax,eax
push ebx ecx esi
xor ebx,ebx
mov esi,[buf]
;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
xor ecx,ecx
inc ecx
cmp byte[esi],'-'
jne @f
dec ecx
inc esi
@@:
 
cmp word[esi],'0x'
je .load_digit_16
 
.load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
 
.load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
or ecx,ecx ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
jnz @f
neg eax
inc eax
@@:
pop esi ecx ebx
ret
endp
 
;¤ ­­ë¥ ¤«ï ¤¨ «®£  ®âªàëâ¨ï ä ©«®¢
align 4
OpenDialog_data:
.type dd 0 ;0 - ®âªàëâì, 1 - á®åà ­¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î
.procinfo dd procinfo ;+4
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.opendir_path dd plugin_path ;+16
.dir_default_path dd default_dir ;+20
.start_path dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢
.draw_window dd draw_window ;+28
.status dd 0 ;+32
.openfile_path dd openfile_path ;+36 ¯ãâì ª ®âªà뢠¥¬®¬ã ä ©«ã
.filename_area dd filename_area ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 10 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 10 ;+54 ; Window Y position
 
default_dir db '/rd/1',0
 
communication_area_name:
db 'FFFFFFFF_open_dialog',0
open_dialog_name:
db 'opendial',0
communication_area_default_path:
db '/rd/1/File managers/',0
 
Filter:
dd Filter.end - Filter ;.1
.1:
db 'VOX',0
db 'TXT',0
.end:
db 0
 
 
 
head_f_i:
head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
 
system_dir_0 db '/sys/lib/'
lib_name_0 db 'proc_lib.obj',0
err_message_found_lib_0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
err_message_import_0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
 
system_dir_1 db '/sys/lib/'
lib_name_1 db 'libimg.obj',0
err_message_found_lib_1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'libimg.obj',39,0
err_message_import_1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0
 
system_dir_2 db '/sys/lib/'
lib_name_2 db 'buf2d.obj',0
err_msg_found_lib_2 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'buf2d.obj',39,0
err_msg_import_2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0
 
l_libs_start:
lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i
lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\
err_msg_found_lib_3,head_f_l,import_lib_tinygl,err_msg_import_3,head_f_i
l_libs_end:
 
align 4
import_libimg:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
 
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
aimg_encode db 'img_encode',0
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
 
align 4
proclib_import: ;®¯¨á ­¨¥ íªá¯®àâ¨à㥬ëå ä㭪権
OpenDialog_Init dd aOpenDialog_Init
OpenDialog_Start dd aOpenDialog_Start
dd 0,0
aOpenDialog_Init db 'OpenDialog_init',0
aOpenDialog_Start db 'OpenDialog_start',0
 
align 4
import_buf2d:
init dd sz_init
buf2d_create dd sz_buf2d_create
buf2d_create_f_img dd sz_buf2d_create_f_img
buf2d_clear dd sz_buf2d_clear
buf2d_draw dd sz_buf2d_draw
buf2d_delete dd sz_buf2d_delete
buf2d_line dd sz_buf2d_line
buf2d_rect_by_size dd sz_buf2d_rect_by_size
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
buf2d_circle dd sz_buf2d_circle
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
buf2d_bit_blt dd sz_buf2d_bit_blt
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
buf2d_curve_bezier dd sz_buf2d_curve_bezier
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
buf2d_draw_text dd sz_buf2d_draw_text
buf2d_crop_color dd sz_buf2d_crop_color
buf2d_offset_h dd sz_buf2d_offset_h
buf2d_flood_fill dd sz_buf2d_flood_fill
buf2d_set_pixel dd sz_buf2d_set_pixel
dd 0,0
sz_init db 'lib_init',0
sz_buf2d_create db 'buf2d_create',0
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
sz_buf2d_clear db 'buf2d_clear',0
sz_buf2d_draw db 'buf2d_draw',0
sz_buf2d_delete db 'buf2d_delete',0
sz_buf2d_line db 'buf2d_line',0
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
sz_buf2d_circle db 'buf2d_circle',0
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
sz_buf2d_draw_text db 'buf2d_draw_text',0
sz_buf2d_crop_color db 'buf2d_crop_color',0
sz_buf2d_offset_h db 'buf2d_offset_h',0
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
 
;--------------------------------------------------
align 4
import_lib_tinygl:
 
macro E_LIB n
{
n dd sz_#n
}
include '../../../../programs/develop/libraries/TinyGL/asm_fork/export.inc'
dd 0,0
macro E_LIB n
{
sz_#n db `n,0
}
include '../../../../programs/develop/libraries/TinyGL/asm_fork/export.inc'
 
;--------------------------------------------------
system_dir_3 db '/sys/lib/'
lib_name_3 db 'tinygl.obj',0
err_msg_found_lib_3 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'tinygl.obj',39,0
err_msg_import_3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'tinygl',39,0
;--------------------------------------------------
 
sc system_colors
last_time dd 0
 
align 16
procinfo process_information
 
align 4
buf_0: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
dw 530 ;+4 left
dw 30 ;+6 top
.w: dd 256 ;+8 w
.h: dd 512 ;+12 h
.color: dd 0xffffd0 ;+16 color
db 24 ;+20 bit in pixel
 
align 4
buf_1: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
dw 0 ;+4 left
dw 0 ;+6 top
.w: dd 512 ;+8 w
.h: dd 512 ;+12 h
.color: dd 0xffffff ;+16 color
db 24 ;+20 bit in pixel
 
align 4
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
;sizeof.TinyGLContext = 28
 
scale dd 1.414213562
angle_x dd 0.0
angle_y dd 0.0
angle_z dd 0.0
delt_size dd 3.0
 
opt_light dw 0 ;®¯æ¨ï ¤«ï ¢ª«î祭¨ï/¢ëª«î祭¨ï ᢥâ 
opt_cube_box dw 1 ;®¯æ¨ï ¤«ï à¨á®¢ ­¨ï à ¬ª¨ ¢®ªà㣠®¡ê¥ªâ 
opt_auto_rotate dw 1 ;®¯æ¨ï ¤«ï  ¢â®¬ â¨ç¥áª®£® ¯®¢®à®â  ®¡ê¥ªâ 
 
light_position dd 0.0, 0.0, 2.0, 1.0 ;  á¯®«®¦¥­¨¥ ¨áâ®ç­¨ª  [0][1][2]
;[3] = (0.0 - ¡¥áª®­¥ç­® 㤠«¥­­ë© ¨áâ®ç­¨ª, 1.0 - ¨áâ®ç­¨ª á¢¥â  ­  ®¯à¥¤¥«¥­­®¬ à ááâ®ï­¨¨)
light_dir dd 0.0,0.0,0.0 ;­ ¯à ¢«¥­¨¥ « ¬¯ë
 
mat_specular dd 0.3, 0.3, 0.3, 1.0 ; –¢¥â ¡«¨ª 
mat_shininess dd 3.0 ;  §¬¥à ¡«¨ª  (®¡à â­ ï ¯à®¯®àæ¨ï)
white_light dd 0.8, 0.8, 0.8, 1.0 ; –¢¥â ¨ ¨­â¥­á¨¢­®áâì ®á¢¥é¥­¨ï, £¥­¥à¨à㥬®£® ¨áâ®ç­¨ª®¬
lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ;  à ¬¥âàë ä®­®¢®£® ®á¢¥é¥­¨ï
 
 
align 16
i_end:
rb 4096
stacktop:
sys_path rb 1024
file_name:
rb 1024 ;4096
library_path rb 1024
plugin_path rb 4096
openfile_path rb 4096
filename_area rb 256
mem: