From 23302af49d97b303b6fc526861f3e8949924cb5b Mon Sep 17 00:00:00 2001 From: IgorA Date: Sat, 30 Jan 2016 20:09:01 +0000 Subject: [PATCH] fix in textures, add example git-svn-id: svn://kolibrios.org@6113 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../TinyGL/asm_fork/examples/text_1.png | Bin 0 -> 72686 bytes .../TinyGL/asm_fork/examples/textures0.asm | 624 ++++++++++++++++++ .../libraries/TinyGL/asm_fork/ztriangle.asm | 31 +- .../libraries/TinyGL/asm_fork/ztriangle.inc | 27 +- 4 files changed, 642 insertions(+), 40 deletions(-) create mode 100644 programs/develop/libraries/TinyGL/asm_fork/examples/text_1.png create mode 100644 programs/develop/libraries/TinyGL/asm_fork/examples/textures0.asm diff --git a/programs/develop/libraries/TinyGL/asm_fork/examples/text_1.png b/programs/develop/libraries/TinyGL/asm_fork/examples/text_1.png new file mode 100644 index 0000000000000000000000000000000000000000..72e1256d651804e6b4261887cfd244c7d52c8799 GIT binary patch literal 72686 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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_1.png', texture, (256*256*3+54) ;открытие файла текстуры + + ;* Setup texturing * + stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL + stdcall [glHint], GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST + + ;* 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,(5 shl 16)+20,(5 shl 16)+20,3 ;сферы + mcall ,(30 shl 16)+20,,4 ;куб + + mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;сферы + add ebx,2*IMAGE_TOOLBAR_ICON_SIZE + mcall ,,,(32 shl 16)+7 ;куб + + 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,178 ;Up + 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,177 ;Down + 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,176 ;Left + jne @f + finit + fld dword[angle_z] + fadd dword[delt_size] + fst dword[angle_z] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_z.v],0 + stdcall str_cat, txt_angle_z.v,Data_String + call draw_3d + stdcall [kosglSwapBuffers] + @@: + cmp ah,179 ;Right + jne @f + finit + fld dword[angle_z] + fsub dword[delt_size] + fst dword[angle_z] + mov word[NumberSymbolsAD],2 + fstp qword[Data_Double] + call DoubleFloat_to_String + mov byte[txt_angle_z.v],0 + stdcall str_cat, txt_angle_z.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] + call SetLight + + 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 + +cmp dword[dr_figure],0 +jne @f + ; рисование сфер + stdcall [glColor3f], 1.0, 1.0, 0.0 + stdcall [gluSphere], [qObj], 1.0, 32,32 + + stdcall [glColor3f], 1.0, 0.0, 0.0 + stdcall [glTranslatef], -1.6,0.0,0.0 + stdcall [gluSphere], [qObj], 0.55, 16,16 + + stdcall [glColor3f], 0.0, 0.0, 1.0 + stdcall [glTranslatef], 3.2,0.0,0.0 + stdcall [gluSphere], [qObj], 0.55, 16,16 +@@: +cmp dword[dr_figure],1 +jne @f + ; рисование граней куба + stdcall [glBegin],GL_QUADS + +; Передняя грань + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], -1.0f, -1.0f, 1.0f ; Низ лево + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], 1.0f, -1.0f, 1.0f ; Низ право + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], 1.0f, 1.0f, 1.0f ; Верх право + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], -1.0f, 1.0f, 1.0f ; Верх лево + +; Задняя грань + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Низ право + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], -1.0f, 1.0f, -1.0f ; Верх право + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], 1.0f, 1.0f, -1.0f ; Верх лево + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], 1.0f, -1.0f, -1.0f ; Низ лево + +; Верхняя грань + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], -1.0f, 1.0f, -1.0f ; Верх лево + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], -1.0f, 1.0f, 1.0f ; Низ лево + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], 1.0f, 1.0f, 1.0f ; Низ право + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], 1.0f, 1.0f, -1.0f ; Верх право + +; Нижняя грань + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Верх право + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], 1.0f, -1.0f, -1.0f ; Верх лево + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], 1.0f, -1.0f, 1.0f ; Низ лево + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], -1.0f, -1.0f, 1.0f ; Низ право + +; Правая грань + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], 1.0f, -1.0f, -1.0f ; Низ право + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], 1.0f, 1.0f, -1.0f ; Верх право + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], 1.0f, 1.0f, 1.0f ; Верх лево + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], 1.0f, -1.0f, 1.0f ; Низ лево + +; Левая грань + stdcall [glTexCoord2f], 0.0f, 0.0f + stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Низ лево + stdcall [glTexCoord2f], 1.0f, 0.0f + stdcall [glVertex3f], -1.0f, -1.0f, 1.0f ; Низ право + stdcall [glTexCoord2f], 1.0f, 1.0f + stdcall [glVertex3f], -1.0f, 1.0f, 1.0f ; Верх право + stdcall [glTexCoord2f], 0.0f, 1.0f + stdcall [glVertex3f], -1.0f, 1.0f, -1.0f ; Верх лево + + stdcall [glEnd] +@@: +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_z,5,15,0xffff00 + stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00 + ret + +align 4 +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 +ret + +dr_figure dd 0 +qObj dd 0 +TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.) +texture dd 0 ;указатель на память с текстурой + +scale dd 0.4 +delt_sc dd 0.05 +angle_z dd 0.0 +angle_y dd 0.0 +delt_size dd 3.0 + +light_position dd 3.0, 2.0, -10.0, 1.0 ; Расположение источника [0][1][2] + ;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии) +light_dir dd 0.0,0.0,0.0 ;направление лампы +mat_specular dd 0.1, 0.1, 0.1, 1.0 ; Цвет блика +;mat_shininess dd 3.0 ; Размер блика (обратная пропорция) +white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность освещения, генерируемого источником +lmodel_ambient dd 0.2, 0.2, 0.2, 1.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_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/ztriangle.asm b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm index 99e2f2105f..2c78459dc4 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm +++ b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.asm @@ -1,9 +1,3 @@ -; -; Макрос DRAW_LINE имеет параметр code, от которого зависит -; будет ли включен код или объявлены переменные. -; В версии на C++ параметра code нет, потому что там переменные -; можно ставить в любом месте функции, в asm версии такое не проходит. -; INTERP_Z equ 1 @@ -236,29 +230,20 @@ end if DRAW_LINE_M equ 1 -macro DRAW_LINE code +macro DRAW_LINE { if TGL_FEATURE_RENDER_BITS eq 24 -if code eq 0 - s dd ? ;uint - t dd ? ;uint - dsdx dd ? ;int - dtdx dd ? ;int - fz dd ? ;float - zinv dd ? ;float -end if -if code eq 1 mov eax,[x2] sar eax,16 - sub eax,[x1] + mov edi,[x1] + sub eax,edi mov [n],eax ;n = (x2 >> 16) - x1 fld1 fild dword[z1] - fst dword[fz] ;fz = (float)z1 + fst dword[f_z] ;fz = (float)z1 ;fld1 fdivp fstp dword[zinv] ;zinv = 1.0 / fz - mov edi,[x1] imul edi,PSZB add edi,[pp1] ;pp = (pp1 + x1 * PSZB) mov eax,[x1] @@ -292,9 +277,9 @@ align 4 fmul dword[zinv] fistp dword[dtdx] ;dtdx = (int)( (dtzdx - tt*fdzdx)*zinv ) fld1 - fld dword[fz] + fld dword[f_z] fadd dword[fndzdx] - fst dword[fz] ;fz += fndzdx + fst dword[f_z] ;fz += fndzdx ;fld1 fdivp fstp dword[zinv] ;zinv = 1.0 / fz @@ -344,7 +329,6 @@ align 4 jmp .cycle_3 .cycle_3_end: end if -end if } align 4 @@ -355,6 +339,8 @@ locals fndzdx dd ? ;float ndszdx dd ? ;float ndtzdx dd ? ;float + zinv dd ? ;float + f_z dd ? ;float - переменная отвечающая за геометрию текстуры include 'ztriangle.inc' end if @@ -377,7 +363,6 @@ macro DRAW_INIT macro PUT_PIXEL _a { local .end_0 -; int s,t; mov eax,[z] shr eax,ZB_POINT_Z_FRAC_BITS mov [zz],eax diff --git a/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc index 672e3dd95a..5cb0995ae3 100644 --- a/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc +++ b/programs/develop/libraries/TinyGL/asm_fork/ztriangle.inc @@ -28,7 +28,7 @@ fdx2 dd ? ;float fdy1 dd ? ;float fdy2 dd ? ;float - fz dd ? ;float + fz dd ? ;float - переменная отвечающая за геометрию фигуры d1 dd ? ;float d2 dd ? ;float pz1 dd ? ;unsigned short* @@ -56,6 +56,8 @@ z dd ? ;uint zz dd ? ;uint + n dd ? ;int - длинна горизонтальной линии в пикселях + if INTERP_Z eq 1 z1 dd ? ;int dzdx dd ? ;int @@ -79,15 +81,16 @@ if INTERP_RGB eq 1 dbdy dd ? dbdl_min dd ? dbdl_max dd ? + or1 dd ? ;uint + og1 dd ? ;uint + ob1 dd ? ;uint end if if INTERP_ST eq 1 s1 dd ? ;int - dsdx dd ? ;int dsdy dd ? ;int dsdl_min dd ? ;int dsdl_max dd ? ;int t1 dd ? ;int - dtdx dd ? ;int dtdy dd ? ;int dtdl_min dd ? ;int dtdl_max dd ? ;int @@ -106,21 +109,12 @@ if INTERP_STZ eq 1 s_z dd ? ;float t_z dd ? ;float end if - n dd ? ;int - длинна горизонтальной линии в пикселях -if INTERP_RGB eq 1 - or1 dd ? ;uint - og1 dd ? ;uint - ob1 dd ? ;uint -end if -if INTERP_ST eq 1 +if (INTERP_ST eq 1) | (DRAW_LINE_M eq 1) s dd ? ;uint t dd ? ;uint + dsdx dd ? ;int + dtdx dd ? ;int end if - -if DRAW_LINE_M eq 1 - DRAW_LINE 0 ;переменные делаются в макросе -end if - endl pushad @@ -687,7 +681,7 @@ end if jle .end_w_lin dec dword[nb_lines] if DRAW_LINE_M eq 1 - DRAW_LINE 1 + DRAW_LINE else ; generic draw line mov eax,[x2] @@ -878,7 +872,6 @@ if INTERP_STZ eq 1 fstp dword[tz1] end if .end_er: - ; right edge mov eax,[dx2dy2] add [x2],eax