Subversion Repositories Kolibri OS

Rev

Rev 8069 | 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,300,225,ctx1
  28. stdcall [glEnable], GL_DEPTH_TEST
  29.  
  30. stdcall [glGenLists],1
  31. mov [obj1],eax
  32. stdcall [glNewList],eax,GL_COMPILE
  33. ;---
  34.         stdcall [glColor3f],1.0, 0.0, 0.0
  35.         stdcall [glBegin],GL_LINE_LOOP
  36.                 stdcall [glVertex3f], 0,      0.9, 0.1
  37.                 stdcall [glVertex3f], 0.636,  0.636, 0.1
  38.                 stdcall [glVertex3f], 0.9,    0.0, 0.1
  39.                 stdcall [glVertex3f], 0.636, -0.636, 0.1
  40.                 stdcall [glVertex3f], 0.0,   -0.9, 0.1
  41.                 stdcall [glVertex3f], -0.636,-0.636, 0.1
  42.                 stdcall [glVertex3f], -0.9,   0.0, 0.1
  43.                 stdcall [glVertex3f], -0.636, 0.636, 0.1
  44.         call [glEnd]
  45.  
  46.         stdcall [glColor3f],0.0, 0.0, 1.0
  47.         stdcall [glBegin],GL_LINE_LOOP
  48.                 stdcall [glVertex3f], 0.0, 1.1, 0.1
  49.                 stdcall [glVertex3f], 0.778, 0.778, 0.1
  50.                 stdcall [glVertex3f], 2.1, 0.0, 0.1
  51.                 stdcall [glVertex3f], 0.778, -0.778, 0.1
  52.                 stdcall [glVertex3f], 0.0, -1.1, 0.1
  53.                 stdcall [glVertex3f], -0.778, -0.778, 0.1
  54.                 stdcall [glVertex3f], -2.1, 0.0, 0.1
  55.                 stdcall [glVertex3f], -0.778, 0.778, 0.1
  56.         call [glEnd]
  57. ;---
  58. call [glEndList]
  59.  
  60. call draw_3d
  61.  
  62. align 4
  63. red_win:
  64.         call draw_window
  65.  
  66. align 4
  67. still:
  68.         mcall 10
  69.         cmp al,1
  70.         jz red_win
  71.         cmp al,2
  72.         jz key
  73.         cmp al,3
  74.         jz button
  75.         jmp still
  76.  
  77. align 4
  78. draw_window:
  79.         pushad
  80.         mcall 12,1
  81.  
  82.         mov edx,0x33ffffff ;0x73ffffff
  83.         mcall 0,(50 shl 16)+330,(30 shl 16)+275,,,caption
  84.         stdcall [kosglSwapBuffers]
  85.  
  86.         mcall 12,2
  87.         popad
  88.         ret
  89.  
  90. align 4
  91. key:
  92.         mcall 2
  93.  
  94.         cmp ah,27 ;Esc
  95.         je button.exit
  96.  
  97.         ;178 ;Up
  98.         ;177 ;Down
  99.         cmp ah,176 ;Left
  100.         jne @f
  101.                 fld dword[angle_z]
  102.                 fadd dword[delt_size]
  103.                 fstp dword[angle_z]
  104.                 call draw_3d
  105.                 stdcall [kosglSwapBuffers]
  106.         @@:
  107.         cmp ah,179 ;Right
  108.         jne @f
  109.                 fld dword[angle_z]
  110.                 fsub dword[delt_size]
  111.                 fstp dword[angle_z]
  112.                 call draw_3d
  113.                 stdcall [kosglSwapBuffers]
  114.         @@:
  115.  
  116.         jmp still
  117.  
  118. align 4
  119. button:
  120.         mcall 17
  121.         cmp ah,1
  122.         jne still
  123. .exit:
  124.         mcall -1
  125.  
  126.  
  127. align 4
  128. caption db 'Test tinygl library, [Esc] - exit, [<-] and [->] - rotate',0
  129. align 4
  130. ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
  131. ;sizeof.TinyGLContext = 28
  132.  
  133. align 4
  134. draw_3d:
  135. stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
  136.  
  137. stdcall [glPushMatrix]
  138.         stdcall [glRotatef], [angle_z],0.0,0.0,1.0
  139.         stdcall [glScalef], 0.3,0.3,0.3
  140.  
  141.         stdcall [glCallList],[obj1]
  142.  
  143. stdcall [glPopMatrix]
  144. ret
  145.  
  146. align 4
  147. angle_z dd 0.0
  148. delt_size dd 3.0
  149. obj1 dd ?
  150.  
  151. ;--------------------------------------------------
  152. align 4
  153. import_lib_tinygl:
  154.  
  155. macro E_LIB n
  156. {
  157.         n dd sz_#n
  158. }
  159. include '../export.inc'
  160.         dd 0,0
  161. macro E_LIB n
  162. {
  163.         sz_#n db `n,0
  164. }
  165. include '../export.inc'
  166.  
  167. ;--------------------------------------------------
  168. system_path db '/sys/lib/'
  169. name_tgl db 'tinygl.obj',0
  170. err_message_found_lib db 'Sorry I cannot load library tinygl.obj',0
  171. head_f_i:
  172. head_f_l db 'System error',0
  173. err_message_import db 'Error on load import library tinygl.obj',0
  174. ;--------------------------------------------------
  175.  
  176. i_end:
  177.         rb 1024
  178. stacktop:
  179. cur_dir_path:
  180.         rb 4096
  181. library_path:
  182.         rb 4096
  183. mem:
  184.