/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: |