ruby-opengl 0.60.1 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. metadata +36 -186
  2. data/Rakefile +0 -168
  3. data/doc/build_install.txt +0 -122
  4. data/doc/extensions.txt +0 -556
  5. data/doc/extensions.txt.in +0 -348
  6. data/doc/history.txt +0 -66
  7. data/doc/requirements_and_design.txt +0 -117
  8. data/doc/roadmap.txt +0 -28
  9. data/doc/scientific_use.txt +0 -35
  10. data/doc/supplies/page_template.html +0 -71
  11. data/doc/thanks.txt +0 -29
  12. data/doc/tutorial.txt +0 -469
  13. data/examples/NeHe/nehe_lesson02.rb +0 -117
  14. data/examples/NeHe/nehe_lesson03.rb +0 -122
  15. data/examples/NeHe/nehe_lesson04.rb +0 -133
  16. data/examples/NeHe/nehe_lesson05.rb +0 -186
  17. data/examples/NeHe/nehe_lesson36.rb +0 -303
  18. data/examples/OrangeBook/3Dlabs-License.txt +0 -33
  19. data/examples/OrangeBook/brick.frag +0 -36
  20. data/examples/OrangeBook/brick.rb +0 -376
  21. data/examples/OrangeBook/brick.vert +0 -41
  22. data/examples/OrangeBook/particle.frag +0 -17
  23. data/examples/OrangeBook/particle.rb +0 -406
  24. data/examples/OrangeBook/particle.vert +0 -38
  25. data/examples/README +0 -16
  26. data/examples/RedBook/aapoly.rb +0 -142
  27. data/examples/RedBook/aargb.rb +0 -119
  28. data/examples/RedBook/accanti.rb +0 -162
  29. data/examples/RedBook/accpersp.rb +0 -215
  30. data/examples/RedBook/alpha.rb +0 -123
  31. data/examples/RedBook/alpha3D.rb +0 -158
  32. data/examples/RedBook/bezcurve.rb +0 -105
  33. data/examples/RedBook/bezmesh.rb +0 -137
  34. data/examples/RedBook/checker.rb +0 -124
  35. data/examples/RedBook/clip.rb +0 -95
  36. data/examples/RedBook/colormat.rb +0 -135
  37. data/examples/RedBook/cube.rb +0 -69
  38. data/examples/RedBook/depthcue.rb +0 -99
  39. data/examples/RedBook/dof.rb +0 -205
  40. data/examples/RedBook/double.rb +0 -105
  41. data/examples/RedBook/drawf.rb +0 -91
  42. data/examples/RedBook/feedback.rb +0 -145
  43. data/examples/RedBook/fog.rb +0 -167
  44. data/examples/RedBook/font.rb +0 -151
  45. data/examples/RedBook/hello.rb +0 -79
  46. data/examples/RedBook/image.rb +0 -137
  47. data/examples/RedBook/jitter.rb +0 -207
  48. data/examples/RedBook/lines.rb +0 -128
  49. data/examples/RedBook/list.rb +0 -111
  50. data/examples/RedBook/material.rb +0 -275
  51. data/examples/RedBook/mipmap.rb +0 -156
  52. data/examples/RedBook/model.rb +0 -113
  53. data/examples/RedBook/movelight.rb +0 -132
  54. data/examples/RedBook/pickdepth.rb +0 -179
  55. data/examples/RedBook/planet.rb +0 -108
  56. data/examples/RedBook/quadric.rb +0 -158
  57. data/examples/RedBook/robot.rb +0 -115
  58. data/examples/RedBook/select.rb +0 -196
  59. data/examples/RedBook/smooth.rb +0 -95
  60. data/examples/RedBook/stencil.rb +0 -163
  61. data/examples/RedBook/stroke.rb +0 -167
  62. data/examples/RedBook/surface.rb +0 -166
  63. data/examples/RedBook/teaambient.rb +0 -132
  64. data/examples/RedBook/teapots.rb +0 -182
  65. data/examples/RedBook/tess.rb +0 -183
  66. data/examples/RedBook/texbind.rb +0 -147
  67. data/examples/RedBook/texgen.rb +0 -169
  68. data/examples/RedBook/texturesurf.rb +0 -128
  69. data/examples/RedBook/varray.rb +0 -159
  70. data/examples/RedBook/wrap.rb +0 -148
  71. data/examples/misc/OGLBench.rb +0 -337
  72. data/examples/misc/anisotropic.rb +0 -194
  73. data/examples/misc/fbo_test.rb +0 -356
  74. data/examples/misc/font-glut.rb +0 -46
  75. data/examples/misc/glfwtest.rb +0 -30
  76. data/examples/misc/plane.rb +0 -161
  77. data/examples/misc/readpixel.rb +0 -65
  78. data/examples/misc/sdltest.rb +0 -34
  79. data/examples/misc/trislam.rb +0 -828
  80. data/ext/common/common.h +0 -423
  81. data/ext/common/conv.h +0 -244
  82. data/ext/common/funcdef.h +0 -280
  83. data/ext/common/gl-enums.h +0 -10031
  84. data/ext/common/gl-error.h +0 -23
  85. data/ext/common/gl-types.h +0 -61
  86. data/ext/common/glu-enums.h +0 -463
  87. data/ext/gl/gl-1.0-1.1.c +0 -2817
  88. data/ext/gl/gl-1.2.c +0 -814
  89. data/ext/gl/gl-1.3.c +0 -444
  90. data/ext/gl/gl-1.4.c +0 -349
  91. data/ext/gl/gl-1.5.c +0 -225
  92. data/ext/gl/gl-2.0.c +0 -657
  93. data/ext/gl/gl-2.1.c +0 -57
  94. data/ext/gl/gl-enums.c +0 -3354
  95. data/ext/gl/gl-error.c +0 -104
  96. data/ext/gl/gl-ext-3dfx.c +0 -27
  97. data/ext/gl/gl-ext-arb.c +0 -866
  98. data/ext/gl/gl-ext-ati.c +0 -41
  99. data/ext/gl/gl-ext-ext.c +0 -890
  100. data/ext/gl/gl-ext-gremedy.c +0 -41
  101. data/ext/gl/gl-ext-nv.c +0 -679
  102. data/ext/gl/gl.c +0 -214
  103. data/ext/gl/mkrf_conf.rb +0 -34
  104. data/ext/glu/glu-enums.c +0 -164
  105. data/ext/glu/glu.c +0 -1530
  106. data/ext/glu/mkrf_conf.rb +0 -35
  107. data/ext/glut/glut.c +0 -1623
  108. data/ext/glut/mkrf_conf.rb +0 -37
  109. data/lib/opengl.rb +0 -84
  110. data/test/README +0 -10
  111. data/test/tc_common.rb +0 -98
  112. data/test/tc_ext_arb.rb +0 -467
  113. data/test/tc_ext_ati.rb +0 -33
  114. data/test/tc_ext_ext.rb +0 -551
  115. data/test/tc_ext_gremedy.rb +0 -36
  116. data/test/tc_ext_nv.rb +0 -357
  117. data/test/tc_func_10_11.rb +0 -1281
  118. data/test/tc_func_12.rb +0 -186
  119. data/test/tc_func_13.rb +0 -229
  120. data/test/tc_func_14.rb +0 -197
  121. data/test/tc_func_15.rb +0 -270
  122. data/test/tc_func_20.rb +0 -346
  123. data/test/tc_func_21.rb +0 -541
  124. data/test/tc_glu.rb +0 -310
  125. data/test/tc_include_gl.rb +0 -35
  126. data/test/tc_misc.rb +0 -54
  127. data/test/tc_require_gl.rb +0 -34
@@ -1,41 +0,0 @@
1
- //
2
- // Vertex shader for procedural bricks
3
- //
4
- // Authors: Dave Baldwin, Steve Koren, Randi Rost
5
- // based on a shader by Darwyn Peachey
6
- //
7
- // Copyright (c) 2002-2004 3Dlabs Inc. Ltd.
8
- //
9
- // See 3Dlabs-License.txt for license information
10
- //
11
-
12
- uniform vec3 LightPosition;
13
-
14
- const float SpecularContribution = 0.3;
15
- const float DiffuseContribution = 1.0 - SpecularContribution;
16
-
17
- varying float LightIntensity;
18
- varying vec2 MCposition;
19
-
20
- void main(void)
21
- {
22
- vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
23
- vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);
24
- vec3 lightVec = normalize(LightPosition - ecPosition);
25
- vec3 reflectVec = reflect(-lightVec, tnorm);
26
- vec3 viewVec = normalize(-ecPosition);
27
- float diffuse = max(dot(lightVec, tnorm), 0.0);
28
- float spec = 0.0;
29
-
30
- if (diffuse > 0.0)
31
- {
32
- spec = max(dot(reflectVec, viewVec), 0.0);
33
- spec = pow(spec, 16.0);
34
- }
35
-
36
- LightIntensity = DiffuseContribution * diffuse +
37
- SpecularContribution * spec;
38
-
39
- MCposition = gl_Vertex.xy;
40
- gl_Position = ftransform();
41
- }
@@ -1,17 +0,0 @@
1
- //
2
- // Fragment shader for rendering a "confetti cannon"
3
- // via a partcle system
4
- //
5
- // Author: Randi Rost
6
- //
7
- // Copyright (c) 2003-2004: 3Dlabs, Inc.
8
- //
9
- // See 3Dlabs-License.txt for license information
10
- //
11
-
12
- varying vec4 Color;
13
-
14
- void main (void)
15
- {
16
- gl_FragColor = Color;
17
- }
@@ -1,406 +0,0 @@
1
- #
2
- # Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
3
- # All rights reserved.
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions
7
- # are met:
8
- #
9
- # Redistributions of source code must retain the above copyright
10
- # notice, this list of conditions and the following disclaimer.
11
- #
12
- # Redistributions in binary form must reproduce the above
13
- # copyright notice, this list of conditions and the following
14
- # disclaimer in the documentation and/or other materials provided
15
- # with the distribution.
16
- #
17
- # Neither the name of 3Dlabs Inc. Ltd. nor the names of its
18
- # contributors may be used to endorse or promote products derived
19
- # from this software without specific prior written permission.
20
- #
21
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
- # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
- # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
- # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
- # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
- # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
- # POSSIBILITY OF SUCH DAMAGE.
33
- require 'opengl'
34
- include Gl,Glu,Glut
35
-
36
- $particleTime = 0
37
-
38
- # Movement variables
39
- $fXDiff = 206
40
- $fYDiff = 16
41
- $fZDiff = 10
42
- $xLastIncr = 0
43
- $yLastIncr = 0
44
- $fXInertia = -0.5
45
- $fYInertia = 0
46
- $fXInertiaOld
47
- $fYInertiaOld
48
- $fScale = 0.25
49
- $ftime = 0
50
- $xLast = -1
51
- $yLast = -1
52
- $bmModifiers = 0
53
- $rotate = 1
54
-
55
- $programObject = 0
56
- $vertexShaderObject = 0
57
- $fragmentShaderObject = 0
58
-
59
- # Rotation defines
60
- INERTIA_THRESHOLD = 1.0
61
- INERTIA_FACTOR = 0.5
62
- SCALE_FACTOR = 0.01
63
- SCALE_INCREMENT = 0.5
64
- TIMER_FREQUENCY_MILLIS = 20
65
-
66
- VELOCITY_ARRAY = 3
67
- START_TIME_ARRAY = 4
68
-
69
- $clearColor = [[0,0,0,1], [0.2,0.2,0.3,1], [0.7,0.7,0.7,1]]
70
-
71
- $arrayWidth = 0, $arrayHeight = 0
72
- $verts = []
73
- $colors = []
74
- $velocities = []
75
- $startTimes = []
76
-
77
- def nextClearColor
78
- glClearColor($clearColor[0][0],
79
- $clearColor[0][1],
80
- $clearColor[0][2],
81
- $clearColor[0][3])
82
- $clearColor << $clearColor.shift # rotate
83
- end
84
-
85
- def getUniLoc(program, name)
86
- loc = glGetUniformLocation(program, name)
87
-
88
- if (loc == -1)
89
- puts "No such uniform named #{name}"
90
- end
91
- return loc
92
- end
93
-
94
- def updateAnim
95
- location = getUniLoc($programObject,"Time")
96
-
97
- $particleTime += 0.002
98
- if $particleTime > 15.0
99
- $particleTime = 0.0
100
- end
101
-
102
- glUniform1f(location,$particleTime)
103
- end
104
-
105
- def drawPoints
106
- glPointSize(2.0)
107
- glVertexPointer(3, GL_FLOAT, 0, $verts)
108
- glColorPointer(3, GL_FLOAT, 0, $colors)
109
- glVertexAttribPointer(VELOCITY_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, $velocities)
110
- glVertexAttribPointer(START_TIME_ARRAY, 1, GL_FLOAT, GL_FALSE, 0, $startTimes)
111
-
112
- glEnableClientState(GL_VERTEX_ARRAY)
113
- glEnableClientState(GL_COLOR_ARRAY)
114
- glEnableVertexAttribArray(VELOCITY_ARRAY)
115
- glEnableVertexAttribArray(START_TIME_ARRAY)
116
-
117
- glDrawArrays(GL_POINTS, 0, $arrayWidth * $arrayHeight)
118
-
119
- glDisableClientState(GL_VERTEX_ARRAY)
120
- glDisableClientState(GL_COLOR_ARRAY)
121
- glDisableVertexAttribArray(VELOCITY_ARRAY)
122
- glDisableVertexAttribArray(START_TIME_ARRAY)
123
- end
124
-
125
- def createPoints(w,h)
126
- $verts = []
127
- $colors = []
128
- $velocities = []
129
- $startTimes = []
130
-
131
- i = 0.5 / w - 0.5
132
- while (i<0.5)
133
- j = 0.5 / h - 0.5
134
- while (j<0.5)
135
- $verts << i
136
- $verts << 0.0
137
- $verts << j
138
-
139
- $colors << rand() * 0.5 + 0.5
140
- $colors << rand() * 0.5 + 0.5
141
- $colors << rand() * 0.5 + 0.5
142
-
143
- $velocities << rand() + 3.0
144
- $velocities << rand() * 10.0
145
- $velocities << rand() + 3.0
146
-
147
- $startTimes << rand() * 10.0
148
-
149
- j += 1.0/h
150
- end
151
- i += 1.0/w
152
- end
153
- # convert from ruby Array to memory representation of float data that
154
- # will be passed as array pointers to GL
155
- $verts = $verts.pack("f*")
156
- $colors = $colors.pack("f*")
157
- $velocities = $velocities.pack("f*")
158
- $startTimes = $startTimes.pack("f*")
159
-
160
- $arrayWidth = w
161
- $arrayHeight = h
162
- end
163
-
164
- play = lambda do
165
- thisTime = glutGet(GLUT_ELAPSED_TIME)
166
- updateAnim()
167
- glutPostRedisplay()
168
- end
169
-
170
- display = lambda do
171
- glLoadIdentity()
172
- glTranslatef(0.0, 0.0, -5.0)
173
-
174
- glRotatef($fYDiff, 1,0,0)
175
- glRotatef($fXDiff, 0,1,0)
176
- glRotatef($fZDiff, 0,0,1)
177
-
178
- glScalef($fScale, $fScale, $fScale)
179
-
180
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
181
-
182
- drawPoints()
183
-
184
- glFlush()
185
- glutSwapBuffers()
186
- end
187
-
188
- key = lambda do |key,x,y|
189
- $particleTime = 0
190
-
191
- case(key)
192
- when ?b
193
- nextClearColor()
194
- when ?q, ?\e # esc
195
- exit(0)
196
- when ?\s # space
197
- $rotate = !$rotate
198
-
199
- if ($rotate==false)
200
- $fXInertiaOld = $fXInertia
201
- $fYInertiaOld = $fYInertia
202
- else
203
- $fXInertia = $fXInertiaOld
204
- $fYInertia = $fYInertiaOld
205
-
206
- # To prevent confusion, force some rotation
207
- if ($fXInertia == 0 && $fYInertia == 0)
208
- $fXInertia = -0.5
209
- end
210
- end
211
- when ?+
212
- $fScale += SCALE_INCREMENT
213
- when ?-
214
- $fScale -= SCALE_INCREMENT
215
- else
216
- puts "Keyboard commands:\n"
217
- puts "b - Toggle among background clear colors"
218
- puts "q, <esc> - Quit"
219
- puts "? - Help"
220
- puts "<home> - reset zoom and rotation"
221
- puts "<space> or <click> - stop rotation"
222
- puts "<+>, <-> or <ctrl + drag> - zoom model"
223
- puts "<arrow keys> or <drag> - rotate model\n"
224
- end
225
- end
226
-
227
- reshape = lambda do |w,h|
228
- vp = 0.8
229
- aspect = w/h
230
-
231
- glViewport(0, 0, w, h)
232
- glMatrixMode(GL_PROJECTION)
233
- glLoadIdentity()
234
-
235
- glFrustum(-vp, vp, -vp / aspect, vp / aspect, 3, 10.0)
236
-
237
- glMatrixMode(GL_MODELVIEW)
238
- glLoadIdentity()
239
- glTranslatef(0.0, 0.0, -5.0)
240
- end
241
-
242
- motion = lambda do |x,y|
243
- if ($xLast != -1 || $yLast != -1)
244
- $xLastIncr = x - $xLast
245
- $yLastIncr = y - $yLast
246
- if ($bmModifiers & GLUT_ACTIVE_CTRL != 0)
247
- if ($xLast != -1)
248
- $fZDiff += $xLastIncr
249
- $fScale += $yLastIncr*SCALE_FACTOR
250
- end
251
- else
252
- if ($xLast != -1)
253
- $fXDiff += $xLastIncr
254
- $fYDiff += $yLastIncr
255
- end
256
- end
257
- end
258
- $xLast = x
259
- $yLast = y
260
- end
261
-
262
- mouse = lambda do |button,state,x,y|
263
- $bmModifiers = glutGetModifiers()
264
- if (button == GLUT_LEFT_BUTTON)
265
- if (state == GLUT_UP)
266
- $xLast = -1
267
- $yLast = -1
268
- if $xLastIncr > INERTIA_THRESHOLD
269
- $fXInertia = ($xLastIncr - INERTIA_THRESHOLD)*INERTIA_FACTOR
270
- end
271
- if -$xLastIncr > INERTIA_THRESHOLD
272
- $fXInertia = ($xLastIncr + INERTIA_THRESHOLD)*INERTIA_FACTOR
273
- end
274
-
275
- if $yLastIncr > INERTIA_THRESHOLD
276
- $fYInertia = ($yLastIncr - INERTIA_THRESHOLD)*INERTIA_FACTOR
277
- end
278
- if -$yLastIncr > INERTIA_THRESHOLD
279
- $fYInertia = ($yLastIncr + INERTIA_THRESHOLD)*INERTIA_FACTOR
280
- end
281
- else
282
- $fXInertia = 0
283
- $fYInertia = 0
284
- end
285
- $xLastIncr = 0
286
- $yLastIncr = 0
287
- end
288
- end
289
-
290
- special = lambda do |key,x,y|
291
- case key
292
- when GLUT_KEY_HOME:
293
- $fXDiff = 206
294
- $fYDiff = 16
295
- $fZDiff = 10
296
- $xLastIncr = 0
297
- $yLastIncr = 0
298
- $fXInertia = -0.5
299
- $fYInertia = 0
300
- $fScale = 0.25
301
- $particleTime = 0
302
- when GLUT_KEY_LEFT:
303
- $fXDiff -= 1
304
- when GLUT_KEY_RIGHT:
305
- $fXDiff += 1
306
- when GLUT_KEY_UP:
307
- $fYDiff -= 1
308
- when GLUT_KEY_DOWN:
309
- $fYDiff += 1
310
- end
311
- end
312
-
313
- timer = lambda do |value|
314
- $ftime += 0.01
315
- if $rotate
316
- $fXDiff += $fXInertia
317
- $fYDiff += $fYInertia
318
- end
319
- glutTimerFunc(TIMER_FREQUENCY_MILLIS , timer, 0)
320
- end
321
-
322
- def installParticleShaders(vs_name,fs_name)
323
- # Create a vertex shader object and a fragment shader object
324
- $vertexShaderObject = glCreateShader(GL_VERTEX_SHADER)
325
- $fragmentShaderObject = glCreateShader(GL_FRAGMENT_SHADER)
326
-
327
- # Load source code strings into shaders
328
- glShaderSource($vertexShaderObject, File.read(vs_name))
329
- glShaderSource($fragmentShaderObject, File.read(fs_name))
330
-
331
- # Compile the particle vertex shader, and print out
332
- # the compiler log file.
333
- glCompileShader($vertexShaderObject)
334
- vertCompiled = glGetShaderiv($vertexShaderObject, GL_COMPILE_STATUS)
335
- puts "Shader InfoLog:\n#{glGetShaderInfoLog($vertexShaderObject)}\n"
336
-
337
- # Compile the particle fragment shader, and print out
338
- # the compiler log file.
339
- glCompileShader($fragmentShaderObject)
340
- fragCompiled = glGetShaderiv($fragmentShaderObject, GL_COMPILE_STATUS)
341
- puts "Shader InfoLog:\n#{glGetShaderInfoLog($fragmentShaderObject)}\n"
342
-
343
- return false if (vertCompiled == 0 || fragCompiled == 0)
344
-
345
- # Create a program object and attach the two compiled shaders
346
- $programObject = glCreateProgram()
347
- glAttachShader($programObject, $vertexShaderObject)
348
- glAttachShader($programObject, $fragmentShaderObject)
349
-
350
- #Bind generic attribute indices to attribute variable names
351
- glBindAttribLocation($programObject, VELOCITY_ARRAY, "Velocity")
352
- glBindAttribLocation($programObject, START_TIME_ARRAY, "StartTime");
353
-
354
- # Link the program object and print out the info log
355
- glLinkProgram($programObject)
356
- linked = glGetProgramiv($programObject, GL_LINK_STATUS)
357
- puts "Program InfoLog:\n#{glGetProgramInfoLog($programObject)}\n"
358
-
359
- return false if linked==0
360
-
361
- # Install program object as part of current state
362
- glUseProgram($programObject)
363
-
364
- # Set up initial uniform values
365
- glUniform4f(getUniLoc($programObject, "Background"), 0.0, 0.0, 0.0, 1.0)
366
- glUniform1f(getUniLoc($programObject, "Time"), -5.0)
367
-
368
- return true
369
- end
370
-
371
- # Main
372
- glutInit()
373
- glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE)
374
- glutInitWindowSize(500, 500)
375
- glutInitWindowPosition(100,100)
376
- window = glutCreateWindow("3Dlabs OpenGL Shading Language Particle System Demo")
377
-
378
- glutIdleFunc(play)
379
- glutDisplayFunc(display)
380
- glutKeyboardFunc(key)
381
- glutReshapeFunc(reshape)
382
- glutMotionFunc(motion)
383
- glutMouseFunc(mouse)
384
- glutSpecialFunc(special)
385
- glutTimerFunc(TIMER_FREQUENCY_MILLIS , timer, 0)
386
-
387
- # Make sure that OpenGL 2.0 is supported by the driver
388
- if Gl.is_available?(2.0)==false
389
- major,minor,*rest = glGetString(GL_VERSION).split(/\.| /)
390
- puts "GL_VERSION major=#{major} minor=#{minor}"
391
- puts "Support for OpenGL 2.0 is required for this demo...exiting"
392
- exit(1)
393
- end
394
-
395
- createPoints(100, 100)
396
-
397
- glDepthFunc(GL_LESS)
398
- glEnable(GL_DEPTH_TEST)
399
- nextClearColor()
400
-
401
- key.call('?', 0, 0)
402
-
403
- success = installParticleShaders("particle.vert", "particle.frag")
404
- if (success)
405
- glutMainLoop()
406
- end