From 3a7404eddd506a07ff18a35a79f1e5b6fbe4e179 Mon Sep 17 00:00:00 2001 From: IgorA Date: Fri, 5 Feb 2016 16:58:30 +0000 Subject: [PATCH] fix in 'gluSphere', new textures example git-svn-id: svn://kolibrios.org@6143 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../TinyGL/asm_fork/examples/build.bat | 3 + .../TinyGL/asm_fork/examples/text_2.png | Bin 0 -> 70794 bytes .../TinyGL/asm_fork/examples/textures1.asm | 532 ++++++++++++++++++ .../develop/libraries/TinyGL/asm_fork/glu.asm | 59 +- 4 files changed, 572 insertions(+), 22 deletions(-) create mode 100644 programs/develop/libraries/TinyGL/asm_fork/examples/text_2.png create mode 100644 programs/develop/libraries/TinyGL/asm_fork/examples/textures1.asm diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/build.bat b/programs/develop/libraries/TinyGL/asm_fork/examples/build.bat index f837923d4f..e1207e6f28 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/examples/build.bat +++ b/programs/develop/libraries/TinyGL/asm_fork/examples/build.bat @@ -1,5 +1,6 @@ if not exist bin mkdir bin if not exist bin\text_1.png @copy text_1.png bin\text_1.png +if not exist bin\text_2.png @copy text_2.png bin\text_2.png if not exist bin\toolb_1.png @copy toolb_1.png bin\toolb_1.png if not exist bin\font8x9.bmp @copy ..\..\..\..\..\fs\kfar\trunk\font8x9.bmp bin\font8x9.bmp if not exist bin\tinygl.obj @fasm.exe -m 16384 ..\tinygl.asm bin\tinygl.obj @@ -18,6 +19,7 @@ if not exist bin\tinygl.obj @fasm.exe -m 16384 ..\tinygl.asm bin\tinygl.obj @fasm.exe -m 16384 gears.asm bin\gears.kex @fasm.exe -m 16384 textures0.asm bin\textures0.kex +@fasm.exe -m 16384 textures1.asm bin\textures1.kex @kpack bin\test0.kex @@ -34,5 +36,6 @@ if not exist bin\tinygl.obj @fasm.exe -m 16384 ..\tinygl.asm bin\tinygl.obj @kpack bin\gears.kex @kpack bin\textures0.kex +@kpack bin\textures1.kex pause \ No newline at end of file diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/text_2.png b/programs/develop/libraries/TinyGL/asm_fork/examples/text_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ef767def9ad461f9076050d97210c76d0d5439 GIT binary patch literal 70794 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 TinyGLContext.GLContext + mov eax,[eax] ;eax -> ZBuffer + mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf + mov dword[buf_ogl],eax + + load_image_file 'font8x9.bmp', image_data_toolbar,IMAGE_FILE1_SIZE + stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер + 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 + + load_image_file 'text_2.png', texture, (256*256*3+54) ;открытие файла текстуры + + ;* Setup texturing * + stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL + + ;* generate texture object IDs * + stdcall [glGenTextures], 1, TexObj + stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj] + stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, [texture] + + stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST + stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST + stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT + stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT + stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj] + stdcall [glEnable], GL_TEXTURE_2D + + call draw_3d + +align 4 +red_win: + call draw_window + +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 + +align 4 +draw_window: + pushad + 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,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;земля 1 + mcall ,(36 shl 16)+19,,4+0x40000000 ;земля 2 + + mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;земля 1 + ;add ebx,2*IMAGE_TOOLBAR_ICON_SIZE + mcall ,,,(35 shl 16)+5 ;земля 2 + + stdcall [kosglSwapBuffers] + mcall SF_REDRAW,SSF_END_DRAW + popad + ret + +align 4 +key: + mcall SF_GET_KEY + + cmp ah,27 ;Esc + je button.exit + + cmp ah,61 ;+ + jne @f + finit + fld dword[scale] + fadd dword[delt_sc] + fst dword[scale] + mov word[NumberSymbolsAD],3 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_scale.v],0 + stdcall str_cat, txt_scale.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,45 ;- + jne @f + finit + fld dword[scale] + fsub dword[delt_sc] + fst dword[scale] + mov word[NumberSymbolsAD],3 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_scale.v],0 + stdcall str_cat, txt_scale.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,176 ;Left + jne @f + finit + fld dword[angle_y] + fadd dword[delt_size] + fst dword[angle_y] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_y.v],0 + stdcall str_cat, txt_angle_y.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,179 ;Right + jne @f + finit + fld dword[angle_y] + fsub dword[delt_size] + fst dword[angle_y] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_y.v],0 + stdcall str_cat, txt_angle_y.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,178 ;Up + jne @f + finit + fld dword[angle_x] + fadd dword[delt_size] + fst dword[angle_x] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_x.v],0 + stdcall str_cat, txt_angle_x.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,177 ;Down + jne @f + finit + fld dword[angle_x] + fsub dword[delt_size] + fst dword[angle_x] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_x.v],0 + stdcall str_cat, txt_angle_x.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + cmp ah,3 + jne @f + call but_dr_0 + jmp still + @@: + cmp ah,4 + jne @f + call but_dr_1 + jmp still + @@: + cmp ah,1 + jne still +.exit: + stdcall [gluDeleteQuadric], [qObj] + stdcall mem.Free,[image_data_toolbar] + mcall SF_TERMINATE_PROCESS + +align 4 +but_dr_0: + mov dword[dr_figure],0 + call draw_3d + stdcall [kosglSwapBuffers] + ret + +align 4 +but_dr_1: + mov dword[dr_figure],1 + call draw_3d + stdcall [kosglSwapBuffers] + ret + +align 4 +caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0 +align 4 +ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext +;sizeof.TinyGLContext = 28 + +align 4 +draw_3d: +stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины + +stdcall [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 + stdcall [glRotatef], [angle_x],1.0,0.0,0.0 + +cmp dword[dr_figure],0 +jne @f + ; рисование земли + stdcall [gluSphere], [qObj], 1.0, 16,16 +@@: +cmp dword[dr_figure],1 +jne @f + ; рисование земли + stdcall [gluSphere], [qObj], 1.0, 64,64 +@@: +stdcall [glPopMatrix] + + stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00 + stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,15,0xffff00 + stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00 + ret + +dr_figure dd 0 +qObj dd 0 +TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.) +texture dd 0 ;указатель на память с текстурой + +scale dd 0.5 +delt_sc dd 0.05 +angle_z dd 0.0 +angle_x dd 90.0 +angle_y dd 225.0 +delt_size dd 3.0 + +;-------------------------------------------------- +align 4 +import_lib_tinygl: + +macro E_LIB n +{ + n dd sz_#n +} +include '../export.inc' + dd 0,0 +macro E_LIB n +{ + sz_#n db `n,0 +} +include '../export.inc' + +align 4 +import_buf2d: + dd sz_init0 + 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_resize dd sz_buf2d_resize + 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_init0 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_resize db 'buf2d_resize',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_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 + +;-------------------------------------------------- +system_dir_0 db '/sys/lib/' +lib_name_0 db 'tinygl.obj',0 +system_dir_1 db '/sys/lib/' +lib_name_1 db 'buf2d.obj',0 +system_dir_2 db '/sys/lib/' +lib_name_2 db 'libimg.obj',0 +err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,0 +err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,0 +err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,0 +head_f_i: +head_f_l db 'System error',0 +err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,0 +err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,0 +err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,0 +;-------------------------------------------------- + +txt_scale: +db 'Scale: ' +.v: +db 0 +rb 10 + +txt_angle_z: +db 'Rotate z: ' +.v: +db 0 +rb 10 + +txt_angle_x: +db 'Rotate x: ' +.v: +db 0 +rb 10 + +txt_angle_y: +db 'Rotate y: ' +.v: +db 0 +rb 10 + +align 4 +buf_ogl: + dd 0 ;указатель на буфер изображения + dw 10,10 ;+4 left,top +.w: dd 400 +.h: dd 350 + dd 0,24 ;+16 color,bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 25,25 ;+4 left,top + dd 128,144 ;+8 w,h + dd 0,24 ;+16 color,bit in pixel + +align 4 +l_libs_start: + lib_0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\ + err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i + lib_1 l_libs lib_name_1, cur_dir_path, library_path, system_dir_1,\ + err_msg_found_lib_1, head_f_l, import_buf2d, err_msg_import_1,head_f_i + lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\ + err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i +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: + cur_dir_path rb 4096 + library_path rb 4096 + file_name rb 4096 +mem: diff --git a/programs/develop/libraries/TinyGL/asm_fork/glu.asm b/programs/develop/libraries/TinyGL/asm_fork/glu.asm index 65db5e4e97..82521f3e9e 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/glu.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/glu.asm @@ -30,7 +30,7 @@ offs_qobj_ErrorFunc equ 16 ;{ ;} -align 4 +align 16 gluNewQuadric: stdcall gl_malloc, sizeof.GLUquadricObj or eax,eax @@ -43,7 +43,7 @@ gluNewQuadric: @@: ret -align 4 +align 16 proc gluDeleteQuadric, state:dword cmp dword[state],0 je @f @@ -56,7 +56,7 @@ endp ; Set the drawing style to be GLU_FILL, GLU_LINE, GLU_SILHOUETTE, ; or GLU_POINT. ; -align 4 +align 16 proc gluQuadricDrawStyle uses eax ebx, qobj:dword, drawStyle:dword mov eax,[qobj] or eax,eax @@ -71,9 +71,11 @@ proc gluQuadricDrawStyle uses eax ebx, qobj:dword, drawStyle:dword cmp ebx,GLU_POINT je @f jmp .err_q +align 4 @@: mov dword[eax+offs_qobj_DrawStyle],ebx jmp @f +align 4 .err_q: stdcall dbg_print,sz_gluQuadricDrawStyle,err_9 @@: @@ -83,7 +85,7 @@ endp ; ; Set the orientation to GLU_INSIDE or GLU_OUTSIDE. ; -align 4 +align 16 proc gluQuadricOrientation uses eax ebx, qobj:dword, orientation:dword mov eax,[qobj] or eax,eax @@ -94,16 +96,18 @@ proc gluQuadricOrientation uses eax ebx, qobj:dword, orientation:dword cmp ebx,GLU_OUTSIDE je @f jmp .err_q +align 4 @@: mov dword[eax+offs_qobj_Orientation],ebx jmp @f +align 4 .err_q: stdcall dbg_print,sz_gluQuadricOrientation,err_9 @@: ret endp -align 4 +align 16 proc gluQuadricTexture uses eax ebx, qobj:dword, texture:dword mov eax,[qobj] or eax,eax @@ -116,6 +120,7 @@ proc gluQuadricTexture uses eax ebx, qobj:dword, texture:dword @@: mov dword[eax+offs_qobj_TextureFlag],ebx jmp @f +align 4 .err_q: stdcall dbg_print,sz_gluQuadricTexture,err_9 @@: @@ -138,7 +143,7 @@ endp ;input: ; float radius, int slices, int stacks -align 4 +align 16 proc gluSphere qobj:dword, radius:dword, slices:dword, stacks:dword locals rho dd ? ;float @@ -165,6 +170,7 @@ pushad jne .els_0 mov dword[normals],GL_FALSE jmp @f +align 4 .els_0: mov dword[normals],GL_TRUE @@: @@ -172,6 +178,7 @@ pushad jne .els_1 mov dword[nsign],-1.0 jmp @f +align 4 .els_1: mov dword[nsign],1.0 @@: @@ -198,7 +205,7 @@ pushad @@: cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) je @f - stdcall glTexCoord2f, 0.5,0.0 + stdcall glTexCoord2f, 0.5,1.0 @@: sub esp,4 fld dword[nsign] @@ -221,6 +228,7 @@ align 4 fild dword[j] fmul dword[dtheta] jmp .t0_end +align 4 @@: fldz .t0_end: @@ -262,6 +270,7 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius inc dword[j] jmp .cycle_0 +align 4 .cycle_0_end: call glEnd @@ -278,6 +287,7 @@ align 4 mov dword[i],0 mov [imax],ebx jmp @f +align 4 .els_2: mov dword[i],1 dec ebx @@ -306,6 +316,7 @@ align 4 fild dword[j] fmul dword[dtheta] jmp .t1_end +align 4 @@: fldz .t1_end: @@ -339,11 +350,7 @@ align 4 @@: cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) je @f - fld1 - fsub dword[t] - fstp dword[esp-4] - sub esp,4 - stdcall glTexCoord2f, [s] ;,1-t + stdcall glTexCoord2f, [s],[t] @@: fld dword[radius] fld dword[z] @@ -391,12 +398,11 @@ align 4 @@: cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) je @f - fld1 - fsub dword[t] - fadd dword[d_t] + fld dword[t] + fsub dword[d_t] fstp dword[esp-4] sub esp,4 - stdcall glTexCoord2f, [s] ;,1-(t-dt) + stdcall glTexCoord2f, [s] ;,t-dt fld dword[s] fadd dword[d_s] fstp dword[s] @@ -415,6 +421,7 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius inc dword[j] jmp .cycle_2 +align 4 .cycle_2_end: call glEnd fld dword[t] @@ -422,6 +429,7 @@ align 4 fstp dword[t] inc dword[i] jmp .cycle_1 +align 4 .cycle_1_end: ; draw -Z end as a triangle fan @@ -432,7 +440,7 @@ align 4 @@: cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) je @f - stdcall glTexCoord2f, 0.5,1.0 + stdcall glTexCoord2f, 0.5,0.0 mov dword[s],1.0 mov ebx,[d_t] mov [t],ebx @@ -460,6 +468,7 @@ align 4 fild dword[j] fmul dword[dtheta] jmp .t2_end +align 4 @@: fldz .t2_end: @@ -491,11 +500,7 @@ align 4 @@: cmp dword[eax+offs_qobj_TextureFlag],0 ;if (qobj.TextureFlag) je @f - fld1 - fsub dword[t] - fstp dword[esp-4] - sub esp,4 - stdcall glTexCoord2f, [s] ;,1-t + stdcall glTexCoord2f, [s],[t] fld dword[s] fsub dword[d_s] fstp dword[s] @@ -514,16 +519,19 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius dec dword[j] jmp .cycle_3 +align 4 .cycle_3_end: call glEnd jmp .end_f +align 4 .if_glu_line: cmp dword[eax+offs_qobj_DrawStyle],GLU_LINE ;if (qobj.DrawStyle==GLU_LINE) je @f cmp dword[eax+offs_qobj_DrawStyle],GLU_SILHOUETTE ;if (qobj.DrawStyle==GLU_SILHOUETTE) je @f jmp .if_glu_point +align 4 @@: ; draw stack lines @@ -590,10 +598,12 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius inc dword[j] jmp .cycle_5 +align 4 .cycle_5_end: call glEnd inc dword[i] jmp .cycle_4 +align 4 .cycle_4_end: ; draw slice lines @@ -655,13 +665,16 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius inc dword[i] jmp .cycle_7 +align 4 .cycle_7_end: call glEnd inc dword[j] jmp .cycle_6 +align 4 .cycle_6_end: jmp .end_f +align 4 .if_glu_point: cmp dword[eax+offs_qobj_DrawStyle],GLU_POINT ;if (qobj.DrawStyle==GLU_POINT) jne .end_f @@ -749,9 +762,11 @@ align 4 call glVertex3f ;x*radius, y*radius, z*radius inc dword[j] jmp .cycle_9 +align 4 .cycle_9_end: inc dword[i] jmp .cycle_8 +align 4 .cycle_8_end: call glEnd