Subversion Repositories Kolibri OS

Rev

Rev 6164 | Rev 6200 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.         org 0x0
  3.         db 'MENUET01'
  4.         dd 1,start,i_end
  5.         dd mem,stacktop
  6.         dd 0,cur_dir_path
  7.  
  8. include '../../../../../proc32.inc'
  9. include '../../../../../macros.inc'
  10. include '../../../../../KOSfuncs.inc'
  11. include '../../../../../develop/libraries/box_lib/load_lib.mac'
  12. include '../../../../../dll.inc'
  13. include '../opengl_const.inc'
  14. include '../../../../../develop/info3ds/info_fun_float.inc'
  15.  
  16. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  17.  
  18. struct FileInfoBlock
  19.         Function dd ?
  20.         Position dd ?
  21.         Flags    dd ?
  22.         Count    dd ?
  23.         Buffer   dd ?
  24.                 db ?
  25.         FileName dd ?
  26. ends
  27.  
  28. align 4
  29. open_b rb 560
  30. image_data_toolbar dd 0
  31. IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
  32.  
  33. ;макрос для загрузки изображений
  34. ; path - может быть переменной или строковым параметром
  35. ; buf - переменная куда будет записан указатель на изображение в формате rgb
  36. ; img_w, img_h - переменные куда будут записаны размеры открываемого
  37. ;    изображения, не обязательные параметры
  38. macro load_image_file path, buf, img_w, img_h
  39. {
  40. if path eqtype '' ;проверяем задан ли строкой параметр path
  41.         local .path_str
  42.         jmp @f
  43.                 .path_str db path ;формируем локальную переменную
  44.                 db 0
  45.         @@:
  46.         ;32 - стандартный адрес по которому должен быть буфер с системным путем
  47.         copy_path .path_str,[32],file_name,0
  48. else
  49.         copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  50. end if
  51.     mov [run_file_70.Function], SSF_GET_INFO
  52.     mov [run_file_70.Position], 0
  53.     mov [run_file_70.Flags], 0
  54.     mov dword[run_file_70.Count], 0
  55.     mov dword[run_file_70.Buffer], open_b
  56.     mov byte[run_file_70+20], 0
  57.     mov dword[run_file_70.FileName], file_name
  58.     mcall SF_FILE,run_file_70
  59.         or eax,eax
  60.         jnz @f
  61.  
  62.     mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
  63.     stdcall mem.Alloc,ecx ;выделяем память для изображения
  64.         mov [buf],eax
  65.         mov [run_file_70.Function], SSF_READ_FILE
  66.         mov [run_file_70.Position], 0
  67.         mov [run_file_70.Flags], 0
  68.         mov [run_file_70.Count], ecx
  69.         mov [run_file_70.Buffer], eax
  70.         mov byte[run_file_70+20], 0
  71.         mov [run_file_70.FileName], file_name
  72.         mcall SF_FILE,run_file_70 ;загружаем файл изображения
  73.         cmp ebx,0xffffffff
  74.         je @f
  75.                 ;определяем вид изображения и пишем его параметры
  76.                 stdcall [img_decode], [buf],ebx,0
  77.                 mov ebx,eax
  78.                 ;определяем размер декодированного изображения
  79.                 mov ecx,[eax+4] ;+4 = image width
  80. if img_w eq
  81. else
  82.                 mov dword[img_w],ecx
  83. end if
  84. if img_h eq
  85.                 imul ecx,[eax+8] ;+8 = image height
  86. else
  87.                 mov eax,[eax+8] ;+8 = image height
  88.                 mov dword[img_h],eax
  89.                 imul ecx,eax
  90. end if
  91.                 imul ecx,3 ;need for r,g,b
  92.                 stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера
  93.                 mov [buf],eax
  94.                 stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb
  95.                 stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
  96.         @@:
  97. }
  98.  
  99. offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
  100.  
  101. align 4
  102. start:
  103. load_libraries l_libs_start,l_libs_end
  104.         ;проверка на сколько удачно загузились библиотеки
  105.         mov     ebp,lib_0
  106.         .test_lib_open:
  107.         cmp     dword [ebp+ll_struc_size-4],0
  108.         jz      @f
  109.                 mcall SF_TERMINATE_PROCESS
  110.         @@:
  111.         add ebp,ll_struc_size
  112.         cmp ebp,l_libs_end
  113.         jl .test_lib_open
  114.  
  115.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  116.         mcall SF_SET_EVENTS_MASK,0x27
  117.  
  118.         stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
  119.         stdcall [glEnable], GL_DEPTH_TEST
  120.         stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
  121.         stdcall [gluNewQuadric]
  122.         mov [qObj],eax
  123.         stdcall [gluQuadricTexture], eax,GL_TRUE
  124.  
  125.         stdcall [glClearColor], 0.25,0.25,0.25,0.0
  126.         stdcall [glShadeModel], GL_SMOOTH
  127.  
  128.         mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
  129.         mov eax,[eax] ;eax -> ZBuffer
  130.         mov eax,[eax+offs_zbuf_pbuf] ;eax -> ZBuffer.pbuf
  131.         mov dword[buf_ogl],eax
  132.  
  133.         load_image_file 'font8x9.bmp', image_data_toolbar
  134.         stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
  135.         stdcall mem.Free,[image_data_toolbar] ;освобождаем память
  136.         stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
  137.         stdcall [buf2d_convert_text_matrix], buf_1
  138.  
  139.         load_image_file 'toolb_1.png', image_data_toolbar
  140.         load_image_file 'text_1.png', texture, text_w,text_h ;открытие файла текстуры
  141.  
  142.         ;* Setup texturing *
  143.         stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
  144.  
  145.         ;* generate texture object IDs *
  146.         stdcall [glGenTextures], 1, TexObj
  147.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  148.         stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
  149.                 0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
  150.    
  151.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
  152.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
  153.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT
  154.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT
  155.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  156.         stdcall [glEnable], GL_TEXTURE_2D
  157.  
  158.         call draw_3d
  159.  
  160. align 4
  161. red_win:
  162.         call draw_window
  163.  
  164. align 4
  165. still:
  166.         mcall SF_WAIT_EVENT
  167.         cmp al,1
  168.         jz red_win
  169.         cmp al,2
  170.         jz key
  171.         cmp al,3
  172.         jz button
  173.         jmp still
  174.  
  175. align 4
  176. draw_window:
  177.         pushad
  178.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  179.         mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
  180.  
  181.         mov esi,[sc.work_button]
  182.         mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;сферы
  183.         mcall ,(36 shl 16)+19,,4+0x40000000 ;куб
  184.  
  185.         mcall SF_PUT_IMAGE,[image_data_toolbar],(21 shl 16)+21,(5 shl 16)+5 ;сферы
  186.         add ebx,2*IMAGE_TOOLBAR_ICON_SIZE
  187.         mcall ,,,(35 shl 16)+5 ;куб
  188.  
  189.         stdcall [kosglSwapBuffers]
  190.         mcall SF_REDRAW,SSF_END_DRAW
  191.         popad
  192.         ret
  193.  
  194. align 4
  195. key:
  196.         mcall SF_GET_KEY
  197.  
  198.         cmp ah,27 ;Esc
  199.         je button.exit
  200.  
  201.         cmp ah,61 ;+
  202.         jne @f
  203.                 finit
  204.                 fld dword[scale]
  205.                 fadd dword[delt_sc]
  206.                 fst dword[scale]
  207.                 mov word[NumberSymbolsAD],3
  208.                 fstp qword[Data_Double]
  209.                 call DoubleFloat_to_String
  210.                 mov byte[txt_scale.v],0
  211.                 stdcall str_cat, txt_scale.v,Data_String
  212.                 call draw_3d
  213.                 stdcall [kosglSwapBuffers]
  214.         @@:
  215.         cmp ah,45 ;-
  216.         jne @f
  217.                 finit
  218.                 fld dword[scale]
  219.                 fsub dword[delt_sc]
  220.                 fst dword[scale]
  221.                 mov word[NumberSymbolsAD],3
  222.                 fstp qword[Data_Double]
  223.                 call DoubleFloat_to_String
  224.                 mov byte[txt_scale.v],0
  225.                 stdcall str_cat, txt_scale.v,Data_String
  226.                 call draw_3d
  227.                 stdcall [kosglSwapBuffers]
  228.         @@:
  229.         cmp ah,178 ;Up
  230.         jne @f
  231.                 finit
  232.                 fld dword[angle_y]
  233.                 fadd dword[delt_size]
  234.                 fst dword[angle_y]
  235.                 mov word[NumberSymbolsAD],2
  236.                 fstp qword[Data_Double]
  237.                 call DoubleFloat_to_String
  238.                 mov byte[txt_angle_y.v],0
  239.                 stdcall str_cat, txt_angle_y.v,Data_String
  240.                 call draw_3d
  241.                 stdcall [kosglSwapBuffers]
  242.         @@:
  243.         cmp ah,177 ;Down
  244.         jne @f
  245.                 finit
  246.                 fld dword[angle_y]
  247.                 fsub dword[delt_size]
  248.                 fst dword[angle_y]
  249.                 mov word[NumberSymbolsAD],2
  250.                 fstp qword[Data_Double]
  251.                 call DoubleFloat_to_String
  252.                 mov byte[txt_angle_y.v],0
  253.                 stdcall str_cat, txt_angle_y.v,Data_String
  254.                 call draw_3d
  255.                 stdcall [kosglSwapBuffers]
  256.         @@:
  257.         cmp ah,176 ;Left
  258.         jne @f
  259.                 finit
  260.                 fld dword[angle_z]
  261.                 fadd dword[delt_size]
  262.                 fst dword[angle_z]
  263.                 mov word[NumberSymbolsAD],2
  264.                 fstp qword[Data_Double]
  265.                 call DoubleFloat_to_String
  266.                 mov byte[txt_angle_z.v],0
  267.                 stdcall str_cat, txt_angle_z.v,Data_String
  268.                 call draw_3d
  269.                 stdcall [kosglSwapBuffers]
  270.         @@:
  271.         cmp ah,179 ;Right
  272.         jne @f
  273.                 finit
  274.                 fld dword[angle_z]
  275.                 fsub dword[delt_size]
  276.                 fst dword[angle_z]
  277.                 mov word[NumberSymbolsAD],2
  278.                 fstp qword[Data_Double]
  279.                 call DoubleFloat_to_String
  280.                 mov byte[txt_angle_z.v],0
  281.                 stdcall str_cat, txt_angle_z.v,Data_String
  282.                 call draw_3d
  283.                 stdcall [kosglSwapBuffers]
  284.         @@:
  285.  
  286.         jmp still
  287.  
  288. align 4
  289. button:
  290.         mcall SF_GET_BUTTON
  291.         cmp ah,3
  292.         jne @f
  293.                 call but_dr_0
  294.                 jmp still
  295.         @@:
  296.         cmp ah,4
  297.         jne @f
  298.                 call but_dr_1
  299.                 jmp still
  300.         @@:
  301.         cmp ah,1
  302.         jne still
  303. .exit:
  304.         stdcall [gluDeleteQuadric], [qObj]
  305.         stdcall mem.Free,[image_data_toolbar]
  306.         mcall SF_TERMINATE_PROCESS
  307.  
  308. align 4
  309. but_dr_0:
  310.         mov dword[dr_figure],0
  311.         call draw_3d
  312.         stdcall [kosglSwapBuffers]
  313.         ret
  314.  
  315. align 4
  316. but_dr_1:
  317.         mov dword[dr_figure],1
  318.         call draw_3d
  319.         stdcall [kosglSwapBuffers]
  320.         ret
  321.  
  322. align 4
  323. caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
  324. align 4
  325. ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
  326. ;sizeof.TinyGLContext = 28
  327.  
  328. align 4
  329. draw_3d:
  330. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  331.  
  332. stdcall [glPushMatrix]
  333.         stdcall [glTranslatef], 0.0,0.0,0.5
  334.         stdcall [glScalef], [scale], [scale], [scale]
  335.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  336.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  337.  
  338. cmp dword[dr_figure],0
  339. jne @f
  340.         ; рисование сфер
  341.         stdcall [glColor3f], 1.0, 1.0, 0.0
  342.         stdcall [gluSphere], [qObj], 1.0, 32,32
  343.  
  344.         stdcall [glColor3f], 1.0, 0.0, 0.0
  345.         stdcall [glTranslatef], -1.6,0.0,0.0
  346.         stdcall [gluSphere], [qObj], 0.55, 16,16
  347.  
  348.         stdcall [glColor3f], 0.0, 0.0, 1.0
  349.         stdcall [glTranslatef], 3.2,0.0,0.0
  350.         stdcall [gluSphere], [qObj], 0.55, 16,16
  351. @@:
  352. cmp dword[dr_figure],1
  353. jne @f
  354.         ; рисование граней куба
  355.         stdcall [glBegin],GL_QUADS
  356.  
  357. ; Передняя грань
  358.         stdcall [glTexCoord2f], 0.0f, 0.0f
  359.         stdcall [glVertex3f], -1.0f, -1.0f,  1.0f ; Низ лево
  360.         stdcall [glTexCoord2f], 1.0f, 0.0f
  361.         stdcall [glVertex3f],  1.0f, -1.0f,  1.0f ; Низ право
  362.         stdcall [glTexCoord2f], 1.0f, 1.0f
  363.         stdcall [glVertex3f],  1.0f,  1.0f,  1.0f ; Верх право
  364.         stdcall [glTexCoord2f], 0.0f, 1.0f
  365.         stdcall [glVertex3f], -1.0f,  1.0f,  1.0f ; Верх лево
  366.  
  367. ; Задняя грань
  368.         stdcall [glTexCoord2f], 1.0f, 0.0f
  369.         stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Низ право
  370.         stdcall [glTexCoord2f], 1.0f, 1.0f
  371.         stdcall [glVertex3f], -1.0f,  1.0f, -1.0f ; Верх право
  372.         stdcall [glTexCoord2f], 0.0f, 1.0f
  373.         stdcall [glVertex3f],  1.0f,  1.0f, -1.0f ; Верх лево
  374.         stdcall [glTexCoord2f], 0.0f, 0.0f
  375.         stdcall [glVertex3f],  1.0f, -1.0f, -1.0f ; Низ лево
  376.  
  377. ; Верхняя грань
  378.         stdcall [glTexCoord2f], 0.0f, 1.0f
  379.         stdcall [glVertex3f], -1.0f,  1.0f, -1.0f ; Верх лево
  380.         stdcall [glTexCoord2f], 0.0f, 0.0f
  381.         stdcall [glVertex3f], -1.0f,  1.0f,  1.0f ; Низ лево
  382.         stdcall [glTexCoord2f], 1.0f, 0.0f
  383.         stdcall [glVertex3f],  1.0f,  1.0f,  1.0f ; Низ право
  384.         stdcall [glTexCoord2f], 1.0f, 1.0f
  385.         stdcall [glVertex3f],  1.0f,  1.0f, -1.0f ; Верх право
  386.        
  387. ; Нижняя грань
  388.         stdcall [glTexCoord2f], 1.0f, 1.0f
  389.         stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Верх право
  390.         stdcall [glTexCoord2f], 0.0f, 1.0f
  391.         stdcall [glVertex3f],  1.0f, -1.0f, -1.0f ; Верх лево
  392.         stdcall [glTexCoord2f], 0.0f, 0.0f
  393.         stdcall [glVertex3f],  1.0f, -1.0f,  1.0f ; Низ лево
  394.         stdcall [glTexCoord2f], 1.0f, 0.0f
  395.         stdcall [glVertex3f], -1.0f, -1.0f,  1.0f ; Низ право
  396.  
  397. ; Правая грань
  398.         stdcall [glTexCoord2f], 1.0f, 0.0f
  399.         stdcall [glVertex3f],  1.0f, -1.0f, -1.0f ; Низ право
  400.         stdcall [glTexCoord2f], 1.0f, 1.0f
  401.         stdcall [glVertex3f],  1.0f,  1.0f, -1.0f ; Верх право
  402.         stdcall [glTexCoord2f], 0.0f, 1.0f
  403.         stdcall [glVertex3f],  1.0f,  1.0f,  1.0f ; Верх лево
  404.         stdcall [glTexCoord2f], 0.0f, 0.0f
  405.         stdcall [glVertex3f],  1.0f, -1.0f,  1.0f ; Низ лево
  406.  
  407. ; Левая грань
  408.         stdcall [glTexCoord2f], 0.0f, 0.0f
  409.         stdcall [glVertex3f], -1.0f, -1.0f, -1.0f ; Низ лево
  410.         stdcall [glTexCoord2f], 1.0f, 0.0f
  411.         stdcall [glVertex3f], -1.0f, -1.0f,  1.0f ; Низ право
  412.         stdcall [glTexCoord2f], 1.0f, 1.0f
  413.         stdcall [glVertex3f], -1.0f,  1.0f,  1.0f ; Верх право
  414.         stdcall [glTexCoord2f], 0.0f, 1.0f
  415.         stdcall [glVertex3f], -1.0f,  1.0f, -1.0f ; Верх лево
  416.  
  417.         stdcall [glEnd]
  418. @@:
  419. stdcall [glPopMatrix]
  420.  
  421.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
  422.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_z,5,15,0xffff00
  423.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,25,0xffff00
  424.         ret
  425.  
  426. dr_figure dd 0
  427. qObj dd 0
  428. TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
  429. texture dd 0 ;указатель на память с текстурой
  430. text_w dd 0
  431. text_h dd 0
  432.  
  433. scale dd 0.4
  434. delt_sc dd 0.05
  435. angle_z dd 0.0
  436. angle_y dd 0.0
  437. delt_size dd 3.0
  438.  
  439. light_position dd 3.0, 2.0, -10.0, 1.0 ; Расположение источника [0][1][2]
  440.         ;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии)
  441. light_dir dd 0.0,0.0,0.0 ;направление лампы
  442. mat_specular dd 0.1, 0.1, 0.1, 1.0 ; Цвет блика
  443. ;mat_shininess dd 3.0 ; Размер блика (обратная пропорция)
  444. white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность освещения, генерируемого источником
  445. lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
  446.  
  447. ;--------------------------------------------------
  448. align 4
  449. import_lib_tinygl:
  450.  
  451. macro E_LIB n
  452. {
  453.         n dd sz_#n
  454. }
  455. include '../export.inc'
  456.         dd 0,0
  457. macro E_LIB n
  458. {
  459.         sz_#n db `n,0
  460. }
  461. include '../export.inc'
  462.  
  463. align 4
  464. import_buf2d:
  465.         dd sz_init0
  466.         buf2d_create dd sz_buf2d_create
  467.         buf2d_create_f_img dd sz_buf2d_create_f_img
  468.         buf2d_clear dd sz_buf2d_clear
  469.         buf2d_draw dd sz_buf2d_draw
  470.         buf2d_delete dd sz_buf2d_delete
  471.         buf2d_resize dd sz_buf2d_resize
  472.         buf2d_line dd sz_buf2d_line
  473.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  474.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  475.         buf2d_circle dd sz_buf2d_circle
  476.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  477.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  478.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  479.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  480.         buf2d_bit_blt dd sz_buf2d_bit_blt
  481.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  482.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  483.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  484.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  485.         buf2d_draw_text dd sz_buf2d_draw_text
  486.         buf2d_crop_color dd sz_buf2d_crop_color
  487.         buf2d_offset_h dd sz_buf2d_offset_h
  488.         buf2d_flood_fill dd sz_buf2d_flood_fill
  489.         buf2d_set_pixel dd sz_buf2d_set_pixel
  490.         dd 0,0
  491.         sz_init0 db 'lib_init',0
  492.         sz_buf2d_create db 'buf2d_create',0
  493.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  494.         sz_buf2d_clear db 'buf2d_clear',0
  495.         sz_buf2d_draw db 'buf2d_draw',0
  496.         sz_buf2d_delete db 'buf2d_delete',0
  497.         sz_buf2d_resize db 'buf2d_resize',0
  498.         sz_buf2d_line db 'buf2d_line',0
  499.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  500.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  501.         sz_buf2d_circle db 'buf2d_circle',0
  502.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  503.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  504.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  505.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  506.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  507.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  508.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  509.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  510.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  511.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  512.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  513.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  514.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  515.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  516.  
  517. align 4
  518. import_libimg:
  519.         dd alib_init1
  520.         img_is_img  dd aimg_is_img
  521.         img_info    dd aimg_info
  522.         img_from_file dd aimg_from_file
  523.         img_to_file dd aimg_to_file
  524.         img_from_rgb dd aimg_from_rgb
  525.         img_to_rgb  dd aimg_to_rgb
  526.         img_to_rgb2 dd aimg_to_rgb2
  527.         img_decode  dd aimg_decode
  528.         img_encode  dd aimg_encode
  529.         img_create  dd aimg_create
  530.         img_destroy dd aimg_destroy
  531.         img_destroy_layer dd aimg_destroy_layer
  532.         img_count   dd aimg_count
  533.         img_lock_bits dd aimg_lock_bits
  534.         img_unlock_bits dd aimg_unlock_bits
  535.         img_flip    dd aimg_flip
  536.         img_flip_layer dd aimg_flip_layer
  537.         img_rotate  dd aimg_rotate
  538.         img_rotate_layer dd aimg_rotate_layer
  539.         img_draw    dd aimg_draw
  540.  
  541.         dd 0,0
  542.         alib_init1   db 'lib_init',0
  543.         aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
  544.         aimg_info    db 'img_info',0
  545.         aimg_from_file db 'img_from_file',0
  546.         aimg_to_file db 'img_to_file',0
  547.         aimg_from_rgb db 'img_from_rgb',0
  548.         aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
  549.         aimg_to_rgb2 db 'img_to_rgb2',0
  550.         aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
  551.         aimg_encode  db 'img_encode',0
  552.         aimg_create  db 'img_create',0
  553.         aimg_destroy db 'img_destroy',0
  554.         aimg_destroy_layer db 'img_destroy_layer',0
  555.         aimg_count   db 'img_count',0
  556.         aimg_lock_bits db 'img_lock_bits',0
  557.         aimg_unlock_bits db 'img_unlock_bits',0
  558.         aimg_flip    db 'img_flip',0
  559.         aimg_flip_layer db 'img_flip_layer',0
  560.         aimg_rotate  db 'img_rotate',0
  561.         aimg_rotate_layer db 'img_rotate_layer',0
  562.         aimg_draw    db 'img_draw',0
  563.  
  564. ;--------------------------------------------------
  565. system_dir_0 db '/sys/lib/'
  566. lib_name_0 db 'tinygl.obj',0
  567. system_dir_1 db '/sys/lib/'
  568. lib_name_1 db 'buf2d.obj',0
  569. system_dir_2 db '/sys/lib/'
  570. lib_name_2 db 'libimg.obj',0
  571. err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,0
  572. err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,0
  573. err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,0
  574. head_f_i:
  575. head_f_l db 'System error',0
  576. err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,0
  577. err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,0
  578. err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,0
  579. ;--------------------------------------------------
  580.  
  581. txt_scale:
  582. db 'Scale: '
  583. .v:
  584. db 0
  585. rb 10
  586.  
  587. txt_angle_z:
  588. db 'Rotate z: '
  589. .v:
  590. db 0
  591. rb 10
  592.  
  593. txt_angle_y:
  594. db 'Rotate y: '
  595. .v:
  596. db 0
  597. rb 10
  598.  
  599. align 4
  600. buf_ogl:
  601.         dd 0 ;указатель на буфер изображения
  602.         dw 10,10 ;+4 left,top
  603. .w: dd 400
  604. .h: dd 350
  605.         dd 0,24 ;+16 color,bit in pixel
  606.  
  607. align 4
  608. buf_1:
  609.         dd 0 ;указатель на буфер изображения
  610.         dw 25,25 ;+4 left,top
  611.         dd 128,144 ;+8 w,h
  612.         dd 0,24 ;+16 color,bit in pixel
  613.  
  614. align 4
  615. l_libs_start:
  616.         lib_0 l_libs lib_name_0, cur_dir_path, library_path,  system_dir_0,\
  617.                 err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
  618.         lib_1 l_libs lib_name_1, cur_dir_path, library_path,  system_dir_1,\
  619.                 err_msg_found_lib_1, head_f_l, import_buf2d,  err_msg_import_1,head_f_i
  620.         lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
  621.                 err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
  622. l_libs_end:
  623.  
  624. align 4
  625. i_end:
  626.         run_file_70 FileInfoBlock
  627.         sc system_colors
  628. align 16
  629.         rb 4096
  630. stacktop:
  631.         cur_dir_path rb 4096
  632.         library_path rb 4096
  633.         file_name rb 4096
  634. mem:
  635.