Subversion Repositories Kolibri OS

Rev

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