Subversion Repositories Kolibri OS

Rev

Rev 5353 | 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_lib.mac'
  10. include '../../../../../dll.inc'
  11. include '../opengl_const.inc'
  12.  
  13. @use_library
  14.  
  15. align 4
  16. start:
  17.         load_library name_tgl, library_path, system_path, import_tinygl
  18.         cmp eax,-1
  19.         jz button.exit
  20.  
  21.         mcall SF_SET_EVENTS_MASK,0x27
  22.  
  23. stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
  24. stdcall [glEnable], GL_DEPTH_TEST
  25. stdcall [glClearColor], 0.0,0.0,0.0,0.0
  26. stdcall [glShadeModel], GL_SMOOTH
  27.  
  28. call draw_3d
  29.  
  30. align 4
  31. red_win:
  32.         call draw_window
  33.  
  34. align 4
  35. still:
  36.         mcall SF_WAIT_EVENT
  37.         cmp al,1
  38.         jz red_win
  39.         cmp al,2
  40.         jz key
  41.         cmp al,3
  42.         jz button
  43.         jmp still
  44.  
  45. align 4
  46. draw_window:
  47.         pushad
  48.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  49.  
  50.         mcall SF_CREATE_WINDOW,(50 shl 16)+430,(30 shl 16)+400,0x33ffffff,,caption
  51.         call [kosglSwapBuffers]
  52.  
  53.         mcall SF_REDRAW,SSF_END_DRAW
  54.         popad
  55.         ret
  56.  
  57. align 4
  58. key:
  59.         mcall SF_GET_KEY
  60.  
  61.         cmp ah,27 ;Esc
  62.         je button.exit
  63.  
  64.         cmp ah,61 ;+
  65.         jne @f
  66.             fld dword[scale]
  67.             fadd dword[delt_sc]
  68.             fstp dword[scale]
  69.             call draw_3d
  70.             call [kosglSwapBuffers]
  71.         @@:
  72.         cmp ah,45 ;-
  73.         jne @f
  74.             fld dword[scale]
  75.             fsub dword[delt_sc]
  76.             fstp dword[scale]
  77.             call draw_3d
  78.             call [kosglSwapBuffers]
  79.         @@:
  80.         cmp ah,178 ;Up
  81.         jne @f
  82.                 fld dword[angle_y]
  83.                 fadd dword[delt_size]
  84.                 fstp dword[angle_y]
  85.                 call draw_3d
  86.                 call [kosglSwapBuffers]
  87.         @@:
  88.         cmp ah,177 ;Down
  89.         jne @f
  90.                 fld dword[angle_y]
  91.                 fsub dword[delt_size]
  92.                 fstp dword[angle_y]
  93.                 call draw_3d
  94.                 call [kosglSwapBuffers]
  95.         @@:
  96.         cmp ah,176 ;Left
  97.         jne @f
  98.                 fld dword[angle_z]
  99.                 fadd dword[delt_size]
  100.                 fstp dword[angle_z]
  101.                 call draw_3d
  102.                 call [kosglSwapBuffers]
  103.         @@:
  104.         cmp ah,179 ;Right
  105.         jne @f
  106.                 fld dword[angle_z]
  107.                 fsub dword[delt_size]
  108.                 fstp dword[angle_z]
  109.                 call draw_3d
  110.                 call [kosglSwapBuffers]
  111.         @@:
  112.  
  113.         jmp still
  114.  
  115. align 4
  116. button:
  117.         mcall SF_GET_BUTTON
  118.         cmp ah,1
  119.         jne still
  120. .exit:
  121.         mcall SF_TERMINATE_PROCESS
  122.  
  123.  
  124. align 4
  125. caption db 'Test opengl 1.1 arrays, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
  126.  
  127. align 4
  128. draw_3d:
  129. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  130. call [glPushMatrix]
  131.  
  132.         ;масштаб и повороты
  133.         stdcall [glTranslatef], 0.0,0.0,0.5
  134.         stdcall [glScalef], [scale], [scale], [scale]
  135.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  136.         stdcall [glRotatef], [angle_y],0.0,1.0,0.0
  137.  
  138.         ;рисование через массивы
  139.         stdcall [glVertexPointer], 2, GL_FLOAT, 0, Vertex ;задаем массив для вершин, 2 - число координат для одной вершины
  140.         stdcall [glColorPointer],  3, GL_FLOAT, 0, Colors ;задаем массив для цветов, 3 - число параметров для одной точки
  141.         stdcall [glEnableClientState], GL_VERTEX_ARRAY    ;включаем режим рисования вершин
  142.         stdcall [glEnableClientState], GL_COLOR_ARRAY     ;включаем режим рисования цветов
  143.         stdcall [glDrawArrays], GL_POLYGON, 0, 4 ;рисование полигона из 4-х вершин (равносильно вызову 8-ми функций: 4 - для вершин, 4 - для цетов)
  144.         stdcall [glDisableClientState], GL_COLOR_ARRAY    ;отключаем режим рисования цветов
  145.         stdcall [glDisableClientState], GL_VERTEX_ARRAY   ;отключаем режим рисования вершин
  146.  
  147. call [glPopMatrix]
  148. ret
  149.  
  150. align 4
  151. scale dd 0.8
  152. delt_sc dd 0.05
  153. angle_z dd 0.0
  154. angle_y dd 0.0
  155. delt_size dd 3.0
  156.  
  157. align 4
  158. Vertex dd -0.9, -0.9, -0.9, 0.9, 0.9, 0.9, 0.9, -0.9 ;4 вершины (по 2 координаты)
  159. Colors dd 0.0, 0.5, 1.0, 1.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5, 1.0, 0.0 ;4 цвета (по 3 параметра)
  160.  
  161. ;--------------------------------------------------
  162. align 4
  163. import_tinygl:
  164.  
  165. macro E_LIB n
  166. {
  167.         n dd sz_#n
  168. }
  169. include '../export.inc'
  170.         dd 0,0
  171. macro E_LIB n
  172. {
  173.         sz_#n db `n,0
  174. }
  175. include '../export.inc'
  176.  
  177. ;--------------------------------------------------
  178. system_path db '/sys/lib/'
  179. name_tgl db 'tinygl.obj',0
  180. ;--------------------------------------------------
  181.  
  182. align 4
  183. i_end:
  184.         ctx1 rb 28 ;sizeof.TinyGLContext = 28
  185.         cur_dir_path rb 4096
  186.         library_path rb 4096
  187.         rb 4096
  188. stacktop:
  189. mem:
  190.