From fc6f59584d132930c4d088effd252bc9299b63ea Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 19 Jan 2016 20:53:55 +0000 Subject: [PATCH] update programs git-svn-id: svn://kolibrios.org@6081 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/data.inc | 8 +- programs/develop/info3ds/info3ds.asm | 154 +++++++-------- programs/develop/info3ds/info3ds_u.asm | 112 +++++------ programs/develop/info3ds/info_o3d.inc | 192 ++++++++++++++++++- programs/develop/info3ds/info_wnd_coords.inc | 29 ++- programs/develop/info3ds/objects.png | Bin 3036 -> 3742 bytes 6 files changed, 334 insertions(+), 161 deletions(-) diff --git a/programs/develop/info3ds/data.inc b/programs/develop/info3ds/data.inc index 78fd90575c..ef7ff963e7 100644 --- a/programs/develop/info3ds/data.inc +++ b/programs/develop/info3ds/data.inc @@ -52,16 +52,16 @@ block_3ds 0x0011,4,1,txt_0011 block_3ds 0x0100,3,1,txt_0100 block_3ds CHUNK_ambient_color,3,0,txt_2100 ; [-] ambient color block_3ds CHUNK_OBJMESH, 3,0,txt_3d3d -block_3ds CHUNK_OBJBLOCK,3,1,txt_4000 +block_3ds CHUNK_OBJBLOCK,11,1,txt_4000 block_3ds CHUNK_TRIMESH, 3,0,txt_4100 -block_3ds CHUNK_VERTLIST,3,1,txt_4110 +block_3ds CHUNK_VERTLIST,8,1,txt_4110 block_3ds CHUNK_FACELIST,3,1,txt_4120 -block_3ds CHUNK_FACEMAT, 3,1,txt_4130 +block_3ds CHUNK_FACEMAT,10,1,txt_4130 block_3ds CHUNK_MAPLIST, 3,1,txt_4140 block_3ds CHUNK_TRMATRIX,3,1,txt_4160 block_3ds 0x4600,3,1,txt_4600 block_3ds CHUNK_CAMERA, 3,1,txt_4700 -block_3ds CHUNK_MATERIAL,3,0,txt_afff +block_3ds CHUNK_MATERIAL,10,0,txt_afff block_3ds CHUNK_MATNAME, 3,1,txt_a000 block_3ds 0xa010,4,0,txt_a010 block_3ds 0xa020,4,0,txt_a020 diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index cab5ec77a5..0502162851 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -1,10 +1,11 @@ use32 org 0x0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, 0, sys_path + dd 1, start, i_end, mem, stacktop, file_name, sys_path include '../../macros.inc' include '../../proc32.inc' +include '../../kosfuncs.inc' include '../../develop/libraries/box_lib/load_lib.mac' include '../../develop/libraries/box_lib/trunk/box_lib.mac' include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' @@ -55,7 +56,7 @@ image_data_toolbar dd 0 TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;размер bmp файла с системными иконками icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок icon_toolbar dd 0 ;указатеель на память для хранения иконок объектов -IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*10+54 ;размер bmp файла с иконками объектов +IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*12+54 ;размер bmp файла с иконками объектов ; IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением @@ -76,14 +77,14 @@ macro load_image_file path,buf,size { ; stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov [run_file_70.Function], 0 + mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov [run_file_70.Count], dword size mov [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mcall 70,run_file_70 ;загружаем файл изображения + mcall SF_FILE,run_file_70 ;загружаем файл изображения cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data @@ -120,19 +121,32 @@ include 'info_wnd_coords.inc' align 4 start: + ;--- copy cmd line --- + mov esi,file_name + mov edi,openfile_path +@@: + lodsd + cmp eax,0 + je @f ;выход, если 0 + stosd + jmp @b +@@: + stosd + load_libraries l_libs_start,l_libs_end ;проверка на сколько удачно загузились библиотеки mov ebp,lib_0 .test_lib_open: cmp dword [ebp+ll_struc_size-4],0 jz @f - mcall -1 ;exit not correct + mcall SF_TERMINATE_PROCESS ;exit not correct @@: add ebp,ll_struc_size cmp ebp,l_libs_end jl .test_lib_open - mcall 48,3,sc,sizeof.sys_colors_new - mcall 40,0x27 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.sys_colors_new + mcall SF_SET_EVENTS_MASK,0x27 + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога ;kmenu initialisation @@ -255,7 +269,7 @@ start: fdiv dword[fl255] fstp dword[color_bk] - mcall 26,9 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov [last_time],eax stdcall [kosglMakeCurrent], 3d_wnd_l,3d_wnd_t,3d_wnd_w,3d_wnd_h,ctx1 @@ -266,11 +280,21 @@ start: stdcall [gluNewQuadric] mov [qObj],eax + mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext + mov eax,[eax] ;eax -> ZBuffer + mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf + mov dword[buf_ogl],eax + + ;open file from cmd line + cmp dword[openfile_path],0 + je @f + call but_open_file.no_dlg + @@: call draw_window align 4 still: - mcall 26,9 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov ebx,[last_time] add ebx,10 ;задержка cmp ebx,eax @@ -278,7 +302,7 @@ still: mov ebx,eax @@: sub ebx,eax - mcall 23 + mcall SF_WAIT_EVENT_TIMEOUT cmp eax,0 je timer_funct @@ -293,7 +317,7 @@ still: jz button cmp al,6 jne @f - mcall 9,procinfo,-1 + mcall SF_THREAD_INFO,procinfo,-1 cmp ax,word[procinfo+4] jne @f ;окно не активно call mouse @@ -308,7 +332,7 @@ mouse: align 4 timer_funct: pushad - mcall 26,9 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov [last_time],eax ;просматриваем выделенный блок данных @@ -316,7 +340,7 @@ timer_funct: cmp eax,0 je @f mov ebx,eax - mov eax,dword[ebx] ;получаем значение сдвига выбранного блока относительно начала файла + mov eax,dword[ebx] mov ecx,dword[ebx+4] ;размер блока stdcall hex_in_str, txt_3ds_offs.dig, eax,8 stdcall hex_in_str, txt_3ds_offs.siz, ecx,8 @@ -326,7 +350,7 @@ timer_funct: je @f ;если выделенный блок данных не совпадает с последним запомненным mov dword[offs_last_timer],eax - call buf_draw_beg + stdcall buf_draw_beg, buf_0 stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000 mov edx,dword[ebx+list_offs_p_data] cmp edx,0 ;смотрим есть ли описание блока @@ -340,17 +364,6 @@ timer_funct: popad jmp still -align 4 -buf_draw_beg: - stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер - stdcall [buf2d_draw_text], buf_0, buf_1,txt_open_3ds,5,5,0xff - stdcall [buf2d_draw_text], buf_0, buf_1,openfile_path,5,15,0xff - cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;возможна ошибка файла - jne @f - stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_err_sizes,5,25,0xff0000 - @@: - ret - align 4 proc buf_draw_hex_table, offs:dword, size_line:dword pushad @@ -408,14 +421,14 @@ endp align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW xor eax,eax mov edx,[sc.work] or edx,0x33000000 mov edi,capt mcall , (20 shl 16)+560, (20 shl 16)+main_wnd_height - mcall 9,procinfo,-1 + mcall SF_THREAD_INFO,procinfo,-1 mov eax,dword[procinfo.box.height] cmp eax,250 jge @f @@ -444,23 +457,17 @@ pushad mov word[buf_0.l],ax 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 + mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(5 shl 16)+20,3 + mcall ,(30 shl 16)+20,,4 cmp byte[can_save],0 je @f - mov ebx,(55 shl 16)+20 - mov edx,5 - int 0x40 + mcall ,(55 shl 16)+20,,5 @@: - mcall ,(85 shl 16)+20,,6 ;окно с координатами mcall ,(110 shl 16)+20,,7 ;удаление блока - mcall 7,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new + mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new add ebx,IMAGE_TOOLBAR_ICON_SIZE mov edx,(32 shl 16)+7 ;open @@ -487,20 +494,20 @@ pushad stdcall [buf2d_draw], buf_0 - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad ret align 4 key: - mcall 2 + mcall SF_GET_KEY stdcall [tl_key], dword tree1 jmp still align 4 button: - mcall 17 + mcall SF_GET_BUTTON cmp ah,3 jne @f call but_new_file @@ -538,7 +545,7 @@ button: stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[open_file_data] stdcall [gluDeleteQuadric], [qObj] - mcall -1 + mcall SF_TERMINATE_PROCESS align 4 @@ -559,33 +566,36 @@ but_open_file: cmp [OpenDialog_data.status],2 je .end_open_file ;код при удачном открытии диалога - - mov [run_file_70.Function], 5 + jmp @f +.no_dlg: ;если минуем диалог открытия файла + pushad + @@: + mov [run_file_70.Function], SSF_GET_INFO 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 - mcall 70,run_file_70 + mcall SF_FILE,run_file_70 mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах stdcall mem.ReAlloc,[open_file_data],ecx mov [open_file_data],eax - mov [run_file_70.Function], 0 + mov [run_file_70.Function], SSF_READ_FILE 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 - mcall 70,run_file_70 ;загружаем файл 3ds + mcall SF_FILE,run_file_70 ;загружаем файл 3ds cmp ebx,0xffffffff je .end_open_file mov [open_file_size],ebx - ;mcall 71,1,openfile_path + ;mcall SF_SET_CAPTION,1,openfile_path mov byte[can_save],0 call init_tree @@ -608,7 +618,7 @@ init_tree: mov esi,dword[open_file_data] cmp word[esi],CHUNK_MAIN je @f - call buf_draw_beg + stdcall buf_draw_beg, buf_0 stdcall [buf2d_draw_text], buf_0, buf_1,txt_no_3ds,5,25,0xff0000 ;рисуем строку с текстом jmp .end_open @@: @@ -659,6 +669,7 @@ init_tree: ;анализ данных блока ;input: +; eax - stack pointer ; esi - memory pointer ;output: ; eax - new stack pointer @@ -716,11 +727,16 @@ block_analiz_data: sub ecx,eax cmp ecx,1 jl .data_3 ;проверяем есть ли блок описывающий материал, применяемый к объекту +if 0 + add esi,eax + mov ecx,dword[esi+2] + stdcall add_3ds_object, 10,ebx,ecx,0 ;данные материала + sub esi,eax +else add esi,eax pop eax jmp .next_bl - ;stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 ;данные материала - ;sub esi,eax ;восстановление esi +end if .data_3: sub esi,8 ;восстановление esi @@ -928,32 +944,6 @@ align 4 @@: ret -align 4 -proc hex_in_str, buf:dword,val:dword,zif:dword - pushad - mov edi,dword[buf] - mov ecx,dword[zif] - add edi,ecx - dec edi - mov ebx,dword[val] - - .cycle: - mov al,bl - and al,0xf - cmp al,10 - jl @f - add al,'a'-'0'-10 - @@: - add al,'0' - mov byte[edi],al - dec edi - shr ebx,4 - loop .cycle - - popad - ret -endp - align 4 but_save_file: pushad @@ -964,7 +954,7 @@ but_save_file: je .end_save_file ;код при удачном открытии диалога - mov [run_file_70.Function], 2 + mov [run_file_70.Function], SSF_CREATE_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov ebx, dword[open_file_data] @@ -973,7 +963,7 @@ but_save_file: mov dword[run_file_70.Count], ebx ;размер файла mov byte[run_file_70+20], 0 mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 + mcall SF_FILE,run_file_70 cmp ebx,0xffffffff je .end_save_file ;...сообщение... @@ -986,7 +976,7 @@ but_wnd_coords: cmp byte[prop_wnd_run],0 jne @f pushad - mcall 51,1,prop_start,thread_coords + mcall SF_CREATE_THREAD,1,prop_start,thread_coords popad @@: ret @@ -1006,7 +996,7 @@ but_delete_chunk: mov edx,dword[eax+4] ;размер блока sub [open_file_size],edx ;изменение размеров файла mov ecx,[open_file_size] - mov ebx,dword[eax] ;получаем значение сдвига выбранного блока относительно начала файла + mov ebx,dword[eax] sub ecx,ebx ;ecx - размер нижней сдвигаемой части файла add ebx,dword[open_file_data] ;получаем значение сдвига в памяти mov edi,ebx @@ -1429,9 +1419,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; Параметры фонового освещения if lang eq ru -capt db 'info 3ds версия 16.01.16',0 ;подпись окна +capt db 'info 3ds версия 19.01.16',0 ;подпись окна else -capt db 'info 3ds version 16.01.16',0 ;window caption +capt db 'info 3ds version 19.01.16',0 ;window caption end if align 16 diff --git a/programs/develop/info3ds/info3ds_u.asm b/programs/develop/info3ds/info3ds_u.asm index f8b08e2bd1..5906b4575d 100644 --- a/programs/develop/info3ds/info3ds_u.asm +++ b/programs/develop/info3ds/info3ds_u.asm @@ -61,7 +61,7 @@ image_data_toolbar dd 0 TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;размер bmp файла с системными иконками icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок icon_toolbar dd 0 ;указатеель на память для хранения иконок объектов -IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*10+54 ;размер bmp файла с иконками объектов +IMAGE_CHUNKS_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*12+54 ;размер bmp файла с иконками объектов ; IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением @@ -320,6 +320,15 @@ mouse: ;mouse l. but. move cmp dword[mouse_drag],1 jne .end_m + + stdcall [tl_node_get_data],tree1 + cmp eax,0 + je .end_d + mov ebx,dword[eax] + add ebx,dword[open_file_data] ;получаем значение сдвига в памяти + cmp word[ebx],CHUNK_OBJBLOCK + jne .end_d + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION mov ebx,eax shr ebx,16 ;mouse.x @@ -358,8 +367,7 @@ mouse: fstp dword[angle_y] stdcall [tl_node_get_data],tree1 - cmp eax,0 - je .end_d + ;cmp eax,0 - не надо, было сделано выше add eax,list_offs_obj3d stdcall draw_3d, eax jmp .end_d @@ -410,7 +418,7 @@ timer_funct: mov edi,eax add edi,list_offs_obj3d mov ebx,eax - mov eax,dword[ebx] ;получаем значение сдвига выбранного блока относительно начала файла + mov eax,dword[ebx] mov ecx,dword[ebx+4] ;размер блока stdcall hex_in_str, txt_3ds_offs.dig, eax,8 stdcall hex_in_str, txt_3ds_offs.siz, ecx,8 @@ -434,7 +442,22 @@ timer_funct: call mnu_reset_settings ;сброс углов поворота и режимов рисования jmp .end_f .end_oblo: - call buf_draw_beg + + cmp word[eax],CHUNK_MATERIAL + jne .end_mblo + cmp dword[edi+offs_mat_name],0 + je .ini_mblo + stdcall draw_material,edi + jmp .end_f + .ini_mblo: + stdcall mat_init,edi ;попытка настроить данные материала + cmp dword[edi+offs_mat_name],0 + je .end_f + stdcall draw_material,edi + jmp .end_f + .end_mblo: + + stdcall buf_draw_beg, buf_ogl stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_3ds_offs,5,35,0xb000 mov edx,dword[ebx+list_offs_p_data] cmp edx,0 ;смотрим есть ли описание блока @@ -446,17 +469,6 @@ timer_funct: popad jmp still -align 4 -buf_draw_beg: - stdcall [buf2d_clear], buf_ogl, [buf_ogl.color] ;чистим буфер - stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_open_3ds,5,5,0xff - stdcall [buf2d_draw_text], buf_ogl, buf_1,openfile_path,5,15,0xff - cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;возможна ошибка файла - jne @f - stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_3ds_err_sizes,5,25,0xff0000 - @@: - ret - align 4 draw_window: pushad @@ -715,7 +727,7 @@ init_tree: mov esi,dword[open_file_data] cmp word[esi],CHUNK_MAIN je @f - call buf_draw_beg + stdcall buf_draw_beg, buf_ogl stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_no_3ds,5,25,0xff0000 ;рисуем строку с текстом jmp .end_open @@: @@ -738,14 +750,14 @@ init_tree: mov edx,dword[esi+2] ;размер блока call block_analiz -;cmp word[esi],CHUNK_MATERIAL -;je @f -cmp word[esi],CHUNK_OBJMESH -je @f -cmp word[esi],CHUNK_OBJBLOCK -je @f -mov dword[bl_found],0 -@@: + cmp word[esi],CHUNK_MATERIAL + je @f + cmp word[esi],CHUNK_OBJMESH + je @f + cmp word[esi],CHUNK_OBJBLOCK + je @f + mov dword[bl_found],0 + @@: cmp dword[bl_found],0 jne @f ;объект не известного вида @@ -760,10 +772,19 @@ mov dword[bl_found],0 add esi,6 push esi sub esi,6 - jmp .pod2 + jmp .pod3 .pod1: - push dword[ecx+5] ;стандартное название блока + cmp word[esi],CHUNK_MATERIAL + jne .pod2 + cmp word[esi+6],CHUNK_MATNAME + jne .pod2 + add esi,12 + push esi + sub esi,12 + jmp .pod3 .pod2: + push dword[ecx+5] ;стандартное название блока + .pod3: stdcall add_3ds_object, ebx,dword[level_stack],edx cmp byte[ecx+4],1 je .bl_data @@ -782,6 +803,7 @@ mov dword[bl_found],0 ;анализ данных блока ;input: +; eax - stack pointer ; esi - memory pointer ;output: ; eax - new stack pointer @@ -833,9 +855,16 @@ proc block_analiz_data uses ebx ecx edx edi sub ecx,eax cmp ecx,1 jl .data_3 ;проверяем есть ли блок описывающий материал, применяемый к объекту +if 1 + add esi,eax + mov ecx,dword[esi+2] + stdcall add_3ds_object, 10,ebx,ecx,0 ;данные материала + sub esi,eax +else add esi,eax pop eax jmp .next_bl +end if .data_3: sub esi,8 ;восстановление esi @@ -1044,31 +1073,6 @@ align 4 @@: ret -align 4 -proc hex_in_str, buf:dword,val:dword,zif:dword - pushad - mov edi,dword[buf] - mov ecx,dword[zif] - add edi,ecx - dec edi - mov ebx,dword[val] - - .cycle: - mov al,bl - and al,0xf - cmp al,10 - jl @f - add al,'a'-'0'-10 - @@: - add al,'0' - mov byte[edi],al - dec edi - shr ebx,4 - loop .cycle - popad - ret -endp - ;данные для диалога открытия файлов align 4 OpenDialog_data: @@ -1448,9 +1452,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; Параметры фонового освещения if lang eq ru -capt db 'info 3ds [user] версия 16.01.16',0 ;подпись окна +capt db 'info 3ds [user] версия 19.01.16',0 ;подпись окна else -capt db 'info 3ds [user] version 16.01.16',0 ;window caption +capt db 'info 3ds [user] version 19.01.16',0 ;window caption end if align 16 diff --git a/programs/develop/info3ds/info_o3d.inc b/programs/develop/info3ds/info_o3d.inc index e44ddd3ea5..6f15d8e453 100644 --- a/programs/develop/info3ds/info_o3d.inc +++ b/programs/develop/info3ds/info_o3d.inc @@ -48,6 +48,17 @@ offs_obj_z_min equ 68 offs_obj_z_centr equ 72 offs_obj_z_scale equ 76 +struct material + name dd ? + col_ambient dd ? ;цвет материала + col_diffuse dd ? + col_specular dd ? +ends + +offs_mat_name equ 0 +offs_mat_col_ambient equ 4 +offs_mat_col_diffuse equ 8 +offs_mat_col_specular equ 12 bit_vertexes equ 0 bit_faces equ 1 @@ -71,6 +82,30 @@ key_select db 'col_select',0 rad_c dd 150 ;для вычисления радиуса +align 4 +proc hex_in_str, buf:dword,val:dword,zif:dword +pushad + mov edi,dword[buf] + mov ecx,dword[zif] + add edi,ecx + dec edi + mov ebx,dword[val] + + .cycle: + mov al,bl + and al,0xf + cmp al,10 + jl @f + add al,'a'-'0'-10 + @@: + add al,'0' + mov byte[edi],al + dec edi + shr ebx,4 + loop .cycle +popad + ret +endp ;установка всех основных переменных по умолчанию align 4 @@ -503,6 +538,151 @@ end if ret endp +;настройка материала +align 4 +proc mat_init, m_data:dword + pushad + mov edi,[m_data] + + ;... clear edi ... + mov dword[edi+offs_mat_name],0 + mov dword[edi+offs_mat_col_ambient],0 + mov dword[edi+offs_mat_col_diffuse],0 + mov dword[edi+offs_mat_col_specular],0 + + stdcall [tl_node_get_data],tree1 + xor edx,edx + cmp eax,0 + je .no_material + mov ebx,[eax] ;получаем значение сдвига выбранного блока + add ebx,[open_file_data] + xor ecx,ecx + cmp word[ebx],CHUNK_MATERIAL + jne .no_material + mov ecx,ebx + add ecx,dword[ecx+2] ;граница блока + add ebx,6 + cmp word[ebx],CHUNK_MATNAME + jne .no_material + ;*** (0) *** + mov esi,ebx + add ebx,6 + mov [edi+offs_mat_name],ebx + sub ebx,6 + ;*** (1) *** + .cycle_0: ;цикл для поиска цвета материала + add esi,dword[esi+2] + cmp word[esi],0xa010 + je @f + cmp ecx,esi + jg .cycle_0 ;пока не достигнута грница старшего блока + jmp .end_material ;если не нашли цвет материала + @@: + ;если нашли цвет материала + add esi,6 + cmp word[esi],0x0011 + jne .end_material + add esi,6 + mov dl,byte[esi] + mov [edi+offs_mat_col_ambient+2],dl + mov dx,word[esi+1] + ror dx,8 + mov [edi+offs_mat_col_ambient],dx + ;*** (2) *** + mov esi,ebx + .cycle_1: ;цикл для поиска цвета материала + add esi,dword[esi+2] + cmp word[esi],0xa020 + je @f + cmp ecx,esi + jg .cycle_1 ;пока не достигнута грница старшего блока + jmp .end_material ;если не нашли цвет материала + @@: + ;если нашли цвет материала + add esi,6 + cmp word[esi],0x0011 + jne .end_material + add esi,6 + mov dl,byte[esi] + mov [edi+offs_mat_col_diffuse+2],dl + mov dx,word[esi+1] + ror dx,8 + mov [edi+offs_mat_col_diffuse],dx + ;*** (3) *** + mov esi,ebx + .cycle_2: ;цикл для поиска цвета материала + add esi,dword[esi+2] + cmp word[esi],0xa030 + je @f + cmp ecx,esi + jg .cycle_2 ;пока не достигнута грница старшего блока + jmp .end_material ;если не нашли цвет материала + @@: + ;если нашли цвет материала + add esi,6 + cmp word[esi],0x0011 + jne .end_material + add esi,6 + mov dl,byte[esi] + mov [edi+offs_mat_col_specular+2],dl + mov dx,word[esi+1] + ror dx,8 + mov [edi+offs_mat_col_specular],dx + + .end_material: + .no_material: + popad + ret +endp + +align 4 +proc buf_draw_beg uses eax, buf:dword + mov eax,[buf] + stdcall [buf2d_clear], eax, [eax+16] ;чистим буфер + stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff + stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff + cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;возможна ошибка файла + jne @f + stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000 + @@: + ret +endp + +;рисование материала +align 4 +proc draw_material uses edi, m_data:dword + mov edi,[m_data] + stdcall buf_draw_beg, buf_ogl + stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff + + stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;имя материала + stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;окружающий цвет + stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;дифузный цвет + stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;зеркальный цвет + + stdcall [buf2d_draw], buf_ogl + ret +endp + +align 4 +proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword + mov eax,[c_x] + mov ebx,[c_y] + ; прямоугольник + inc ebx + stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color] + dec ebx + stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0 + ; подписи + add eax,33 + stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0 + add ebx,10 + stdcall hex_in_str, buffer,[color],6 + mov byte[buffer+6],0 + stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0 + ret +endp + ;рисование точек в 3d align 4 proc draw_3d uses eax ebx ecx edi, o_data:dword @@ -730,14 +910,18 @@ else align 4 update_obj: -push eax +push eax ebx stdcall [tl_node_get_data],tree1 cmp eax,0 je @f - add eax,14 ;14=list_offs_obj3d - stdcall draw_3d, eax + mov ebx,dword[eax] ;получаем значение сдвига выбранного блока относительно начала файла + add ebx,dword[open_file_data] ;получаем значение сдвига в памяти + cmp word[ebx],CHUNK_OBJBLOCK + jne @f + add eax,14 ;14=list_offs_obj3d + stdcall draw_3d, eax @@: -pop eax +pop ebx eax ret end if diff --git a/programs/develop/info3ds/info_wnd_coords.inc b/programs/develop/info3ds/info_wnd_coords.inc index fb0a0e405b..b70f1fd21f 100644 --- a/programs/develop/info3ds/info_wnd_coords.inc +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -37,18 +37,13 @@ dq 0,0 align 4 prop_start: pushad - mcall 40,0x27 ;маска ожидаемых событий + mcall SF_SET_EVENTS_MASK,0x27 ;маска ожидаемых событий inc byte[prop_wnd_run] mov dword[w_scr_t3.type],1 mov edi,o3d stdcall obj_clear_param, edi call mnu_reset_settings - mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext - mov eax,[eax] ;eax -> ZBuffer - mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf - mov dword[buf_ogl],eax - stdcall [tl_node_get_data],tree1 xor edx,edx mov dword[capt_p],txt_q @@ -170,7 +165,7 @@ align 4 prop_still: pushad - mcall 23,10 + mcall SF_WAIT_EVENT_TIMEOUT,10 or eax,eax jnz @f call prop_timer_funct @@ -200,7 +195,7 @@ prop_still: align 4 prop_red_win: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW xor eax,eax mov edi,dword[capt_p] ;children window caption @@ -218,12 +213,12 @@ pushad int 0x40 mov esi,[sc.work_button] - mcall 8, (5 shl 16)+20, (266 shl 16)+20, 3 + mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (266 shl 16)+20, 3 mcall , (30 shl 16)+20, (266 shl 16)+20, 4 mov ebx,[image_data_toolbar] add ebx,3*IMAGE_TOOLBAR_ICON_SIZE - mcall 7, , (16 shl 16)+16, (7 shl 16)+268 ;load + mcall SF_PUT_IMAGE, , (16 shl 16)+16, (7 shl 16)+268 ;load sub ebx,IMAGE_TOOLBAR_ICON_SIZE mov edx,(32 shl 16)+268 ;save @@ -238,13 +233,13 @@ pushad stdcall [kmainmenu_draw], [main_menu] stdcall draw_3d, o3d - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad ret align 4 proc prop_key uses eax ebx - mcall 2 + mcall SF_GET_KEY test word [edit1.flags],10b ;ed_focus je @f @@ -306,13 +301,13 @@ endp align 4 prop_mouse: push eax ebx - mcall 37,3 + mcall SF_MOUSE_GET,SSF_BUTTON_EXT bt eax,0 jnc .end_m ;mouse l. but. move cmp dword[mouse_drag],1 jne .end_m - mcall 37,1 ;get mouse coords + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;get mouse coords mov ebx,eax shr ebx,16 ;mouse.x cmp ebx,3d_wnd_l @@ -361,7 +356,7 @@ prop_mouse: bt eax,8 jnc .end_d ;mouse l. but. press - mcall 37,1 ;get mouse coords + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;get mouse coords mov ebx,eax shr ebx,16 ;mouse.x cmp ebx,3d_wnd_l @@ -390,7 +385,7 @@ prop_mouse: align 4 prop_button: - mcall 17 ;получить код нажатой кнопки + mcall SF_GET_BUTTON cmp ah,3 jne @f @@ -528,7 +523,7 @@ prop_button: mov dword[edi+offs_obj_normals_tri_data],0 mov dword[edi+offs_obj_normals_poi_data],0 mov byte[prop_wnd_run],0 ;обнуляем счетчик окон - mcall -1 ;выход из программы + mcall SF_TERMINATE_PROCESS ;выход из программы align 4 get_point_coords: diff --git a/programs/develop/info3ds/objects.png b/programs/develop/info3ds/objects.png index e35b9e8264d47e1928fd31db2a17b5ecac8498e8..422b779cef9fce8ffff24e2bfd2e9178efd625c1 100644 GIT binary patch delta 3704 zcmV-;4u|pF7oHuE7Ye`#0ssI2g0FNLks%uj!TDc!v=-XVX_2d87_ zCvSQUE5xsV`G3&n*N?~879}`hcKtiz5p!VK-$v2*$$j_YaY~BYyYEXvZ|1q*$z9x7 z=!8>JTypNO`FPpO27rUPU~eusP7$0fg=JQP+YG_u?_#*VA}oDLSY#nMz9_(>2Y!(L zZGa#QAKWSar|pM?+mw5y6*0KU0sN*;$loO4-*IGuUpsM+uJIWeb?FfZEI`o z{rlINnyMQclTV#uv&;r@;5~nTS#NKGnl`6Gbrc!}J7m1>twvs;jpb2Ik~|rM<4E63}=n|)1%So3>^5)Wyxr~6`&Sq(0O7qV3O{-m-T)mnDV>(jK_BD6%X|42t?B3a?qaJOU8&$;_ny-p9 zXNy%SXWD{Nn>^BGXYX>84(Mvmt1tej=XN?>IY=qNw8@uzgDL1s+E?DQtGeEyuzx%6 zd*&1Yg`(-3+6Ah%gVYd3rM{FMN(qq^xra6%r!^O8^S7#P_rIB6qiRxd;9A3un@w(N z%|7b(q5AD~HGvA!=}0amRZ-Mk`m|HMssE;3Q|*rLIB>Lf?k#y_0|iKFqgtIn(j2-| zPLf*6Z|y(O+qIP%ed%jAdFI?&4u1qoCSB=|yGX09Qg}V3c2jA8PlM*ZLUD-J>R&v*gaZze zIorD2x6`T^+L%NKa;UVNS|y#7f0>d~Xy;bivYb}F+2uHAV1+GLx6H1c?teq8d?;u; z9ZH~zbZR})MM+;%)Dil0Gc9qZX@9BRvgHN`>N@Jo&zaBdT;f9EzLXkDl1OTc?4r$A zXiX+938&W=c2555xw^V;4nQe)Q~o#q#o5we2RiCPm%OOWtBc&OkV6)|wm~|6T7F7O z9dmL3O1YIf`KZkcrE6z2=YLxF-M4P*`}^5uvkj$_=N(N+yUk68094mrzolT$oWr5x zcZH3Q+%;$G;Vtn+bq!KJt(6fl5^=!fBi=BWK_?FU2Y%e!`uX9r1fTT}GFS(-!N8mx zVDE?GhGH;eGOTUL z_k*ghkG)e&m?7T}7aNMf6xW}7A@Prf%#iPgiSfUWmW1Job?&sc=Sw7C*VUaWDH-zp zfY0p-`^NUD)h4wK@_u;mQ?4?3RS zC!Jn>!OLcP;G)o@N&AZnbE7tK88hZrS~13O505|o_!Cb&VP&EWGX@8Ot;P3B0ckWzZZ@u-_tXZ=bELbpe=1klZ48mt&VSzz-^uWmV?+4~(n}&&u zfTf9)x1UbL(Xkz3oZLluiQ=H4^gvV+os6T@Fgg%K@%~~Q2o}2-j51(2up~iDoE%EK zeJI+6wmZ>wXNqy5JwDbZAt=dJoXR#S346k(_xg(Yz+j!V zZ-0pHNM~^{Eu8X`3;<|xytv4rP2xdempB}d$c-by;K|*hfr$eU?hY87AdUlN(c=F!M$DV12Y3U&KCm>bTNpJEe=FSb0G7w zIB}(jDsreKi!Nk{frcapbD7*dW(;Z*0Tha*kqp!D6()-h0;2E`UCbbwGKB-)-Y|0j z=}`bu!hL!l9sfcMH1z35j}AFC@BkN z5HL)C$HeLOj!w8cx@F4;fG(M=%YYF9bWj6)(yneeR*V)r{tG^NXLq+usefAY^q4@i zais?nsw&0%Cj!`|TCGMU?HwJ+y7D)|^3h@?9UUEA-QB_F32N4`CyB0U-39yov#yq=p4lVK(P&y5XvaRS_Ol?oVYo;YzL z2XNli*~eG>O01+)TS>P}7Jp(fF?`lbQ8ur`EtAPmbFi)?+?}e-BRD0m(b`I|fjoCFoFHx44!`G8JsolkM0KRWCV;vKN(p3fcV6Ki~x6ccUxOqJ3G4%wR->k_tC{5 zpVmqb*xTE~ij*E69xJti6V4uA<0E-o&+0ED{(hTS;q2SO#tjln@~920)#p*A>h2G}JU=$icYGXfy2U?M&-AX8u%5&a8* WkRxUz08p?100005C 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