Subversion Repositories Kolibri OS

Rev

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