From 2cff28512def46a498b749a16fc3831b136a17e8 Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 26 Jan 2016 14:06:34 +0000 Subject: [PATCH] fix specbuf.asm, add fill styles in example quadric objects git-svn-id: svn://kolibrios.org@6100 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../TinyGL/asm_fork/examples/test_glu2.asm | 83 ++++++++++++++---- .../TinyGL/asm_fork/examples/toolb_1.png | Bin 0 -> 374 bytes .../libraries/TinyGL/asm_fork/specbuf.asm | 15 ++-- 3 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 programs/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png 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 e94a83c044..ee235b4ca0 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/test_glu2.asm @@ -7,6 +7,7 @@ use32 include '../../../../../proc32.inc' include '../../../../../macros.inc' +include '../../../../../KOSfuncs.inc' include '../../../../../develop/libraries/box_lib/load_lib.mac' include '../../../../../dll.inc' include '../opengl_const.inc' @@ -27,6 +28,8 @@ ends image_data dd 0 ;указатель на временную память, нужен для преобразования изображения image_data_toolbar dd 0 IMAGE_FILE1_SIZE equ 128*144*3+54 ;размер файла с изображением +IMAGE_TOOLBAR_ICON_SIZE equ 256*3 +IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*3+54 macro load_image_file path,buf,size { ;макрос для загрузки изображений ;path - может быть переменной или строковым параметром @@ -43,14 +46,14 @@ macro load_image_file path,buf,size { ;макрос для загрузки из end if 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 @@ -73,15 +76,16 @@ load_libraries l_libs_start,l_libs_end .test_lib_open: cmp dword [ebp+ll_struc_size-4],0 jz @f - mcall -1 ;exit not correct + mcall SF_TERMINATE_PROCESS @@: add ebp,ll_struc_size cmp ebp,l_libs_end jl .test_lib_open - mcall 40,0x27 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.sys_colors_new + mcall SF_SET_EVENTS_MASK,0x27 - stdcall [kosglMakeCurrent], 10,10,[buf_ogl.w],[buf_ogl.h],ctx1 + stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1 stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [gluNewQuadric] @@ -100,6 +104,8 @@ load_libraries l_libs_start,l_libs_end stdcall mem.Free,[image_data_toolbar] ;освобождаем память stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит stdcall [buf2d_convert_text_matrix], buf_1 + + load_image_file 'toolb_1.png', image_data_toolbar,IMAGE_TOOLBAR_SIZE call draw_3d align 4 @@ -108,7 +114,7 @@ red_win: align 4 still: - mcall 10 + mcall SF_WAIT_EVENT cmp al,1 jz red_win cmp al,2 @@ -120,19 +126,28 @@ still: align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW + mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption + + mov esi,[sc.work_button] + mcall SF_DEFINE_BUTTON,(5 shl 16)+20,(5 shl 16)+20,3 ;вершины вкл. + mcall ,(30 shl 16)+20,,4 ;каркасные грани вкл. + mcall ,(55 shl 16)+20,,5 ;сплошные грани вкл. + + mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;вершины вкл. + add ebx,IMAGE_TOOLBAR_ICON_SIZE + mcall ,,,(32 shl 16)+7 ;каркасные грани вкл. + add ebx,IMAGE_TOOLBAR_ICON_SIZE + mcall ,,,(57 shl 16)+7 ;сплошные грани вкл. - mov edx,0x33ffffff ;0x73ffffff - mcall 0,(50 shl 16)+430,(30 shl 16)+400,,,caption stdcall [kosglSwapBuffers] - - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad ret align 4 key: - mcall 2 + mcall SF_GET_KEY cmp ah,27 ;Esc je button.exit @@ -226,13 +241,49 @@ key: align 4 button: - mcall 17 + mcall SF_GET_BUTTON + cmp ah,3 + jne @f + call but_st_point + jmp still + @@: + cmp ah,4 + jne @f + call but_st_line + jmp still + @@: + cmp ah,5 + jne @f + call but_st_face + jmp still + @@: cmp ah,1 jne still .exit: stdcall [gluDeleteQuadric], [qObj] - ;stdcall mem.Free,[image_data_toolbar] - mcall -1 + stdcall mem.Free,[image_data_toolbar] + mcall SF_TERMINATE_PROCESS + +align 4 +but_st_point: + stdcall [gluQuadricDrawStyle], [qObj],GLU_POINT + call draw_3d + stdcall [kosglSwapBuffers] + ret + +align 4 +but_st_line: + stdcall [gluQuadricDrawStyle], [qObj],GLU_LINE + call draw_3d + stdcall [kosglSwapBuffers] + ret + +align 4 +but_st_face: + stdcall [gluQuadricDrawStyle], [qObj],GLU_FILL + call draw_3d + stdcall [kosglSwapBuffers] + ret align 4 @@ -484,6 +535,8 @@ l_libs_end: align 4 i_end: run_file_70 FileInfoBlock + sc system_colors + rb sizeof.sys_colors_new-sizeof.system_colors align 16 rb 4096 stacktop: diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png b/programs/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d290fc0ceb0fb92845463a102a11a624df71b3b7 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ!2~3y+vWmE29|V3Uq=Rpjs4tz5?O(K&H|6f zVg?4jLmR;q8u&1$FcU^1;_gxQBuRqz3RNg)@bQIv0 zPn_{2S#D`_?#fLY4t?Har^DUQFiA%H!OL88HV%!Got*b(ZJZ|XdDg~-n_FGHo%RXr z;VoFxu)M~_&&Px3?0P}COr7S6lT#L`EZ2R*-nQYIsLz{>Jh>mNlNEh6GJdI>q*pK0 zY&83Pv8kzhbtg;j#d`rpY85}T559BxXMg4R!^b8}UzJvDWwF`2%5udy)=b`o`o2!# z!d$bmu4*%8AN^WuJeg|;gRHK`jtOi{*-u|INqHS((VywGGS0Wd%*SWu7G9wL89ZJ6 KT-G@yGywq4H;i`x literal 0 HcmV?d00001 diff --git a/programs/develop/libraries/TinyGL/asm_fork/specbuf.asm b/programs/develop/libraries/TinyGL/asm_fork/specbuf.asm index a3007a54f7..9f3338e2b2 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/specbuf.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/specbuf.asm @@ -1,3 +1,6 @@ +; +; функции для вычисления зеркального цвета (блики) +; align 4 proc calc_buf uses ebx ecx, buf:dword, shininess:dword @@ -18,8 +21,8 @@ align 4 cmp ecx,SPECULAR_BUFFER_SIZE jg @f ;Вычисляем x^y - fld dword[shininess] - fld dword[val] + fld dword[val] ;сначала берем y + fld dword[shininess] ;а потом x fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x): ;Теперь считаем 2**z: fld st0 ;Создаем еще одну копию z @@ -80,12 +83,14 @@ endl cmp dword[oldest],0 ;if (oldest == NULL || context.specbuf_num_buffers < MAX_SPECULAR_BUFFERS) je @f cmp dword[edx+offs_cont_specbuf_num_buffers],MAX_SPECULAR_BUFFERS - jl @f - jmp .end_1 + jge .end_1 @@: ; create new buffer stdcall gl_malloc, sizeof.GLSpecBuf -;if (!eax) gl_fatal_error("could not allocate specular buffer") + or eax,eax + jnz @f +;gl_fatal_error("could not allocate specular buffer") + @@: inc dword[edx+offs_cont_specbuf_num_buffers] mov ecx,[edx+offs_cont_specbuf_first] mov [eax+offs_spec_next],ecx