ruby-glfw 0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (206) hide show
  1. data/README +1 -0
  2. data/README.API +73 -0
  3. data/Rakefile +120 -0
  4. data/examples/boing.rb +519 -0
  5. data/examples/gears.rb +327 -0
  6. data/examples/keytest.rb +117 -0
  7. data/examples/listmodes.rb +20 -0
  8. data/examples/mipmaps.rb +104 -0
  9. data/examples/mipmaps.tga +0 -0
  10. data/examples/particles.rb +837 -0
  11. data/examples/pong3d.rb +741 -0
  12. data/examples/pong3d_field.tga +0 -0
  13. data/examples/pong3d_instr.tga +0 -0
  14. data/examples/pong3d_menu.tga +0 -0
  15. data/examples/pong3d_title.tga +0 -0
  16. data/examples/pong3d_winner1.tga +0 -0
  17. data/examples/pong3d_winner2.tga +0 -0
  18. data/examples/splitview.rb +432 -0
  19. data/examples/triangle.rb +89 -0
  20. data/examples/wave.rb +294 -0
  21. data/ext/glfw/glfw.c +1094 -0
  22. data/ext/glfw/mkrf_conf.rb +70 -0
  23. data/glfw-src/Makefile +220 -0
  24. data/glfw-src/compile.ami +61 -0
  25. data/glfw-src/compile.bat +217 -0
  26. data/glfw-src/compile.sh +607 -0
  27. data/glfw-src/docs/Makefile +57 -0
  28. data/glfw-src/docs/Reference.pdf +0 -0
  29. data/glfw-src/docs/UsersGuide.pdf +0 -0
  30. data/glfw-src/docs/cleanup.bat +22 -0
  31. data/glfw-src/docs/glfwdoc.sty +80 -0
  32. data/glfw-src/docs/glfwrm.tex +3034 -0
  33. data/glfw-src/docs/glfwug.tex +2024 -0
  34. data/glfw-src/docs/readme.txt +80 -0
  35. data/glfw-src/examples/Makefile.amigaos.gcc +70 -0
  36. data/glfw-src/examples/Makefile.amigaos.vbcc +70 -0
  37. data/glfw-src/examples/Makefile.dos.djgpp +71 -0
  38. data/glfw-src/examples/Makefile.macosx.gcc +96 -0
  39. data/glfw-src/examples/Makefile.win32.bcc +75 -0
  40. data/glfw-src/examples/Makefile.win32.cross-mgw +79 -0
  41. data/glfw-src/examples/Makefile.win32.cygwin +79 -0
  42. data/glfw-src/examples/Makefile.win32.lcc +74 -0
  43. data/glfw-src/examples/Makefile.win32.mgw +75 -0
  44. data/glfw-src/examples/Makefile.win32.msvc +74 -0
  45. data/glfw-src/examples/Makefile.win32.ow +74 -0
  46. data/glfw-src/examples/Makefile.win32.pellesc +74 -0
  47. data/glfw-src/examples/Makefile.x11.in +54 -0
  48. data/glfw-src/examples/boing.c +606 -0
  49. data/glfw-src/examples/bundle.sh +46 -0
  50. data/glfw-src/examples/gears.c +382 -0
  51. data/glfw-src/examples/keytest.c +264 -0
  52. data/glfw-src/examples/listmodes.c +48 -0
  53. data/glfw-src/examples/mipmaps.c +126 -0
  54. data/glfw-src/examples/mipmaps.tga +0 -0
  55. data/glfw-src/examples/mtbench.c +301 -0
  56. data/glfw-src/examples/mthello.c +48 -0
  57. data/glfw-src/examples/particles.c +1148 -0
  58. data/glfw-src/examples/pong3d.c +839 -0
  59. data/glfw-src/examples/pong3d_field.tga +0 -0
  60. data/glfw-src/examples/pong3d_instr.tga +0 -0
  61. data/glfw-src/examples/pong3d_menu.tga +0 -0
  62. data/glfw-src/examples/pong3d_title.tga +0 -0
  63. data/glfw-src/examples/pong3d_winner1.tga +0 -0
  64. data/glfw-src/examples/pong3d_winner2.tga +0 -0
  65. data/glfw-src/examples/splitview.c +506 -0
  66. data/glfw-src/examples/triangle.c +108 -0
  67. data/glfw-src/examples/wave.c +397 -0
  68. data/glfw-src/images/opengl.gif +0 -0
  69. data/glfw-src/images/osicert.gif +0 -0
  70. data/glfw-src/include/GL/glfw.h +486 -0
  71. data/glfw-src/lib/amigaos/Makefile.amigaos.gcc +128 -0
  72. data/glfw-src/lib/amigaos/Makefile.amigaos.vbcc +128 -0
  73. data/glfw-src/lib/amigaos/SDI_compiler.h +94 -0
  74. data/glfw-src/lib/amigaos/amigaos_enable.c +51 -0
  75. data/glfw-src/lib/amigaos/amigaos_fullscreen.c +319 -0
  76. data/glfw-src/lib/amigaos/amigaos_glext.c +61 -0
  77. data/glfw-src/lib/amigaos/amigaos_init.c +284 -0
  78. data/glfw-src/lib/amigaos/amigaos_joystick.c +359 -0
  79. data/glfw-src/lib/amigaos/amigaos_thread.c +494 -0
  80. data/glfw-src/lib/amigaos/amigaos_time.c +206 -0
  81. data/glfw-src/lib/amigaos/amigaos_window.c +830 -0
  82. data/glfw-src/lib/amigaos/platform.h +337 -0
  83. data/glfw-src/lib/dos/Makefile.dos.djgpp +146 -0
  84. data/glfw-src/lib/dos/dos_enable.c +51 -0
  85. data/glfw-src/lib/dos/dos_events.c +173 -0
  86. data/glfw-src/lib/dos/dos_fullscreen.c +101 -0
  87. data/glfw-src/lib/dos/dos_glext.c +59 -0
  88. data/glfw-src/lib/dos/dos_init.c +105 -0
  89. data/glfw-src/lib/dos/dos_irq.s +246 -0
  90. data/glfw-src/lib/dos/dos_joystick.c +94 -0
  91. data/glfw-src/lib/dos/dos_keyboard.c +694 -0
  92. data/glfw-src/lib/dos/dos_mouse.c +337 -0
  93. data/glfw-src/lib/dos/dos_thread.c +267 -0
  94. data/glfw-src/lib/dos/dos_time.c +309 -0
  95. data/glfw-src/lib/dos/dos_window.c +563 -0
  96. data/glfw-src/lib/dos/platform.h +341 -0
  97. data/glfw-src/lib/enable.c +295 -0
  98. data/glfw-src/lib/fullscreen.c +95 -0
  99. data/glfw-src/lib/glext.c +201 -0
  100. data/glfw-src/lib/image.c +629 -0
  101. data/glfw-src/lib/init.c +108 -0
  102. data/glfw-src/lib/input.c +280 -0
  103. data/glfw-src/lib/internal.h +210 -0
  104. data/glfw-src/lib/joystick.c +101 -0
  105. data/glfw-src/lib/macosx/Makefile.macosx.gcc +172 -0
  106. data/glfw-src/lib/macosx/Makefile.macosx.gcc.universal +166 -0
  107. data/glfw-src/lib/macosx/libglfw.pc.in +11 -0
  108. data/glfw-src/lib/macosx/macosx_enable.c +42 -0
  109. data/glfw-src/lib/macosx/macosx_fullscreen.c +126 -0
  110. data/glfw-src/lib/macosx/macosx_glext.c +52 -0
  111. data/glfw-src/lib/macosx/macosx_init.c +194 -0
  112. data/glfw-src/lib/macosx/macosx_joystick.c +50 -0
  113. data/glfw-src/lib/macosx/macosx_thread.c +414 -0
  114. data/glfw-src/lib/macosx/macosx_time.c +112 -0
  115. data/glfw-src/lib/macosx/macosx_window.c +1279 -0
  116. data/glfw-src/lib/macosx/platform.h +349 -0
  117. data/glfw-src/lib/stream.c +194 -0
  118. data/glfw-src/lib/tga.c +405 -0
  119. data/glfw-src/lib/thread.c +340 -0
  120. data/glfw-src/lib/time.c +83 -0
  121. data/glfw-src/lib/win32/Makefile.win32.bcc +265 -0
  122. data/glfw-src/lib/win32/Makefile.win32.cross-mgw +274 -0
  123. data/glfw-src/lib/win32/Makefile.win32.cygwin +279 -0
  124. data/glfw-src/lib/win32/Makefile.win32.lcc +246 -0
  125. data/glfw-src/lib/win32/Makefile.win32.mgw +243 -0
  126. data/glfw-src/lib/win32/Makefile.win32.msvc +242 -0
  127. data/glfw-src/lib/win32/Makefile.win32.ow +242 -0
  128. data/glfw-src/lib/win32/Makefile.win32.pellesc +242 -0
  129. data/glfw-src/lib/win32/glfwdll.def +67 -0
  130. data/glfw-src/lib/win32/glfwdll_mgw1.def +67 -0
  131. data/glfw-src/lib/win32/glfwdll_mgw2.def +67 -0
  132. data/glfw-src/lib/win32/glfwdll_pellesc.def +65 -0
  133. data/glfw-src/lib/win32/libglfw.pc.in +11 -0
  134. data/glfw-src/lib/win32/platform.h +474 -0
  135. data/glfw-src/lib/win32/win32_dllmain.c +60 -0
  136. data/glfw-src/lib/win32/win32_enable.c +155 -0
  137. data/glfw-src/lib/win32/win32_fullscreen.c +317 -0
  138. data/glfw-src/lib/win32/win32_glext.c +85 -0
  139. data/glfw-src/lib/win32/win32_init.c +356 -0
  140. data/glfw-src/lib/win32/win32_joystick.c +234 -0
  141. data/glfw-src/lib/win32/win32_thread.c +511 -0
  142. data/glfw-src/lib/win32/win32_time.c +146 -0
  143. data/glfw-src/lib/win32/win32_window.c +1714 -0
  144. data/glfw-src/lib/window.c +727 -0
  145. data/glfw-src/lib/x11/Makefile.x11.in +243 -0
  146. data/glfw-src/lib/x11/platform.h +415 -0
  147. data/glfw-src/lib/x11/x11_enable.c +51 -0
  148. data/glfw-src/lib/x11/x11_fullscreen.c +524 -0
  149. data/glfw-src/lib/x11/x11_glext.c +69 -0
  150. data/glfw-src/lib/x11/x11_init.c +275 -0
  151. data/glfw-src/lib/x11/x11_joystick.c +371 -0
  152. data/glfw-src/lib/x11/x11_keysym2unicode.c +902 -0
  153. data/glfw-src/lib/x11/x11_thread.c +507 -0
  154. data/glfw-src/lib/x11/x11_time.c +154 -0
  155. data/glfw-src/lib/x11/x11_window.c +1746 -0
  156. data/glfw-src/license.txt +21 -0
  157. data/glfw-src/readme.html +927 -0
  158. data/glfw-src/support/d/examples/Makefile +59 -0
  159. data/glfw-src/support/d/examples/boing.d +610 -0
  160. data/glfw-src/support/d/examples/gears.d +379 -0
  161. data/glfw-src/support/d/examples/keytest.d +272 -0
  162. data/glfw-src/support/d/examples/listmodes.d +48 -0
  163. data/glfw-src/support/d/examples/mipmaps.d +126 -0
  164. data/glfw-src/support/d/examples/mtbench.d +304 -0
  165. data/glfw-src/support/d/examples/mthello.d +54 -0
  166. data/glfw-src/support/d/examples/particles.d +1150 -0
  167. data/glfw-src/support/d/examples/pong3d.d +840 -0
  168. data/glfw-src/support/d/examples/splitview.d +486 -0
  169. data/glfw-src/support/d/examples/triangle.d +108 -0
  170. data/glfw-src/support/d/examples/wave.d +400 -0
  171. data/glfw-src/support/d/imports/gl.d +4539 -0
  172. data/glfw-src/support/d/imports/glfw.d +349 -0
  173. data/glfw-src/support/d/imports/glu.d +328 -0
  174. data/glfw-src/support/d/lib/glfwdll.def +64 -0
  175. data/glfw-src/support/d/lib/glu32.def +56 -0
  176. data/glfw-src/support/d/lib/makefile +12 -0
  177. data/glfw-src/support/d/lib/opengl32.def +372 -0
  178. data/glfw-src/support/d/readme.html +83 -0
  179. data/glfw-src/support/delphi/examples/Triangle.dpr +105 -0
  180. data/glfw-src/support/delphi/lib/glfw.pas +437 -0
  181. data/glfw-src/support/delphi/readme.html +97 -0
  182. data/glfw-src/support/lua/examples/gears.lua +383 -0
  183. data/glfw-src/support/lua/examples/test1.lua +68 -0
  184. data/glfw-src/support/lua/readme.html +128 -0
  185. data/glfw-src/support/lua/src/luaglfw.c +1179 -0
  186. data/glfw-src/support/lua/src/luaglfw.h +48 -0
  187. data/glfw-src/support/lua/src/runlua.c +82 -0
  188. data/glfw-src/support/masm/examples/fpc.mac +47 -0
  189. data/glfw-src/support/masm/examples/makeit.bat +66 -0
  190. data/glfw-src/support/masm/examples/triangle.asm +232 -0
  191. data/glfw-src/support/masm/include/glfw.inc +326 -0
  192. data/glfw-src/support/masm/include/glu32.inc +55 -0
  193. data/glfw-src/support/masm/include/opengl32.inc +372 -0
  194. data/glfw-src/support/masm/lib/glfwdll.lib +0 -0
  195. data/glfw-src/support/masm/readme.html +170 -0
  196. data/glfw-src/support/msvc80/GLFW.sln +26 -0
  197. data/glfw-src/support/msvc80/GLFW.vcproj +257 -0
  198. data/glfw-src/support/msvc80/GLFWDLL.vcproj +287 -0
  199. data/glfw-src/support/visualbasic/bindings/glfw.bas +320 -0
  200. data/glfw-src/support/visualbasic/bindings/glu32.bas +284 -0
  201. data/glfw-src/support/visualbasic/bindings/opengl32.bas +999 -0
  202. data/glfw-src/support/visualbasic/examples/Triangle.bas +101 -0
  203. data/glfw-src/support/visualbasic/readme.html +164 -0
  204. data/website/index.html +84 -0
  205. data/website/style.css +110 -0
  206. metadata +301 -0
@@ -0,0 +1,46 @@
1
+ #!/bin/sh
2
+
3
+ # Creates application bundles for use on Mac OS X.
4
+
5
+ if [ -z "$1" ]; then
6
+ echo "usage: `basename $0` BUNDLE-NAME"
7
+ exit 1
8
+ fi
9
+
10
+ bundle_name="$1"
11
+
12
+ if [ ! -d "${bundle_name}.app/Contents/MacOS" ]; then
13
+ mkdir -p "${bundle_name}.app/Contents/MacOS"
14
+ fi
15
+
16
+ if [ ! -d "${bundle_name}.app/Contents/Resources" ]; then
17
+ mkdir -p "${bundle_name}.app/Contents/Resources"
18
+ fi
19
+
20
+ if [ ! -f "${bundle_name}.app/Contents/PkgInfo" ]; then
21
+ echo -n "APPL????" > "${bundle_name}.app/Contents/PkgInfo"
22
+ fi
23
+
24
+ if [ ! -f "${bundle_name}.app/Contents/Info.plist" ]; then
25
+ cat > "${bundle_name}.app/Contents/Info.plist" <<EOF
26
+ <?xml version="1.0" encoding="UTF-8"?>
27
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
28
+ <plist version="1.0">
29
+ <dict>
30
+ <key>CFBundleDevelopmentRegion</key>
31
+ <string>English</string>
32
+ <key>CFBundleExecutable</key>
33
+ <string>${bundle_name}</string>
34
+ <key>CFBundleInfoDictionaryVersion</key>
35
+ <string>6.0</string>
36
+ <key>CFBundlePackageType</key>
37
+ <string>APPL</string>
38
+ <key>CFBundleSignature</key>
39
+ <string>????</string>
40
+ <key>CFBundleVersion</key>
41
+ <string>0.1</string>
42
+ </dict>
43
+ </plist>
44
+ EOF
45
+ fi
46
+
@@ -0,0 +1,382 @@
1
+ /*
2
+ * 3-D gear wheels. This program is in the public domain.
3
+ *
4
+ * Command line options:
5
+ * -info print GL implementation information
6
+ * -exit automatically exit after 30 seconds
7
+ *
8
+ *
9
+ * Brian Paul
10
+ *
11
+ *
12
+ * Marcus Geelnard:
13
+ * - Conversion to GLFW
14
+ * - Time based rendering (frame rate independent)
15
+ * - Slightly modified camera that should work better for stereo viewing
16
+ */
17
+
18
+
19
+ #include <math.h>
20
+ #include <stdlib.h>
21
+ #include <stdio.h>
22
+ #include <string.h>
23
+ #include <GL/glfw.h>
24
+
25
+ #ifndef M_PI
26
+ #define M_PI 3.141592654
27
+ #endif
28
+
29
+ static int running = 1;
30
+ static double t0 = 0.0;
31
+ static double t;
32
+ static double dt;
33
+
34
+ static int Frames = 0;
35
+ static int autoexit = 0;
36
+
37
+ /**
38
+
39
+ Draw a gear wheel. You'll probably want to call this function when
40
+ building a display list since we do a lot of trig here.
41
+
42
+ Input: inner_radius - radius of hole at center
43
+ outer_radius - radius at center of teeth
44
+ width - width of gear
45
+ teeth - number of teeth
46
+ tooth_depth - depth of tooth
47
+
48
+ **/
49
+
50
+ static void
51
+ gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
52
+ GLint teeth, GLfloat tooth_depth)
53
+ {
54
+ GLint i;
55
+ GLfloat r0, r1, r2;
56
+ GLfloat angle, da;
57
+ GLfloat u, v, len;
58
+
59
+ r0 = inner_radius;
60
+ r1 = outer_radius - tooth_depth / 2.0;
61
+ r2 = outer_radius + tooth_depth / 2.0;
62
+
63
+ da = 2.0 * M_PI / teeth / 4.0;
64
+
65
+ glShadeModel(GL_FLAT);
66
+
67
+ glNormal3f(0.0, 0.0, 1.0);
68
+
69
+ /* draw front face */
70
+ glBegin(GL_QUAD_STRIP);
71
+ for (i = 0; i <= teeth; i++) {
72
+ angle = i * 2.0 * M_PI / teeth;
73
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
74
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
75
+ if (i < teeth) {
76
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
77
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
78
+ }
79
+ }
80
+ glEnd();
81
+
82
+ /* draw front sides of teeth */
83
+ glBegin(GL_QUADS);
84
+ da = 2.0 * M_PI / teeth / 4.0;
85
+ for (i = 0; i < teeth; i++) {
86
+ angle = i * 2.0 * M_PI / teeth;
87
+
88
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
89
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
90
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
91
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
92
+ }
93
+ glEnd();
94
+
95
+ glNormal3f(0.0, 0.0, -1.0);
96
+
97
+ /* draw back face */
98
+ glBegin(GL_QUAD_STRIP);
99
+ for (i = 0; i <= teeth; i++) {
100
+ angle = i * 2.0 * M_PI / teeth;
101
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
102
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
103
+ if (i < teeth) {
104
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
105
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
106
+ }
107
+ }
108
+ glEnd();
109
+
110
+ /* draw back sides of teeth */
111
+ glBegin(GL_QUADS);
112
+ da = 2.0 * M_PI / teeth / 4.0;
113
+ for (i = 0; i < teeth; i++) {
114
+ angle = i * 2.0 * M_PI / teeth;
115
+
116
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
117
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
118
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
119
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
120
+ }
121
+ glEnd();
122
+
123
+ /* draw outward faces of teeth */
124
+ glBegin(GL_QUAD_STRIP);
125
+ for (i = 0; i < teeth; i++) {
126
+ angle = i * 2.0 * M_PI / teeth;
127
+
128
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
129
+ glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
130
+ u = r2 * cos(angle + da) - r1 * cos(angle);
131
+ v = r2 * sin(angle + da) - r1 * sin(angle);
132
+ len = sqrt(u * u + v * v);
133
+ u /= len;
134
+ v /= len;
135
+ glNormal3f(v, -u, 0.0);
136
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
137
+ glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
138
+ glNormal3f(cos(angle), sin(angle), 0.0);
139
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
140
+ glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
141
+ u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
142
+ v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
143
+ glNormal3f(v, -u, 0.0);
144
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
145
+ glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
146
+ glNormal3f(cos(angle), sin(angle), 0.0);
147
+ }
148
+
149
+ glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
150
+ glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
151
+
152
+ glEnd();
153
+
154
+ glShadeModel(GL_SMOOTH);
155
+
156
+ /* draw inside radius cylinder */
157
+ glBegin(GL_QUAD_STRIP);
158
+ for (i = 0; i <= teeth; i++) {
159
+ angle = i * 2.0 * M_PI / teeth;
160
+ glNormal3f(-cos(angle), -sin(angle), 0.0);
161
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
162
+ glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
163
+ }
164
+ glEnd();
165
+
166
+ }
167
+
168
+
169
+ static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
170
+ static GLint gear1, gear2, gear3;
171
+ static GLfloat angle = 0.0;
172
+
173
+ /* OpenGL draw function & timing */
174
+ static void draw(void)
175
+ {
176
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
177
+
178
+ glPushMatrix();
179
+ glRotatef(view_rotx, 1.0, 0.0, 0.0);
180
+ glRotatef(view_roty, 0.0, 1.0, 0.0);
181
+ glRotatef(view_rotz, 0.0, 0.0, 1.0);
182
+
183
+ glPushMatrix();
184
+ glTranslatef(-3.0, -2.0, 0.0);
185
+ glRotatef(angle, 0.0, 0.0, 1.0);
186
+ glCallList(gear1);
187
+ glPopMatrix();
188
+
189
+ glPushMatrix();
190
+ glTranslatef(3.1, -2.0, 0.0);
191
+ glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
192
+ glCallList(gear2);
193
+ glPopMatrix();
194
+
195
+ glPushMatrix();
196
+ glTranslatef(-3.1, 4.2, 0.0);
197
+ glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
198
+ glCallList(gear3);
199
+ glPopMatrix();
200
+
201
+ glPopMatrix();
202
+
203
+ Frames++;
204
+
205
+ {
206
+ double t_new = glfwGetTime();
207
+ dt = t_new - t;
208
+ t = t_new;
209
+
210
+ if (t - t0 >= 5.0)
211
+ {
212
+ double seconds = t - t0;
213
+ double fps = Frames / seconds;
214
+ printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps);
215
+ t0 = t;
216
+ Frames = 0;
217
+ if ((t >= 0.999 * autoexit) && (autoexit))
218
+ {
219
+ running = 0;
220
+ }
221
+ }
222
+ }
223
+ }
224
+
225
+
226
+ /* update animation parameters */
227
+ static void animate(void)
228
+ {
229
+ angle += 100.0*dt;
230
+ }
231
+
232
+
233
+ /* change view angle, exit upon ESC */
234
+ void GLFWCALL key( int k, int action )
235
+ {
236
+ if( action != GLFW_PRESS ) return;
237
+
238
+ switch (k) {
239
+ case 'Z':
240
+ if( glfwGetKey( GLFW_KEY_LSHIFT ) )
241
+ view_rotz -= 5.0;
242
+ else
243
+ view_rotz += 5.0;
244
+ break;
245
+ case GLFW_KEY_ESC:
246
+ running = 0;
247
+ break;
248
+ case GLFW_KEY_UP:
249
+ view_rotx += 5.0;
250
+ break;
251
+ case GLFW_KEY_DOWN:
252
+ view_rotx -= 5.0;
253
+ break;
254
+ case GLFW_KEY_LEFT:
255
+ view_roty += 5.0;
256
+ break;
257
+ case GLFW_KEY_RIGHT:
258
+ view_roty -= 5.0;
259
+ break;
260
+ default:
261
+ return;
262
+ }
263
+ }
264
+
265
+
266
+ /* new window size */
267
+ void GLFWCALL reshape( int width, int height )
268
+ {
269
+ GLfloat h = (GLfloat) height / (GLfloat) width;
270
+ GLfloat xmax, znear, zfar;
271
+
272
+ znear = 5.0f;
273
+ zfar = 30.0f;
274
+ xmax = znear * 0.5;
275
+
276
+ glViewport( 0, 0, (GLint) width, (GLint) height );
277
+ glMatrixMode( GL_PROJECTION );
278
+ glLoadIdentity();
279
+ glFrustum( -xmax, xmax, -xmax*h, xmax*h, znear, zfar );
280
+ glMatrixMode( GL_MODELVIEW );
281
+ glLoadIdentity();
282
+ glTranslatef( 0.0, 0.0, -20.0 );
283
+ }
284
+
285
+
286
+ /* program & OpenGL initialization */
287
+ static void init(int argc, char *argv[])
288
+ {
289
+ static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0};
290
+ static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
291
+ static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
292
+ static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};
293
+ GLint i;
294
+
295
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
296
+ glEnable(GL_CULL_FACE);
297
+ glEnable(GL_LIGHTING);
298
+ glEnable(GL_LIGHT0);
299
+ glEnable(GL_DEPTH_TEST);
300
+
301
+ /* make the gears */
302
+ gear1 = glGenLists(1);
303
+ glNewList(gear1, GL_COMPILE);
304
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
305
+ gear(1.0, 4.0, 1.0, 20, 0.7);
306
+ glEndList();
307
+
308
+ gear2 = glGenLists(1);
309
+ glNewList(gear2, GL_COMPILE);
310
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
311
+ gear(0.5, 2.0, 2.0, 10, 0.7);
312
+ glEndList();
313
+
314
+ gear3 = glGenLists(1);
315
+ glNewList(gear3, GL_COMPILE);
316
+ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
317
+ gear(1.3, 2.0, 0.5, 10, 0.7);
318
+ glEndList();
319
+
320
+ glEnable(GL_NORMALIZE);
321
+
322
+ for ( i=1; i<argc; i++ ) {
323
+ if (strcmp(argv[i], "-info")==0) {
324
+ printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
325
+ printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
326
+ printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
327
+ printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
328
+ }
329
+ else if ( strcmp(argv[i], "-exit")==0) {
330
+ autoexit = 30;
331
+ printf("Auto Exit after %i seconds.\n", autoexit );
332
+ }
333
+ }
334
+ }
335
+
336
+
337
+ /* program entry */
338
+ int main(int argc, char *argv[])
339
+ {
340
+ // Init GLFW and open window
341
+ glfwInit();
342
+ if( !glfwOpenWindow( 300,300, 0,0,0,0, 16,0, GLFW_WINDOW ) )
343
+ {
344
+ glfwTerminate();
345
+ return 0;
346
+ }
347
+ glfwSetWindowTitle( "Gears" );
348
+ glfwEnable( GLFW_KEY_REPEAT );
349
+ glfwSwapInterval( 0 );
350
+
351
+ // Special args?
352
+ init(argc, argv);
353
+
354
+ // Set callback functions
355
+ glfwSetWindowSizeCallback( reshape );
356
+ glfwSetKeyCallback( key );
357
+
358
+ // Main loop
359
+ while( running )
360
+ {
361
+ // Draw gears
362
+ draw();
363
+
364
+ // Update animation
365
+ animate();
366
+
367
+ // Swap buffers
368
+ glfwSwapBuffers();
369
+
370
+ // Was the window closed?
371
+ if( !glfwGetWindowParam( GLFW_OPENED ) )
372
+ {
373
+ running = 0;
374
+ }
375
+ }
376
+
377
+ // Terminate GLFW
378
+ glfwTerminate();
379
+
380
+ // Exit program
381
+ return 0;
382
+ }
@@ -0,0 +1,264 @@
1
+ //========================================================================
2
+ // This is a small test application for GLFW.
3
+ // Keyboard input test.
4
+ //========================================================================
5
+
6
+ #include <stdio.h>
7
+ #include <math.h>
8
+ #include <GL/glfw.h>
9
+
10
+ int running;
11
+ int keyrepeat = 0;
12
+ int systemkeys = 1;
13
+
14
+
15
+ //========================================================================
16
+ // keyfun()
17
+ //========================================================================
18
+
19
+ void GLFWCALL keyfun( int key, int action )
20
+ {
21
+ if( action != GLFW_PRESS )
22
+ {
23
+ return;
24
+ }
25
+
26
+ switch( key )
27
+ {
28
+ case GLFW_KEY_ESC:
29
+ printf( "ESC => quit program\n" );
30
+ running = GL_FALSE;
31
+ break;
32
+ case GLFW_KEY_F1:
33
+ case GLFW_KEY_F2:
34
+ case GLFW_KEY_F3:
35
+ case GLFW_KEY_F4:
36
+ case GLFW_KEY_F5:
37
+ case GLFW_KEY_F6:
38
+ case GLFW_KEY_F7:
39
+ case GLFW_KEY_F8:
40
+ case GLFW_KEY_F9:
41
+ case GLFW_KEY_F10:
42
+ case GLFW_KEY_F11:
43
+ case GLFW_KEY_F12:
44
+ case GLFW_KEY_F13:
45
+ case GLFW_KEY_F14:
46
+ case GLFW_KEY_F15:
47
+ case GLFW_KEY_F16:
48
+ case GLFW_KEY_F17:
49
+ case GLFW_KEY_F18:
50
+ case GLFW_KEY_F19:
51
+ case GLFW_KEY_F20:
52
+ case GLFW_KEY_F21:
53
+ case GLFW_KEY_F22:
54
+ case GLFW_KEY_F23:
55
+ case GLFW_KEY_F24:
56
+ case GLFW_KEY_F25:
57
+ printf( "F%d\n", 1 + key - GLFW_KEY_F1 );
58
+ break;
59
+ case GLFW_KEY_UP:
60
+ printf( "UP\n" );
61
+ break;
62
+ case GLFW_KEY_DOWN:
63
+ printf( "DOWN\n" );
64
+ break;
65
+ case GLFW_KEY_LEFT:
66
+ printf( "LEFT\n" );
67
+ break;
68
+ case GLFW_KEY_RIGHT:
69
+ printf( "RIGHT\n" );
70
+ break;
71
+ case GLFW_KEY_LSHIFT:
72
+ printf( "LSHIFT\n" );
73
+ break;
74
+ case GLFW_KEY_RSHIFT:
75
+ printf( "RSHIFT\n" );
76
+ break;
77
+ case GLFW_KEY_LCTRL:
78
+ printf( "LCTRL\n" );
79
+ break;
80
+ case GLFW_KEY_RCTRL:
81
+ printf( "RCTRL\n" );
82
+ break;
83
+ case GLFW_KEY_LALT:
84
+ printf( "LALT\n" );
85
+ break;
86
+ case GLFW_KEY_RALT:
87
+ printf( "RALT\n" );
88
+ break;
89
+ case GLFW_KEY_TAB:
90
+ printf( "TAB\n" );
91
+ break;
92
+ case GLFW_KEY_ENTER:
93
+ printf( "ENTER\n" );
94
+ break;
95
+ case GLFW_KEY_BACKSPACE:
96
+ printf( "BACKSPACE\n" );
97
+ break;
98
+ case GLFW_KEY_INSERT:
99
+ printf( "INSERT\n" );
100
+ break;
101
+ case GLFW_KEY_DEL:
102
+ printf( "DEL\n" );
103
+ break;
104
+ case GLFW_KEY_PAGEUP:
105
+ printf( "PAGEUP\n" );
106
+ break;
107
+ case GLFW_KEY_PAGEDOWN:
108
+ printf( "PAGEDOWN\n" );
109
+ break;
110
+ case GLFW_KEY_HOME:
111
+ printf( "HOME\n" );
112
+ break;
113
+ case GLFW_KEY_END:
114
+ printf( "END\n" );
115
+ break;
116
+ case GLFW_KEY_KP_0:
117
+ printf( "KEYPAD 0\n" );
118
+ break;
119
+ case GLFW_KEY_KP_1:
120
+ printf( "KEYPAD 1\n" );
121
+ break;
122
+ case GLFW_KEY_KP_2:
123
+ printf( "KEYPAD 2\n" );
124
+ break;
125
+ case GLFW_KEY_KP_3:
126
+ printf( "KEYPAD 3\n" );
127
+ break;
128
+ case GLFW_KEY_KP_4:
129
+ printf( "KEYPAD 4\n" );
130
+ break;
131
+ case GLFW_KEY_KP_5:
132
+ printf( "KEYPAD 5\n" );
133
+ break;
134
+ case GLFW_KEY_KP_6:
135
+ printf( "KEYPAD 6\n" );
136
+ break;
137
+ case GLFW_KEY_KP_7:
138
+ printf( "KEYPAD 7\n" );
139
+ break;
140
+ case GLFW_KEY_KP_8:
141
+ printf( "KEYPAD 8\n" );
142
+ break;
143
+ case GLFW_KEY_KP_9:
144
+ printf( "KEYPAD 9\n" );
145
+ break;
146
+ case GLFW_KEY_KP_DIVIDE:
147
+ printf( "KEYPAD DIVIDE\n" );
148
+ break;
149
+ case GLFW_KEY_KP_MULTIPLY:
150
+ printf( "KEYPAD MULTIPLY\n" );
151
+ break;
152
+ case GLFW_KEY_KP_SUBTRACT:
153
+ printf( "KEYPAD SUBTRACT\n" );
154
+ break;
155
+ case GLFW_KEY_KP_ADD:
156
+ printf( "KEYPAD ADD\n" );
157
+ break;
158
+ case GLFW_KEY_KP_DECIMAL:
159
+ printf( "KEYPAD DECIMAL\n" );
160
+ break;
161
+ case GLFW_KEY_KP_EQUAL:
162
+ printf( "KEYPAD =\n" );
163
+ break;
164
+ case GLFW_KEY_KP_ENTER:
165
+ printf( "KEYPAD ENTER\n" );
166
+ break;
167
+ case GLFW_KEY_SPACE:
168
+ printf( "SPACE\n" );
169
+ break;
170
+ case 'R':
171
+ keyrepeat = (keyrepeat+1) & 1;
172
+ if( keyrepeat )
173
+ {
174
+ glfwEnable( GLFW_KEY_REPEAT );
175
+ }
176
+ else
177
+ {
178
+ glfwDisable( GLFW_KEY_REPEAT );
179
+ }
180
+ printf( "R => Key repeat: %s\n", keyrepeat ? "ON" : "OFF" );
181
+ break;
182
+ case 'S':
183
+ systemkeys = (systemkeys+1) & 1;
184
+ if( systemkeys )
185
+ {
186
+ glfwEnable( GLFW_SYSTEM_KEYS );
187
+ }
188
+ else
189
+ {
190
+ glfwDisable( GLFW_SYSTEM_KEYS );
191
+ }
192
+ printf( "S => System keys: %s\n", systemkeys ? "ON" : "OFF" );
193
+ break;
194
+ default:
195
+ if( key > 0 && key < 256 )
196
+ {
197
+ printf( "%c\n", (char) key );
198
+ }
199
+ else
200
+ {
201
+ printf( "???\n" );
202
+ }
203
+ break;
204
+ }
205
+
206
+ fflush( stdout );
207
+ }
208
+
209
+
210
+ //========================================================================
211
+ // main()
212
+ //========================================================================
213
+
214
+ int main( void )
215
+ {
216
+ int width, height;
217
+ double t;
218
+
219
+ // Initialise GLFW
220
+ glfwInit();
221
+
222
+ // Open OpenGL window
223
+ if( !glfwOpenWindow( 250,100, 0,0,0,0, 0,0, GLFW_WINDOW ) )
224
+ {
225
+ glfwTerminate();
226
+ return 0;
227
+ }
228
+
229
+ // Set key callback function
230
+ glfwSetKeyCallback( keyfun );
231
+
232
+ // Set tile
233
+ glfwSetWindowTitle( "Press some keys!" );
234
+
235
+ // Main loop
236
+ running = GL_TRUE;
237
+ while( running )
238
+ {
239
+ // Get time and mouse position
240
+ t = glfwGetTime();
241
+
242
+ // Get window size (may be different than the requested size)
243
+ glfwGetWindowSize( &width, &height );
244
+ height = height > 0 ? height : 1;
245
+
246
+ // Set viewport
247
+ glViewport( 0, 0, width, height );
248
+
249
+ // Clear color buffer
250
+ glClearColor( (GLfloat)(0.5+0.5*sin(3.0*t)), 0.0f, 0.0f, 0.0f);
251
+ glClear( GL_COLOR_BUFFER_BIT );
252
+
253
+ // Swap buffers
254
+ glfwSwapBuffers();
255
+
256
+ // Check if the window was closed
257
+ running = running && glfwGetWindowParam( GLFW_OPENED );
258
+ }
259
+
260
+ // Close OpenGL window and terminate GLFW
261
+ glfwTerminate();
262
+
263
+ return 0;
264
+ }