1 USING: arrays kernel math opengl opengl.gl opengl.glu
2 opengl.demo-support ui ui.gadgets ui.render ui.pixel-formats
3 threads accessors calendar literals ;
6 TUPLE: nehe5-gadget < gadget rtri rquad thread quit? ;
9 : redraw-interval ( -- dt ) 10 milliseconds ;
11 : <nehe5-gadget> ( -- gadget )
16 M: nehe5-gadget draw-gadget* ( gadget -- )
17 GL_PROJECTION glMatrixMode
19 45.0 width height / >float 0.1 100.0 gluPerspective
20 GL_MODELVIEW glMatrixMode
22 GL_SMOOTH glShadeModel
23 0.0 0.0 0.0 0.0 glClearColor
25 GL_DEPTH_TEST glEnable
27 GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST glHint
28 GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT bitor glClear
30 -1.5 0.0 -6.0 glTranslatef
31 dup rtri>> 0.0 1.0 0.0 glRotatef
35 0.0 1.0 0.0 glVertex3f
37 -1.0 -1.0 1.0 glVertex3f
39 1.0 -1.0 1.0 glVertex3f
42 0.0 1.0 0.0 glVertex3f
44 1.0 -1.0 1.0 glVertex3f
46 1.0 -1.0 -1.0 glVertex3f
49 0.0 1.0 0.0 glVertex3f
51 1.0 -1.0 -1.0 glVertex3f
53 -1.0 -1.0 -1.0 glVertex3f
56 0.0 1.0 0.0 glVertex3f
58 -1.0 -1.0 -1.0 glVertex3f
60 -1.0 -1.0 1.0 glVertex3f
65 1.5 0.0 -7.0 glTranslatef
66 dup rquad>> 1.0 0.0 0.0 glRotatef
69 1.0 1.0 -1.0 glVertex3f
70 -1.0 1.0 -1.0 glVertex3f
71 -1.0 1.0 1.0 glVertex3f
72 1.0 1.0 1.0 glVertex3f
75 1.0 -1.0 1.0 glVertex3f
76 -1.0 -1.0 1.0 glVertex3f
77 -1.0 -1.0 -1.0 glVertex3f
78 1.0 -1.0 -1.0 glVertex3f
81 1.0 1.0 1.0 glVertex3f
82 -1.0 1.0 1.0 glVertex3f
83 -1.0 -1.0 1.0 glVertex3f
84 1.0 -1.0 1.0 glVertex3f
87 1.0 -1.0 -1.0 glVertex3f
88 -1.0 -1.0 -1.0 glVertex3f
89 -1.0 1.0 -1.0 glVertex3f
90 1.0 1.0 -1.0 glVertex3f
93 -1.0 1.0 1.0 glVertex3f
94 -1.0 1.0 -1.0 glVertex3f
95 -1.0 -1.0 -1.0 glVertex3f
96 -1.0 -1.0 1.0 glVertex3f
99 1.0 1.0 -1.0 glVertex3f
100 1.0 1.0 1.0 glVertex3f
101 1.0 -1.0 1.0 glVertex3f
102 1.0 -1.0 -1.0 glVertex3f
104 [ 0.2 + ] change-rtri
105 [ 0.15 - ] change-rquad drop ;
107 : nehe5-update-thread ( gadget -- )
111 redraw-interval sleep
116 M: nehe5-gadget graft* ( gadget -- )
118 [ nehe5-update-thread ] curry in-thread ;
120 M: nehe5-gadget ungraft* ( gadget -- )
125 { title "NeHe Tutorial 5" }
126 { pref-dim { $ width $ height } }
127 { pixel-format-attributes {
130 T{ depth-bits { value 16 } }
133 <nehe5-gadget> >>gadgets ;