diff --git a/data/Tupfile.lua b/data/Tupfile.lua index 15a548b9a..1db764d16 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -605,6 +605,7 @@ tup.append_table(extra_files, { {"kolibrios/3D/voxel_utilites/VOX_CREATOR" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_creator"}, {"kolibrios/3D/voxel_utilites/VOX_MOVER" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_mover"}, {"kolibrios/3D/voxel_utilites/VOX_TGL" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_tgl"}, + {"kolibrios/demos/flag", VAR_PROGS .. "/demos/flag/flag"}, {"kolibrios/demos/life3", VAR_PROGS .. "/games/life3/life3"}, {"kolibrios/demos/qjulia", VAR_PROGS .. "/demos/qjulia/trunk/qjulia"}, {"kolibrios/develop/koldbg", VAR_PROGS .. "/develop/koldbg/koldbg"}, diff --git a/programs/demos/flag/Tupfile.lua b/programs/demos/flag/Tupfile.lua new file mode 100644 index 000000000..cf4615887 --- /dev/null +++ b/programs/demos/flag/Tupfile.lua @@ -0,0 +1,2 @@ +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("flag.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "flag") diff --git a/programs/demos/flag/flag.asm b/programs/demos/flag/flag.asm new file mode 100644 index 000000000..18991c20a --- /dev/null +++ b/programs/demos/flag/flag.asm @@ -0,0 +1,315 @@ +; SPDX-License-Identifier: GPL-2.0-only +; Program - demo program shows a flag with the inscription 'KolibriOS' +; Copyright (C) 2011-2025 KolibriOS team + +use32 + org 0 + db 'MENUET01' + dd 1,start,i_end,mem,stacktop,0,cur_dir_path + +include '../../proc32.inc' +include '../../macros.inc' +include '../../KOSfuncs.inc' +include '../../load_lib.mac' +include '../../dll.inc' +include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' +include '../../develop/libraries/TinyGL/asm_fork/examples/fps.inc' + +@use_library + +;Macro for double type parameters (8 bytes) +macro glpush GLDoubleVar { + push dword[GLDoubleVar+4] + push dword[GLDoubleVar] +} + +align 4 +start: + load_library name_tgl, library_path, system_path, import_tinygl + cmp eax,SF_TERMINATE_PROCESS + jz button.exit + + mcall SF_SET_EVENTS_MASK, 0x27 + +; *** init *** + stdcall [kosglMakeCurrent], 0,15,600,380,ctx1 + + stdcall [glMatrixMode], GL_MODELVIEW + call [glLoadIdentity] + + stdcall [glClearColor], 0.549, 0.549, 0.588, 1.0 + + ;stdcall [glEnable], GL_LIGHTING + ;stdcall [glLightf], GL_LIGHT0, GL_SPOT_EXPONENT, 0.0 + ;stdcall [glLightf], GL_LIGHT0, GL_SPOT_CUTOFF, 180.0 + ;stdcall [glEnable], GL_LIGHT0 + + stdcall [glLightfv], GL_LIGHT0, GL_POSITION, lightpos + stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, lightdirect + + stdcall [glEnable], GL_COLOR_MATERIAL + + glpush p3 + stdcall [glClearDepth] + stdcall [glEnable], GL_CULL_FACE + stdcall [glEnable], GL_DEPTH_TEST + + mcall SF_KEYBOARD, SSF_SET_INPUT_MODE, 1 + fninit + + stdcall reshape, 600,380 +; *** end init *** + + +align 4 +red_win: + call draw_window + mcall SF_THREAD_INFO, procinfo,-1 + mov eax,dword[procinfo.box.height] + cmp eax,120 + jge @f + mov eax,120 ;min size + @@: + sub eax,43 + mov ebx,dword[procinfo.box.width] + cmp ebx,200 + jge @f + mov ebx,200 + @@: + sub ebx,10 + stdcall reshape, ebx,eax + .end0: + +align 16 +still: + call draw_3d + cmp dword[stop],1 + je @f + stdcall Fps, 365,4 + + mov dword[esp-4],eax + fild dword[esp-4] + fmul dword[delt_3] + fchs + fadd dword[dangle] + fstp dword[dangle] ;dangle -= 0.01*Fps(x,y) + + ;mcall SF_CHECK_EVENT + mcall SF_WAIT_EVENT_TIMEOUT, 1 + jmp .end0 +align 4 + @@: + mcall SF_WAIT_EVENT + .end0: + cmp al, EV_REDRAW + jz red_win + cmp al, EV_KEY + jz key + cmp al, EV_BUTTON + jz button + + jmp still + + +; new window size or exposure +align 4 +proc reshape, width:dword, height:dword +locals + dxy dq ? +endl + stdcall [glViewport], 0, 0, [width], [height] + stdcall [glMatrixMode], GL_PROJECTION + call [glLoadIdentity] + fild dword[width] + fidiv dword[height] + fstp qword[dxy] ;dxy = width/height + glpush p4 + glpush p3 + glpush dxy + glpush p1 + call [gluPerspective] ;28.0, width/height, 1.0, 40.0 + + stdcall [glMatrixMode], GL_MODELVIEW + stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT + ret +endp + +align 4 +p1 dq 28.0 +p3 dq 1.0 +p4 dq 40.0 + +align 4 +draw_window: + pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + mcall SF_CREATE_WINDOW, (50 shl 16)+609,(30 shl 16)+425,0x33404040,,title1 + call [kosglSwapBuffers] + + ;Title + mcall SF_DRAW_TEXT, (338 shl 16)+4, 0xc0c0c0, fps, fps.end-fps + mcall SF_DRAW_TEXT, (8 shl 16)+4, 0xc0c0c0, title3, title3.end-title3 + ;mcall SF_DRAW_TEXT, (180 shl 16)+4, 0xc0c0c0, title2, title2.end-title2 + + mcall SF_REDRAW,SSF_END_DRAW + popad + ret + +align 4 +key: + mcall SF_GET_KEY + + cmp ah,27 ;Esc + je button.exit + + cmp ah,112 ;P + jne @f + xor dword[stop],1 + jmp still + @@: + + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + cmp ah,1 + jne still +.exit: + mcall SF_TERMINATE_PROCESS + + +align 4 +title1: db 'TinyGL in KolibriOS' +.end: db 0 +;title2: db 'F full screen' +;.end: db 0 +title3: db 'ESC - exit, P - pause' +.end: db 0 +fps: db 'FPS:' +.end: db 0 + +align 16 +proc draw_3d uses ebx ecx edx esi edi +locals + z dd ? +endl + call [glLoadIdentity] + stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT + stdcall [glTranslatef], 0.0, 0.0, -2.0 + stdcall [glRotatef], 10.0, 0.0, 0.0, 1.0 + stdcall [glRotatef], 43.0, 0.0, 1.0, 0.0 + stdcall [glTranslatef], -0.6, -0.2, -0.1 + + mov edi, logo+9*41 ;edi = logo[9][0] + mov esi, 41 ;esi = i +align 4 +.cycle0: ;for(int i=0;i<41;i++) + stdcall [glTranslatef], 0.045, 0.0, 0.0 + call [glPushMatrix] + fld dword[angle] + fsin + fmul dword[delt_1] + fstp dword[z] ;= 0.08*sin(angle) + + fld dword[angle] + fadd dword[delt_2] + fstp dword[angle] ;angle += 0.2 + + mov ecx, 9 + mov ebx, edi + +; ebx = @temp1, ecx = j +.cycle1: ;for(int j=9;j>=0;j--) + cmp byte[ebx],0 ;if(logo[j][i]) + je @f + push 0.0 ;b + push 0.0 ;g + push 1.0 ;r + jmp .end_c2 +@@: + push 0.945 ;b + push 0.855 ;g + push 0.859 ;r +.end_c2: + call [glColor3f] + stdcall [glTranslatef], 0.0, 0.045, 0.0 + stdcall [glBegin], GL_QUADS + stdcall [glVertex3f], 0.0, -0.04,[z] + stdcall [glVertex3f], 0.04,-0.04,[z] + stdcall [glVertex3f], 0.04, 0.0, [z] + stdcall [glVertex3f], 0.0, 0.0, [z] + call [glEnd] + add ebx, -41 + dec ecx + jnz .cycle1 + + call [glPopMatrix] + inc edi ;edi = logo[9][i] + dec esi + jnz .cycle0 + + mov edx,dword[dangle] + mov dword[angle],edx + call [kosglSwapBuffers] + + ret +endp + +align 4 +delt_1 dd 0.08 +delt_2 dd 0.2 +delt_3 dd 0.01 + +lightpos dd 2.0, 0.0, -2.5, 1.0 +lightdirect dd 0.0, 0.0, -0.7 +angle dd 0.0 +dangle dd 0.0 + +stop dd 0 + +;[10][41] +logo db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +db 0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,\ + 0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\ + 0,0,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,1,0,0,0,0,\ + 0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,\ + 0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,\ + 0,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0 +db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\ + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +;-------------------------------------------------- +align 4 +import_tinygl: + +macro E_LIB n +{ + n dd sz_#n +} +include '../../develop/libraries/TinyGL/asm_fork/export.inc' + dd 0,0 +macro E_LIB n +{ + sz_#n db `n,0 +} +include '../../develop/libraries/TinyGL/asm_fork/export.inc' + +;-------------------------------------------------- +system_path db '/sys/lib/' +name_tgl db 'tinygl.obj',0 +;-------------------------------------------------- + +align 16 +i_end: +ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext +;sizeof.TinyGLContext = 28 +procinfo process_information +cur_dir_path rb 4096 +library_path rb 4096 + rb 4096 +stacktop: +mem: diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 839a60de1..2bfa3ce8b 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -1082,7 +1082,7 @@ l_libs_start: lib_2 l_libs lib_name_2, file_name, system_dir_2, import_box_lib lib_3 l_libs lib_name_3, file_name, system_dir_3, import_buf2d lib_4 l_libs lib_name_4, file_name, system_dir_4, import_libkmenu - lib_5 l_libs lib_name_5, file_name, system_dir_5, import_lib_tinygl + lib_5 l_libs lib_name_5, file_name, system_dir_5, import_tinygl lib_6 l_libs lib_name_6, file_name, system_dir_6, import_libini l_libs_end: @@ -1287,7 +1287,7 @@ dd 0,0 akmenuitem_draw db 'kmenuitem_draw',0 align 4 -import_lib_tinygl: +import_tinygl: macro E_LIB n { n dd sz_#n @@ -1343,7 +1343,7 @@ buf_1: align 4 el_focus dd tree1 tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\ - 16,16, 0xffffff,0xb0d0ff,0x400040, 5,35,195-16,250, 16,list_offs_text,0,\ + 16,16, 0xffffff,0xb0d0ff,0x10400040, 5,35,195-16,250, 16,list_offs_text,0,\ el_focus,w_scr_t1,0 align 4 @@ -1362,9 +1362,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_RU -capt db 'info 3ds 29.09.20',0 ; +capt db 'info 3ds 14.04.25',0 ; else ; Default to en_US -capt db 'info 3ds version 29.09.20',0 ;window caption +capt db 'info 3ds version 14.04.25',0 ;window caption end if align 16 diff --git a/programs/develop/info3ds/info3ds_u.asm b/programs/develop/info3ds/info3ds_u.asm index a9d47f951..29fdff4f5 100644 --- a/programs/develop/info3ds/info3ds_u.asm +++ b/programs/develop/info3ds/info3ds_u.asm @@ -1408,7 +1408,7 @@ buf_1: align 4 el_focus dd tree1 tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\ - 16,16, 0xffffff,0xb0d0ff,0x400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\ + 16,16, 0xffffff,0xb0d0ff,0x10400040, 5,47,195-16,250, 16,list_offs_text,0, el_focus,\ w_scr_t1,0 align 4 @@ -1427,9 +1427,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_RU -capt db 'info 3ds [user] 29.09.20',0 ; +capt db 'info 3ds [user] 14.04.25',0 ; else ; Default to en_US -capt db 'info 3ds [user] version 29.09.20',0 ; Window caption +capt db 'info 3ds [user] version 14.04.25',0 ; Window caption end if align 16 diff --git a/programs/develop/info3ds/info_o3d.inc b/programs/develop/info3ds/info_o3d.inc index a576398e6..eb7ac600d 100644 --- a/programs/develop/info3ds/info_o3d.inc +++ b/programs/develop/info3ds/info_o3d.inc @@ -812,9 +812,8 @@ proc draw_3d uses eax ebx ecx edi, o_data:dword @@: stdcall [glDisable],GL_LIGHTING .end_l: - stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale] - stdcall [glScalef], 1.0,1.0,0.7 ;correct for z + stdcall [glScalef], 1.0,1.0,1.4 ;correct for z stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/api.asm b/programs/develop/libraries/TinyGL/asm_fork/api.asm index 599a1ae40..17c1a731b 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/api.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/api.asm @@ -951,13 +951,12 @@ endl endp align 4 -proc glClearDepth uses eax, depth:dword +proc glClearDepth uses eax, depth:qword locals p rd 2 endl mov dword[p],OP_ClearDepth - mov eax,[depth] - fld qword[eax] + fld qword[depth] fstp dword[p+4] lea eax,[ebp-8] ;=sizeof(dd)*2 diff --git a/programs/develop/libraries/TinyGL/asm_fork/arrays.asm b/programs/develop/libraries/TinyGL/asm_fork/arrays.asm index 9c62a9f44..2257a725c 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/arrays.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/arrays.asm @@ -23,8 +23,7 @@ endl imul ecx,ebx shl ecx,2 add ecx,[eax+GLContext.color_array] ;ecx = &context.color_array[i] - mov ebx,ebp - sub ebx,20 ;=sizeof(dd)*5 + lea ebx,[ebp-20] ;=sizeof(dd)*5 mov edx,[ecx] mov [ebx+4],edx mov edx,[ecx+4] @@ -48,8 +47,7 @@ endl imul esi,ebx shl esi,2 add esi,[eax+GLContext.normal_array] ;esi = &normal_array[ebx * (3 + c->normal_array_stride)] - mov edi,eax - add edi,GLContext.current_normal + lea edi,[eax+GLContext.current_normal] mov ecx,3 rep movsd mov dword[edi],0.0 @@ -92,8 +90,7 @@ endl imul ecx,ebx shl ecx,2 add ecx,[eax+GLContext.vertex_array] ;ecx = &context.vertex_array[i] - mov ebx,ebp - sub ebx,20 ;=sizeof(dd)*5 + lea ebx,[ebp-20] ;=sizeof(dd)*5 mov edx,[ecx] mov [ebx+4],edx mov edx,[ecx+4] @@ -130,8 +127,7 @@ endl mov eax,[i] mov dword[p+4],eax - mov eax,ebp - sub eax,8 ;=sizeof(dd)*2 + lea eax,[ebp-8] ;=sizeof(dd)*2 stdcall gl_add_op,eax ret endp @@ -139,10 +135,9 @@ endp align 4 proc glopDrawArrays, context:dword, param:dword locals - vi dd ? idx dd ? states dd ? - size dd ? + a_size dd ? p rd 8 ;функция glopColor требует 8 параметров, другие функции требуют меньше, берем по максимуму что-бы не портить стек endl pushad @@ -155,132 +150,19 @@ pushad mov [idx],eax ;param[2].i mov eax,[ebx+4] mov [p+4],eax ;p[1].i = param[1].i - mov eax,ebp - sub eax,32 ;=sizeof(dd)*8 + lea eax,[ebp-32] ;=sizeof(dd)*8 stdcall glopBegin, edx,eax - mov dword[vi],0 + cmp ecx,1 + jl @f align 4 .cycle_0: ;for (int vi=0; vi],[Up],[Down] - rotate align 4 draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины +mov eax,house_3ds.end-house_3ds +cmp eax,HOUSE_FILE_SIZE +je @f + notify_window_run txt_error_file_size + ret +@@: call [glPushMatrix] ;масштаб и повороты - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0 @@ -152,17 +166,17 @@ call [glPushMatrix] ;рисование через индексный массив mov eax,house_3ds ;начало внедренного файла 3ds - add eax,0xeb ;смещение по которому идут координаты вершин (получено с использованием программы info_3ds) + add eax,VERTICES_OFFSET stdcall [glVertexPointer], 3, GL_FLOAT, 0, eax ;задаем массив для вершин, 3 - число координат для одной вершины stdcall [glEnableClientState], GL_VERTEX_ARRAY ;включаем режим рисования вершин - stdcall [glDrawElements], GL_TRIANGLES, 0x1a6*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices + stdcall [glDrawElements], GL_TRIANGLES, FACES_COUNT*3, GL_UNSIGNED_SHORT, Indices ;mode, count, type, *indices stdcall [glDisableClientState], GL_VERTEX_ARRAY ;отключаем режим рисования вершин call [glPopMatrix] ret align 4 -scale dd 0.0065 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз) +scale dd 0.07 ;начальный масштаб (в идеальном случае должен вычислятся, но для даного примера подобран в ручную на глаз) delt_sc dd 0.0005 angle_z dd 90.0 angle_y dd 90.0 @@ -172,8 +186,9 @@ delt_size dd 3.0 align 4 house_3ds: ;внедряем файл внутрь программы (в идеальном случае должен открыватся через окно диалога, но для облегчения примера вшит внутрь) file '../../../../../demos/view3ds/3ds_objects/House.3ds' +.end: align 4 -Indices rb 0x1a6*6 ;0x1a6 - число граней, на каждую грань по 3 точки, индекс точки 2 байта +Indices rb FACES_COUNT*6 ;на каждую грань по 3 точки, индекс точки 2 байта ;-------------------------------------------------- align 4 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu0.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu0.asm index 1ed52e9a4..89f4bd780 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu0.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu0.asm @@ -36,13 +36,13 @@ red_win: align 16 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -141,7 +141,6 @@ stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим б stdcall [glColor3f], 1.0, 1.0, 0.0 call [glPushMatrix] - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] stdcall [glRotatef], [angle_z],0.0,0.0,1.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu1.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu1.asm index 6e4f95bda..03b809621 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu1.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu1.asm @@ -60,6 +60,7 @@ load_libraries l_libs_start,l_libs_end stdcall [buf2d_convert_text_matrix], buf_1 load_image_file 'toolb_1.png', image_data_toolbar + call SetLight call draw_3d align 4 @@ -69,13 +70,13 @@ red_win: align 4 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -303,11 +304,7 @@ draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины call [glPushMatrix] - call SetLight - - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] - stdcall [glScalef], 1.0, 1.0, 0.5 stdcall [glColor3f], 1.0, 1.0, 0.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm index 1acdf9639..64d41205f 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm @@ -60,6 +60,7 @@ load_libraries l_libs_start,l_libs_end stdcall [buf2d_convert_text_matrix], buf_1 load_image_file 'toolb_1.png', image_data_toolbar + call SetLight call draw_3d align 4 @@ -69,13 +70,13 @@ red_win: align 4 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -296,9 +297,6 @@ draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины call [glPushMatrix] - call SetLight - - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] stdcall [glColor3f], 1.0, 1.0, 0.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm index 95c76f731..c0e498568 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm @@ -88,13 +88,13 @@ red_win: align 4 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -295,7 +295,6 @@ draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины call [glPushMatrix] - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] stdcall [glRotatef], [angle_z],0.0,0.0,1.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/textures1.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/textures1.asm index c928d11db..647f81680 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/textures1.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/textures1.asm @@ -88,13 +88,13 @@ red_win: align 4 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -297,9 +297,8 @@ draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины call [glPushMatrix] - stdcall [glTranslatef], 0.0,0.0,0.5 stdcall [glScalef], [scale], [scale], [scale] - stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении + stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/textures2.asm b/programs/develop/libraries/TinyGL/asm_fork/examples/textures2.asm index 678fc8c94..864a780a1 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/textures2.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/textures2.asm @@ -89,13 +89,13 @@ red_win: align 4 still: mcall SF_WAIT_EVENT - cmp al,1 - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - jmp still + cmp al,EV_REDRAW + jz red_win + cmp al,EV_KEY + jz key + cmp al,EV_BUTTON + jz button + jmp still align 4 draw_window: @@ -268,8 +268,9 @@ draw_3d: stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины call [glPushMatrix] + stdcall [glTranslatef], 0.0,0.0,-1.0 ;двигаем сферу на себя, что-бы отсечь переднюю часть stdcall [glScalef], [scale], [scale], [scale] - stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении + stdcall [glScalef], 1.0, 1.0, 0.2 ;прижимаем сферу, что-бы сразу не вылазила при увеличении stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_x],1.0,0.0,0.0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/light.asm b/programs/develop/libraries/TinyGL/asm_fork/light.asm index 469b1ae94..7d1bc2d75 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/light.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/light.asm @@ -185,7 +185,7 @@ align 4 cmp ecx,GL_SPOT_EXPONENT jne @f mov ecx,[ebx+12] - mov [edi+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3] + mov [edx+GLLight.spot_exponent],ecx ;l.spot_exponent=p[3] jmp .end_f align 4 @@: @@ -193,7 +193,7 @@ align 4 jne .end_spot_c fld dword[ebp+12] ;float a=v.v[0] ; assert(a == 180 || (a>=0 && a<=90)); - fst dword[edi+GLLight.spot_cutoff] ;l.spot_cutoff=a + fst dword[edx+GLLight.spot_cutoff] ;l.spot_cutoff=a fcom dword[an180f] ;if (a != 180) fstsw ax sahf @@ -202,7 +202,7 @@ align 4 fmulp fdiv dword[an180f] fcos - fstp dword[edi+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0) + fstp dword[edx+GLLight.cos_spot_cutoff] ;l.cos_spot_cutoff=cos(a * M_PI / 180.0) jmp .end_f @@: ffree st0 @@ -213,21 +213,21 @@ align 4 cmp ecx,GL_CONSTANT_ATTENUATION jne @f mov ecx,[ebx+12] - mov [edi+GLLight.attenuation],ecx ;l->attenuation[0]=p[3] + mov [edx+GLLight.attenuation],ecx ;l->attenuation[0]=p[3] jmp .end_f align 4 @@: cmp ecx,GL_LINEAR_ATTENUATION jne @f mov ecx,[ebx+12] - mov [edi+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3] + mov [edx+GLLight.attenuation+4],ecx ;l->attenuation[1]=p[3] jmp .end_f align 4 @@: cmp ecx,GL_QUADRATIC_ATTENUATION jne @f mov ecx,[ebx+12] - mov [edi+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3] + mov [edx+GLLight.attenuation+8],ecx ;l->attenuation[2]=p[3] jmp .end_f align 4 @@: ;default: @@ -363,15 +363,14 @@ fl_1e_3 dd 1.0e-3 align 16 proc gl_shade_vertex, context:dword, v:dword locals - R dd ? ;float ebp-96 - G dd ? ;float ebp-92 - B dd ? ;float ebp-88 - A dd ? ;float ebp-84 - s V3 ;ebp-80 - d V3 ;ebp-68 - tmp dd ? ;float ebp-56 - att dd ? ;float ebp-52 - dot_spot dd ? ;float ebp-48 + R dd ? ;float ebp-92 + G dd ? ;float ebp-88 + B dd ? ;float ebp-84 + A dd ? ;float ebp-80 + s V3 ;ebp-76 + d V3 ;ebp-64 + tmp dd ? ;float ebp-52 + att dd ? ;float ebp-48 lR dd ? ;float ebp-44 lB dd ? ;float ebp-40 lG dd ? ;float ebp-36 @@ -563,7 +562,6 @@ align 4 fmul dword[d+offs_Z] faddp fchs - fst dword[dot_spot] cmp dword[twoside],0 ;if (twoside && dot_spot < 0) je @f ftst ;if (dot_spot<0) diff --git a/programs/develop/libraries/TinyGL/asm_fork/list.asm b/programs/develop/libraries/TinyGL/asm_fork/list.asm index cafaf4c48..ac6a76104 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/list.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/list.asm @@ -197,21 +197,24 @@ push edi esi add ebx,4 inc esi - cmp byte[esi],'f' + cmp byte[esi],'f' ;float jne @f fld dword[ebx] fstp qword[Data_Double] call DoubleFloat_to_String stdcall str_cat, edi,Data_String @@: - cmp byte[esi],'d' - jne @f + cmp byte[esi],'C' ;const + je @f + cmp byte[esi],'d' ;integer + je @f + jmp .no_param + @@: stdcall str_len,edi add edi,eax sub ecx,eax mov eax,dword[ebx] stdcall convert_int_to_str,ecx - @@: .no_param: inc esi cmp byte[esi],0 diff --git a/programs/develop/libraries/TinyGL/asm_fork/vertex.asm b/programs/develop/libraries/TinyGL/asm_fork/vertex.asm index 02ff3f3b4..cbd4ae2cc 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/vertex.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/vertex.asm @@ -134,7 +134,7 @@ endl cmp dword[edx+GLContext.lighting_enabled],0 ;if(context.lighting_enabled) jne .if_0 - cmp dword[eax+GLContext.texture_2d_enabled],0 + cmp dword[edx+GLContext.texture_2d_enabled],0 jne .if_0 jmp @f align 4 diff --git a/programs/develop/libraries/TinyGL/asm_fork/zline.asm b/programs/develop/libraries/TinyGL/asm_fork/zline.asm index 264ec53d1..05538dc7e 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/zline.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/zline.asm @@ -17,7 +17,7 @@ proc ZB_plot uses eax ebx ecx edx edi, zb:dword, p:dword mov edi,[ebx+ZBufferPoint.z] shr edi,ZB_POINT_Z_FRAC_BITS cmp di,word[ecx] - jl .end_f + jb .end_f if TGL_FEATURE_RENDER_BITS eq 24 mov eax,[ebx+ZBufferPoint.r] mov byte[edx],ah diff --git a/programs/develop/libraries/TinyGL/asm_fork/zline.inc b/programs/develop/libraries/TinyGL/asm_fork/zline.inc index 3bf0fb51d..b3232d350 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/zline.inc +++ b/programs/develop/libraries/TinyGL/asm_fork/zline.inc @@ -101,7 +101,7 @@ local .end_0 mov [zz],eax mov ebx,[pz] cmp ax,word[ebx] - jl .end_0 + jb .end_0 RGBPIXEL mov eax,dword[zz] mov ebx,[pz] diff --git a/programs/develop/libraries/TinyGL/asm_fork/zline_r.inc b/programs/develop/libraries/TinyGL/asm_fork/zline_r.inc index 62c881cd1..d41717539 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/zline_r.inc +++ b/programs/develop/libraries/TinyGL/asm_fork/zline_r.inc @@ -102,7 +102,7 @@ local .end_0 mov [zz],eax mov ebx,[pz] cmp ax,word[ebx] - jl .end_0 + jb .end_0 RGBPIXEL mov eax,dword[zz] mov ebx,[pz] diff --git a/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm index 83a562d30..ce8b43c05 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm @@ -58,7 +58,7 @@ end if mov eax,[z] shr eax,ZB_POINT_Z_FRAC_BITS cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) - jl .end_0 + jb .end_0 ;edi = pp mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение if TGL_FEATURE_RENDER_BITS eq 24 @@ -103,7 +103,7 @@ local .end_0 mov eax,[z] shr eax,ZB_POINT_Z_FRAC_BITS cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) - jl .end_0 + jb .end_0 ;edi = pp mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение if TGL_FEATURE_RENDER_BITS eq 24 @@ -171,7 +171,7 @@ local .end_0 mov eax,[z] shr eax,ZB_POINT_Z_FRAC_BITS cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) - jl .end_0 + jb .end_0 ;edi = pp mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение if TGL_FEATURE_RENDER_BITS eq 24 @@ -251,7 +251,7 @@ local .end_0 mov eax,[z] shr eax,ZB_POINT_Z_FRAC_BITS cmp ax,word[esi+2*_a] ;if (zz >= pz[_a]) - jl .end_0 + jb .end_0 ;edi = pp mov word[esi+2*_a],ax ;пишем в буфер глубины новое значение if TGL_FEATURE_RENDER_BITS eq 24 diff --git a/programs/media/voxel_editor/utilites/vox_tgl.asm b/programs/media/voxel_editor/utilites/vox_tgl.asm index e5608bdad..b9d4785e9 100644 --- a/programs/media/voxel_editor/utilites/vox_tgl.asm +++ b/programs/media/voxel_editor/utilites/vox_tgl.asm @@ -16,9 +16,9 @@ include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US. @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load if lang eq ru_RU -caption db 'ᬮ ᥫ 11.11.20',0 ; +caption db 'ᬮ ᥫ 14.04.25',0 ; else ; Default to en_US -caption db 'Voxel viewer 11.11.20',0 +caption db 'Voxel viewer 14.04.25',0 end if 3d_wnd_l equ 5 ; tinygl ᫥ @@ -750,12 +750,8 @@ draw_3d: 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 [glScalef], 1.0, 1.0, 0.25 ;- ꥪ 뫠 ࠭ 祭 + stdcall [glScalef], 1.0, 1.0, 0.5 ;- ꥪ 뫠 ࠭ 祭 stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glRotatef], [angle_y],0.0,1.0,0.0 stdcall [glRotatef], [angle_z],0.0,0.0,1.0