Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2.         org 0
  3.         db 'MENUET01'
  4.         dd 1,start,i_end,mem,stacktop,0,cur_dir_path
  5.  
  6. include '../../../../../proc32.inc'
  7. include '../../../../../macros.inc'
  8. include '../../../../../KOSfuncs.inc'
  9. include '../../../../../load_img.inc'
  10. include '../opengl_const.inc'
  11. include '../zbuffer.inc'
  12. include '../../../../../develop/info3ds/info_fun_float.inc'
  13.  
  14. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  15.  
  16. ;Макрос для параметров типа double (8 байт)
  17. macro glpush GLDoubleVar {
  18.         push dword[GLDoubleVar+4]
  19.         push dword[GLDoubleVar]
  20. }
  21.  
  22. align 4
  23. image_data_toolbar dd 0
  24. IMAGE_TOOLBAR_ICON_SIZE equ 21*21*3
  25.  
  26. align 4
  27. start:
  28. load_libraries l_libs_start,l_libs_end
  29.         ;проверка на сколько удачно загузились библиотеки
  30.         mov     ebp,lib_0
  31.         .test_lib_open:
  32.         cmp     dword [ebp+ll_struc_size-4],0
  33.         jz      @f
  34.                 mcall SF_TERMINATE_PROCESS
  35.         @@:
  36.         add ebp,ll_struc_size
  37.         cmp ebp,l_libs_end
  38.         jl .test_lib_open
  39.  
  40.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  41.         mcall SF_SET_EVENTS_MASK,0x27
  42.  
  43.         stdcall [kosglMakeCurrent], 5,30,[buf_ogl.w],[buf_ogl.h],ctx1
  44.         stdcall [glEnable], GL_DEPTH_TEST
  45.         stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
  46.         call [gluNewQuadric]
  47.         mov [qObj],eax
  48.         stdcall [gluQuadricDrawStyle], eax,GLU_FILL
  49.         stdcall [gluQuadricTexture], eax,GL_TRUE
  50.  
  51.         stdcall [glClearColor], 0.0,0.0,0.0,0.0
  52.         stdcall [glShadeModel], GL_SMOOTH
  53.  
  54.         mov eax,dword[ctx1] ;eax -> TinyGLContext.GLContext
  55.         mov eax,[eax] ;eax -> ZBuffer
  56.         mov eax,[eax+ZBuffer.pbuf]
  57.         mov dword[buf_ogl],eax
  58.  
  59.         load_image_file 'font8x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
  60.         stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
  61.         stdcall mem.Free,[image_data_toolbar] ;освобождаем память
  62.         stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
  63.         stdcall [buf2d_convert_text_matrix], buf_1
  64.  
  65.         load_image_file 'toolb_1.png', image_data_toolbar
  66.         load_image_file 'text_3.png', texture, text_w,text_h ;открытие файла текстуры
  67.  
  68.         ;* Setup texturing *
  69.         stdcall [glTexEnvi], GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL
  70.  
  71.         ;* generate texture object IDs *
  72.         stdcall [glGenTextures], 1, TexObj
  73.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  74.         stdcall [glTexImage2D], GL_TEXTURE_2D, 0, 3, [text_w], [text_h],\
  75.                 0, GL_RGB, GL_UNSIGNED_BYTE, [texture]
  76.    
  77.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST
  78.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST
  79.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT
  80.         stdcall [glTexParameteri], GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT
  81.         stdcall [glBindTexture], GL_TEXTURE_2D, [TexObj]
  82.         stdcall [glEnable], GL_TEXTURE_2D
  83.  
  84.         call draw_3d
  85.  
  86. align 4
  87. red_win:
  88.         call draw_window
  89.  
  90. align 4
  91. still:
  92.         mcall SF_WAIT_EVENT
  93.         cmp al,1
  94.         jz red_win
  95.         cmp al,2
  96.         jz key
  97.         cmp al,3
  98.         jz button
  99.         jmp still
  100.  
  101. align 4
  102. draw_window:
  103.         pushad
  104.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  105.         mcall SF_CREATE_WINDOW,(50 shl 16)+420,(30 shl 16)+410,0x33ffffff,,caption
  106.  
  107.         mov esi,[sc.work_button]
  108.         mcall SF_DEFINE_BUTTON,(6 shl 16)+19,(6 shl 16)+19,3+0x40000000 ;масштаб +
  109.         mcall ,(36 shl 16)+19,,4+0x40000000 ;масштаб -
  110.  
  111.         mov ebx,[image_data_toolbar]
  112.         add ebx,3*IMAGE_TOOLBAR_ICON_SIZE
  113.         mcall SF_PUT_IMAGE,,(21 shl 16)+21,(5 shl 16)+5 ;масштаб +
  114.         add ebx,IMAGE_TOOLBAR_ICON_SIZE
  115.         mcall ,,,(35 shl 16)+5 ;масштаб -
  116.  
  117.         call [kosglSwapBuffers]
  118.         mcall SF_REDRAW,SSF_END_DRAW
  119.         popad
  120.         ret
  121.  
  122. align 4
  123. key:
  124.         mcall SF_GET_KEY
  125.  
  126.         cmp ah,27 ;Esc
  127.         je button.exit
  128.  
  129.         cmp ah,61 ;+
  130.         jne @f
  131.                 call but_zoom_p
  132.                 jmp still
  133.         @@:
  134.         cmp ah,45 ;-
  135.         jne @f
  136.                 call but_zoom_m
  137.                 jmp still
  138.         @@:
  139.         cmp ah,176 ;Left
  140.         jne @f
  141.                 finit
  142.                 fld dword[angle_y]
  143.                 fadd dword[delt_size]
  144.                 fst dword[angle_y]
  145.                 mov word[NumberSymbolsAD],2
  146.                 fstp qword[Data_Double]
  147.                 call DoubleFloat_to_String
  148.                 mov byte[txt_angle_y.v],0
  149.                 stdcall str_cat, txt_angle_y.v,Data_String
  150.                 call draw_3d
  151.                 call [kosglSwapBuffers]
  152.         @@:
  153.         cmp ah,179 ;Right
  154.         jne @f
  155.                 finit
  156.                 fld dword[angle_y]
  157.                 fsub dword[delt_size]
  158.                 fst dword[angle_y]
  159.                 mov word[NumberSymbolsAD],2
  160.                 fstp qword[Data_Double]
  161.                 call DoubleFloat_to_String
  162.                 mov byte[txt_angle_y.v],0
  163.                 stdcall str_cat, txt_angle_y.v,Data_String
  164.                 call draw_3d
  165.                 call [kosglSwapBuffers]
  166.         @@:
  167.         cmp ah,178 ;Up
  168.         jne @f
  169.                 finit
  170.                 fld dword[angle_x]
  171.                 fadd dword[delt_size]
  172.                 fst dword[angle_x]
  173.                 mov word[NumberSymbolsAD],2
  174.                 fstp qword[Data_Double]
  175.                 call DoubleFloat_to_String
  176.                 mov byte[txt_angle_x.v],0
  177.                 stdcall str_cat, txt_angle_x.v,Data_String
  178.                 call draw_3d
  179.                 call [kosglSwapBuffers]
  180.         @@:
  181.         cmp ah,177 ;Down
  182.         jne @f
  183.                 finit
  184.                 fld dword[angle_x]
  185.                 fsub dword[delt_size]
  186.                 fst dword[angle_x]
  187.                 mov word[NumberSymbolsAD],2
  188.                 fstp qword[Data_Double]
  189.                 call DoubleFloat_to_String
  190.                 mov byte[txt_angle_x.v],0
  191.                 stdcall str_cat, txt_angle_x.v,Data_String
  192.                 call draw_3d
  193.                 call [kosglSwapBuffers]
  194.         @@:
  195.  
  196.         jmp still
  197.  
  198. align 4
  199. button:
  200.         mcall SF_GET_BUTTON
  201.         cmp ah,3
  202.         jne @f
  203.                 call but_zoom_p
  204.                 jmp still
  205.         @@:
  206.         cmp ah,4
  207.         jne @f
  208.                 call but_zoom_m
  209.                 jmp still
  210.         @@:
  211.         cmp ah,1
  212.         jne still
  213. .exit:
  214.         stdcall [gluDeleteQuadric], [qObj]
  215.         stdcall mem.Free,[image_data_toolbar]
  216.         mcall SF_TERMINATE_PROCESS
  217.  
  218. align 4
  219. but_zoom_p:
  220.         finit
  221.         fld dword[scale]
  222.         fadd dword[sc_delt]
  223.         fcom dword[sc_max]
  224.         fstsw ax
  225.         sahf
  226.         jbe @f
  227.                 ffree st0
  228.                 fincstp
  229.                 fld dword[sc_max]
  230.         @@:
  231.         fst dword[scale]
  232.         mov word[NumberSymbolsAD],3
  233.         fstp qword[Data_Double]
  234.         call DoubleFloat_to_String
  235.         mov byte[txt_scale.v],0
  236.         stdcall str_cat, txt_scale.v,Data_String
  237.         call draw_3d
  238.         call [kosglSwapBuffers]
  239.         ret
  240.  
  241. align 4
  242. but_zoom_m:
  243.         finit
  244.         fld dword[scale]
  245.         fsub dword[sc_delt]
  246.         fcom dword[sc_min]
  247.         fstsw ax
  248.         sahf
  249.         ja @f
  250.                 ffree st0
  251.                 fincstp
  252.                 fld dword[sc_min]
  253.         @@:
  254.         fst dword[scale]
  255.         mov word[NumberSymbolsAD],3
  256.         fstp qword[Data_Double]
  257.         call DoubleFloat_to_String
  258.         mov byte[txt_scale.v],0
  259.         stdcall str_cat, txt_scale.v,Data_String
  260.         call draw_3d
  261.         call [kosglSwapBuffers]
  262.         ret
  263.  
  264. align 4
  265. caption db 'Test textures, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
  266.  
  267. align 4
  268. draw_3d:
  269. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  270.  
  271. call [glPushMatrix]
  272.         stdcall [glScalef], [scale], [scale], [scale]
  273.         stdcall [glScalef], 1.0, 1.0, 0.1 ;прижимаем сферу, что-бы сразу не вылазила при увеличении
  274.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  275.         stdcall [glRotatef], [angle_x],1.0,0.0,0.0
  276.  
  277.         ; рисование панорамы
  278.         stdcall [gluSphere], [qObj], 1.0, 64,64
  279. call [glPopMatrix]
  280.  
  281.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_scale,5,5,0xffff00
  282.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_y,5,15,0xffff00
  283.         stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_angle_x,5,25,0xffff00
  284.         ret
  285.  
  286. scale dd 1.5 ;начальный масштаб
  287. sc_delt dd 0.05 ;изменение масштаба при нажатии
  288. sc_min dd 0.95 ;минимальный масштаб
  289. sc_max dd 2.5 ;максимальный масштаб
  290. angle_z dd 0.0
  291. angle_x dd 90.0
  292. angle_y dd 0.0
  293. delt_size dd 3.0
  294.  
  295. ;--------------------------------------------------
  296. align 4
  297. import_lib_tinygl:
  298.  
  299. macro E_LIB n
  300. {
  301.         n dd sz_#n
  302. }
  303. include '../export.inc'
  304.         dd 0,0
  305. macro E_LIB n
  306. {
  307.         sz_#n db `n,0
  308. }
  309. include '../export.inc'
  310.  
  311. align 4
  312. import_buf2d:
  313.         dd sz_init0
  314.         buf2d_create dd sz_buf2d_create
  315.         buf2d_create_f_img dd sz_buf2d_create_f_img
  316.         buf2d_clear dd sz_buf2d_clear
  317.         buf2d_draw dd sz_buf2d_draw
  318.         buf2d_delete dd sz_buf2d_delete
  319.         buf2d_resize dd sz_buf2d_resize
  320.         buf2d_line dd sz_buf2d_line
  321.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  322.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  323.         buf2d_circle dd sz_buf2d_circle
  324.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  325.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  326.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  327.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  328.         buf2d_bit_blt dd sz_buf2d_bit_blt
  329.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  330.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  331.         buf2d_curve_bezier dd sz_buf2d_curve_bezier
  332.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  333.         buf2d_draw_text dd sz_buf2d_draw_text
  334.         buf2d_crop_color dd sz_buf2d_crop_color
  335.         buf2d_offset_h dd sz_buf2d_offset_h
  336.         buf2d_flood_fill dd sz_buf2d_flood_fill
  337.         buf2d_set_pixel dd sz_buf2d_set_pixel
  338.         dd 0,0
  339.         sz_init0 db 'lib_init',0
  340.         sz_buf2d_create db 'buf2d_create',0
  341.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  342.         sz_buf2d_clear db 'buf2d_clear',0
  343.         sz_buf2d_draw db 'buf2d_draw',0
  344.         sz_buf2d_delete db 'buf2d_delete',0
  345.         sz_buf2d_resize db 'buf2d_resize',0
  346.         sz_buf2d_line db 'buf2d_line',0
  347.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
  348.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  349.         sz_buf2d_circle db 'buf2d_circle',0
  350.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  351.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  352.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  353.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  354.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  355.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  356.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  357.         sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  358.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  359.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  360.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  361.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  362.         sz_buf2d_flood_fill db 'buf2d_flood_fill',0
  363.         sz_buf2d_set_pixel db 'buf2d_set_pixel',0
  364.  
  365. align 4
  366. import_libimg:
  367.         dd alib_init1
  368. ;       img_is_img  dd aimg_is_img
  369. ;       img_info    dd aimg_info
  370. ;       img_from_file dd aimg_from_file
  371. ;       img_to_file dd aimg_to_file
  372. ;       img_from_rgb dd aimg_from_rgb
  373. ;       img_to_rgb  dd aimg_to_rgb
  374.         img_to_rgb2 dd aimg_to_rgb2
  375.         img_decode  dd aimg_decode
  376. ;       img_encode  dd aimg_encode
  377. ;       img_create  dd aimg_create
  378.         img_destroy dd aimg_destroy
  379. ;       img_destroy_layer dd aimg_destroy_layer
  380. ;       img_count   dd aimg_count
  381. ;       img_lock_bits dd aimg_lock_bits
  382. ;       img_unlock_bits dd aimg_unlock_bits
  383. ;       img_flip    dd aimg_flip
  384. ;       img_flip_layer dd aimg_flip_layer
  385. ;       img_rotate  dd aimg_rotate
  386. ;       img_rotate_layer dd aimg_rotate_layer
  387. ;       img_draw    dd aimg_draw
  388. ;       img_convert dd aimg_convert
  389.  
  390.         dd 0,0
  391.         alib_init1   db 'lib_init',0
  392. ;       aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
  393. ;       aimg_info    db 'img_info',0
  394. ;       aimg_from_file db 'img_from_file',0
  395. ;       aimg_to_file db 'img_to_file',0
  396. ;       aimg_from_rgb db 'img_from_rgb',0
  397. ;       aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
  398.         aimg_to_rgb2 db 'img_to_rgb2',0
  399.         aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
  400. ;       aimg_encode  db 'img_encode',0
  401. ;       aimg_create  db 'img_create',0
  402.         aimg_destroy db 'img_destroy',0
  403. ;       aimg_destroy_layer db 'img_destroy_layer',0
  404. ;       aimg_count   db 'img_count',0
  405. ;       aimg_lock_bits db 'img_lock_bits',0
  406. ;       aimg_unlock_bits db 'img_unlock_bits',0
  407. ;       aimg_flip    db 'img_flip',0
  408. ;       aimg_flip_layer db 'img_flip_layer',0
  409. ;       aimg_rotate  db 'img_rotate',0
  410. ;       aimg_rotate_layer db 'img_rotate_layer',0
  411. ;       aimg_draw    db 'img_draw',0
  412. ;       aimg_convert db 'img_convert',0
  413.  
  414. ;--------------------------------------------------
  415. system_dir_0 db '/sys/lib/'
  416. lib_name_0 db 'tinygl.obj',0
  417. system_dir_1 db '/sys/lib/'
  418. lib_name_1 db 'buf2d.obj',0
  419. system_dir_2 db '/sys/lib/'
  420. lib_name_2 db 'libimg.obj',0
  421. err_msg_found_lib_0 db 'Sorry I cannot load library ',39,'tinygl.obj',39,'" -tE',0
  422. err_msg_found_lib_1 db 'Sorry I cannot load library ',39,'buf2d.obj',39,'" -tE',0
  423. err_msg_found_lib_2 db 'Sorry I cannot load library ',39,'libimg.obj',39,'" -tE',0
  424. head_f_i:
  425. head_f_l db '"System error',0
  426. err_msg_import_0 db 'Error on load import library ',39,'tinygl.obj',39,'" -tE',0
  427. err_msg_import_1 db 'Error on load import library ',39,'buf2d.obj',39,'" -tE',0
  428. err_msg_import_2 db 'Error on load import library ',39,'libimg.obj',39,'" -tE',0
  429. ;--------------------------------------------------
  430.  
  431. txt_scale:
  432. db 'Scale: '
  433. .v:
  434. db 0
  435. rb 10
  436.  
  437. txt_angle_z:
  438. db 'Rotate z: '
  439. .v:
  440. db 0
  441. rb 10
  442.  
  443. txt_angle_x:
  444. db 'Rotate x: '
  445. .v:
  446. db 0
  447. rb 10
  448.  
  449. txt_angle_y:
  450. db 'Rotate y: '
  451. .v:
  452. db 0
  453. rb 10
  454.  
  455. align 4
  456. buf_ogl:
  457.         dd 0 ;указатель на буфер изображения
  458.         dw 10,10 ;+4 left,top
  459. .w: dd 400
  460. .h: dd 350
  461.         dd 0,24 ;+16 color,bit in pixel
  462.  
  463. align 4
  464. buf_1:
  465.         dd 0 ;указатель на буфер изображения
  466.         dd 0 ;+4 left,top
  467. .w: dd 0
  468. .h: dd 0,0,24 ;+16 color,bit in pixel
  469.  
  470. align 4
  471. l_libs_start:
  472.         lib_0 l_libs lib_name_0, cur_dir_path, file_name,  system_dir_0,\
  473.                 err_msg_found_lib_0, head_f_l, import_lib_tinygl,err_msg_import_0,head_f_i
  474.         lib_1 l_libs lib_name_1, cur_dir_path, file_name,  system_dir_1,\
  475.                 err_msg_found_lib_1, head_f_l, import_buf2d,  err_msg_import_1,head_f_i
  476.         lib_2 l_libs lib_name_2, cur_dir_path, file_name, system_dir_2,\
  477.                 err_msg_found_lib_2, head_f_l, import_libimg, err_msg_import_2, head_f_i
  478. l_libs_end:
  479.  
  480. align 4
  481. i_end:
  482.         ctx1 rb 28 ;sizeof.TinyGLContext = 28
  483.         qObj dd 0
  484.         TexObj dd 0 ;массив указателей на текстуры (в данном случае 1 шт.)
  485.         texture dd 0 ;указатель на память с текстурой
  486.         text_w dd 0
  487.         text_h dd 0
  488.         run_file_70 FileInfoBlock
  489.         sc system_colors
  490. align 16
  491.         rb 4096
  492. stacktop:
  493.         cur_dir_path rb 4096
  494.         file_name rb 4096
  495. mem:
  496.