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,97 @@
1
+ <html>
2
+
3
+ <head>
4
+ <title>GLFW Readme file for Delphi</title>
5
+ </head>
6
+ <body>
7
+
8
+ <!-- TITLE -------------------------------------------------------------->
9
+ <center>
10
+ <font face="bookman old style,arial" size=+4><b>GLFW v2.5</b></font><br>
11
+ <font face="bookman old style,arial" size=+3>for Delphi</font>
12
+ </center>
13
+
14
+ <!-- CONTENTS ----------------------------------------------------------->
15
+ <p>
16
+ <center>
17
+ <table border=0><tr><td>
18
+ <b>
19
+ <ol>
20
+ <li><a href="#sec1">Introduction</li></a>
21
+ <li><a href="#sec2">Using GLFW from Delphi</li></a>
22
+ <li><a href="#sec3">The author</li></a>
23
+ <li><a href="#sec4">Acknowledgements</li></a>
24
+ </ol>
25
+ </b>
26
+ </td></tr></table>
27
+ </center>
28
+
29
+
30
+ <!----------------------------------------------------------------------->
31
+ <p><hr>
32
+ <!----------------------------------------------------------------------->
33
+
34
+ <a name="sec1">
35
+ <p><h2>1. Introduction</h2>
36
+
37
+ <p>This folder contains Delphi bindings for the GLFW v2.5.x Windows DLL,
38
+ and Delphi example programs. For further information on how to use GLFW
39
+ you should read the GLFW documentation.
40
+
41
+ <!----------------------------------------------------------------------->
42
+ <p><hr>
43
+ <!----------------------------------------------------------------------->
44
+
45
+ <a name="sec2">
46
+ <p><h2>2. Using GLFW from Delphi</h2>
47
+
48
+ <p>Since the general syntax of Pascal does not differ much from the C
49
+ language syntax, using GLFW from Delphi is very similar to using GLFW from
50
+ C/C++. This should make it easy to follow the GLFW documentation, which
51
+ was primarily written for C/C++ users.
52
+
53
+ <p>On the more practical side, you will need to copy the GLFW DLL file
54
+ (support\win32dll\glfw.dll) to your Windows system folder (e.g.
55
+ C:\Windows\system for Windows 9x/ME, or C:\WinNT\system32 for Windows NT),
56
+ and/or to the same directory as you keep the executable for your GLFW
57
+ based program.
58
+
59
+ <p>You also have to copy the GLFW binding file for Delphi
60
+ (support\delphi\lib\glfw.pas) to your Delphi\Lib directory.
61
+
62
+
63
+ <!----------------------------------------------------------------------->
64
+ <p><hr>
65
+ <!----------------------------------------------------------------------->
66
+
67
+ <a name="sec3">
68
+ <p><h2>3. The maintainer</h2>
69
+
70
+ <p>My name is Camilla Berglund,
71
+ <a href="mailto:elmindreda@users.sourceforge.net">elmindreda@users.sourceforge.net</a>.
72
+ Please visit our
73
+ <a href="http://sourceforge.net/projects/glfw/">support forums</a>
74
+ if you have any problems with GLFW or any questions concerning GLFW.
75
+
76
+ <p>The GLFW web site can be found here:
77
+ <a href="http://glfw.sourceforge.net/">http://glfw.sourceforge.net/</a>.
78
+ It contains the latest version of GLFW, news and other information that is
79
+ useful for OpenGL development.
80
+
81
+ <!----------------------------------------------------------------------->
82
+ <p><hr>
83
+ <!----------------------------------------------------------------------->
84
+
85
+ <a name="sec4">
86
+ <p><h2>4. Acknowledgements</h2>
87
+
88
+ <p>Many thanks to <b>Jarrod Davis</b>, who contributed the original
89
+ Delphi binding file (glfw.pas) and the conversion of the Triangle example
90
+ program!
91
+
92
+ <!----------------------------------------------------------------------->
93
+ <p><hr>
94
+ <!----------------------------------------------------------------------->
95
+
96
+ </body>
97
+ </html>
@@ -0,0 +1,383 @@
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
+ -- - Ported to Lua (thanks to David Medlock for the original Lua port)
17
+ --------------------------------------------------------------------------
18
+
19
+ local t0 = 0.0
20
+ local t = 0
21
+ local dt = 0
22
+
23
+ local Frames = 0
24
+ local autoexit = 0
25
+
26
+
27
+ --------------------------------------------------------------------------
28
+ -- Draw a gear wheel. You'll probably want to call this function when
29
+ -- building a display list since we do a lot of trig here.
30
+ --
31
+ -- Input: inner_radius - radius of hole at center
32
+ -- outer_radius - radius at center of teeth
33
+ -- width - width of gear
34
+ -- teeth - number of teeth
35
+ -- tooth_depth - depth of tooth
36
+ --------------------------------------------------------------------------
37
+ local function gear(inner_radius, outer_radius, width, teeth, tooth_depth)
38
+
39
+ local PI = 3.141592654
40
+ local r0 = inner_radius
41
+ local r1 = outer_radius - ( tooth_depth / 2.0 )
42
+ local r2 = outer_radius + ( tooth_depth / 2.0 )
43
+ local da = 2.0 * PI / teeth / 4.0
44
+
45
+ gl.ShadeModel("FLAT")
46
+
47
+ gl.Normal(0.0, 0.0, 1.0)
48
+
49
+ local cos = math.cos;
50
+ local sin = math.sin;
51
+ local sqrt = math.sqrt;
52
+
53
+ -- draw front face
54
+ gl.Begin("QUAD_STRIP");
55
+ for i = 0, teeth do
56
+ angle = i * 2.0 * PI / teeth
57
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), width * 0.5)
58
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), width * 0.5)
59
+ if (i < teeth) then
60
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), width * 0.5)
61
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5)
62
+ end
63
+ end
64
+ gl.End()
65
+
66
+ -- draw front sides of teeth
67
+ gl.Begin("QUADS")
68
+ da = 2.0 * PI / teeth / 4.0;
69
+ for i = 0,teeth-1 do
70
+ angle = i * 2.0 * PI / teeth
71
+
72
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), width * 0.5)
73
+ gl.Vertex(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5)
74
+ gl.Vertex(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5)
75
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5)
76
+ end
77
+ gl.End()
78
+
79
+ gl.Normal(0.0, 0.0, -1.0)
80
+
81
+ -- draw back face
82
+ gl.Begin("QUAD_STRIP")
83
+ for i = 0,teeth do
84
+ angle = i * 2.0 * PI / teeth
85
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), -width * 0.5)
86
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), -width * 0.5)
87
+ if (i < teeth) then
88
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5)
89
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), -width * 0.5)
90
+ end
91
+ end
92
+ gl.End()
93
+
94
+ -- draw back sides of teeth
95
+ gl.Begin("QUADS")
96
+ da = 2.0 * PI / teeth / 4.0
97
+ for i = 0, teeth-1 do
98
+ angle = i * 2.0 * PI / teeth
99
+
100
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5)
101
+ gl.Vertex(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5)
102
+ gl.Vertex(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5)
103
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), -width * 0.5)
104
+ end
105
+ gl.End()
106
+
107
+
108
+ -- draw outward faces of teeth
109
+ gl.Begin("QUAD_STRIP")
110
+ for i = 0, teeth-1 do
111
+ angle = i * 2.0 * PI / teeth
112
+
113
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), width * 0.5)
114
+ gl.Vertex(r1 * cos(angle), r1 * sin(angle), -width * 0.5)
115
+ u = r2 * cos(angle + da) - r1 * cos(angle)
116
+ v = r2 * sin(angle + da) - r1 * sin(angle)
117
+ len = sqrt(u * u + v * v)
118
+ u = u / len
119
+ v = v / len
120
+ gl.Normal(v, -u, 0.0)
121
+ gl.Vertex(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5)
122
+ gl.Vertex(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5)
123
+ gl.Normal(cos(angle), sin(angle), 0.0)
124
+ gl.Vertex(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5)
125
+ gl.Vertex(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5)
126
+ u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da)
127
+ v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da)
128
+ gl.Normal(v, -u, 0.0)
129
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5)
130
+ gl.Vertex(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5)
131
+ gl.Normal(cos(angle), sin(angle), 0.0)
132
+ end
133
+
134
+ gl.Vertex(r1 * cos(0), r1 * sin(0), width * 0.5)
135
+ gl.Vertex(r1 * cos(0), r1 * sin(0), -width * 0.5)
136
+
137
+ gl.End()
138
+
139
+ gl.ShadeModel("SMOOTH");
140
+
141
+ -- draw inside radius cylinder
142
+ gl.Begin("QUAD_STRIP")
143
+ for i = 0,teeth do
144
+ angle = i * 2.0 * PI / teeth
145
+ gl.Normal(-cos(angle), -sin(angle), 0.0)
146
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), -width * 0.5)
147
+ gl.Vertex(r0 * cos(angle), r0 * sin(angle), width * 0.5)
148
+ end
149
+ gl.End()
150
+
151
+ end
152
+
153
+ local running = true
154
+ local view = { rotx = 20.0 ; roty = 30.0 ; rotz = 0.0 }
155
+ local gear1, gear2, gear3
156
+ local angle = 0.0
157
+
158
+
159
+ --------------------------------------------------------------------------
160
+ -- OpenGL draw function & timing
161
+ --------------------------------------------------------------------------
162
+ local function draw()
163
+ gl.Clear("DEPTH_BUFFER_BIT,COLOR_BUFFER_BIT")
164
+
165
+ gl.MatrixMode( "MODELVIEW" );
166
+
167
+ gl.PushMatrix()
168
+ gl.Rotate(view.rotx, 1.0, 0.0, 0.0)
169
+ gl.Rotate(view.roty, 0.0, 1.0, 0.0)
170
+ gl.Rotate(view.rotz, 0.0, 0.0, 1.0)
171
+
172
+ gl.PushMatrix()
173
+ gl.Translate(-3.0, -2.0, 0.0)
174
+ gl.Rotate(angle, 0.0, 0.0, 1.0)
175
+ gl.CallList(gear1)
176
+ gl.PopMatrix()
177
+
178
+ gl.PushMatrix()
179
+ gl.Translate(3.1, -2.0, 0.0)
180
+ gl.Rotate(-2.0 * angle - 9.0, 0.0, 0.0, 1.0)
181
+ gl.CallList(gear2)
182
+ gl.PopMatrix()
183
+
184
+ gl.PushMatrix()
185
+ gl.Translate(-3.1, 4.2, 0.0)
186
+ gl.Rotate(-2.0 * angle - 25.0, 0.0, 0.0, 1.0)
187
+ gl.CallList(gear3)
188
+ gl.PopMatrix()
189
+
190
+ gl.PopMatrix()
191
+
192
+ Frames = Frames + 1;
193
+
194
+ do
195
+ t_new = glfw.GetTime()
196
+ dt = t_new - t;
197
+ t = t_new;
198
+
199
+ if (t - t0 >= 5.0) then
200
+ seconds = t - t0;
201
+ fps = Frames / seconds;
202
+ print(Frames, " frames in ", seconds, " seconds = ", fps, " FPS")
203
+ t0 = t;
204
+ Frames = 0;
205
+ if (t >= 0.999 * autoexit) and autoexit then running = 0 end
206
+ end
207
+ end
208
+ end
209
+
210
+
211
+ --------------------------------------------------------------------------
212
+ -- Initialize OpenGL
213
+ --------------------------------------------------------------------------
214
+ local function init(args)
215
+ pos = {5.0, 5.0, 10.0, 0.0}
216
+ red = {0.8, 0.1, 0.0, 1.0}
217
+ green = {0.0, 0.8, 0.2, 1.0}
218
+ blue = {0.2, 0.2, 1.0, 1.0}
219
+
220
+ gl.Light("LIGHT0", "POSITION", pos)
221
+ gl.Enable("CULL_FACE")
222
+ gl.Enable("LIGHTING")
223
+ gl.Enable("LIGHT0")
224
+ gl.Enable("DEPTH_TEST")
225
+ gl.DepthFunc("LEQUAL")
226
+
227
+ -- make the gears
228
+ gear1 = gl.GenLists(1)
229
+ gl.NewList(gear1, "COMPILE");
230
+ gl.Material("FRONT", "AMBIENT_AND_DIFFUSE", red);
231
+ gear(1.0, 4.0, 1.0, 20, 0.7);
232
+ gl.EndList()
233
+
234
+ gear2 = gl.GenLists(1)
235
+ gl.NewList(gear2, "COMPILE")
236
+ gl.Material("FRONT", "AMBIENT_AND_DIFFUSE", green)
237
+ gear(0.5, 2.0, 2.0, 10, 0.7)
238
+ gl.EndList()
239
+
240
+ gear3 = gl.GenLists(1);
241
+ gl.NewList(gear3, "COMPILE")
242
+ gl.Material("FRONT", "AMBIENT_AND_DIFFUSE", blue)
243
+ gear(1.3, 2.0, 0.5, 10, 0.7)
244
+ gl.EndList()
245
+
246
+ gl.Enable("NORMALIZE")
247
+
248
+ if args then
249
+ for parm in args do
250
+ if parm == "-exit" then
251
+ autoexit = 30
252
+ print("Auto Exit after ", autoexit ," seconds." );
253
+ end
254
+ end
255
+ end
256
+ end
257
+
258
+
259
+ --------------------------------------------------------------------------
260
+ -- update animation parameters
261
+ --------------------------------------------------------------------------
262
+ local function animate()
263
+ angle = angle + 100.0*dt
264
+ end
265
+
266
+
267
+ --------------------------------------------------------------------------
268
+ -- new window size
269
+ --------------------------------------------------------------------------
270
+ function reshape( width, height )
271
+ local h = height / width
272
+
273
+ local znear = 5.0
274
+ local zfar = 30.0
275
+ local xmax = znear * 0.5
276
+
277
+ gl.Viewport( 0, 0, width, height )
278
+ gl.MatrixMode( "PROJECTION" );
279
+ gl.LoadIdentity()
280
+ gl.Frustum( -xmax, xmax, -xmax*h, xmax*h, znear, zfar )
281
+ gl.MatrixMode( "MODELVIEW" );
282
+ gl.LoadIdentity()
283
+ gl.Translate( 0.0, 0.0, -20.0 )
284
+ gl.Enable( "DEPTH_TEST" );
285
+ end
286
+
287
+
288
+ --------------------------------------------------------------------------
289
+ -- change view angle, exit upon ESC
290
+ --------------------------------------------------------------------------
291
+ function key( k, action )
292
+ if action ~= glfw.PRESS then return end
293
+
294
+ -- 'Z'?
295
+ if k == 90 then
296
+ if glfw.GetKey( glfw.KEY_LSHIFT ) == glfw.PRESS then
297
+ view.rotz = view.rotz - 5.0
298
+ else
299
+ view.rotz = view.rotz + 5.0
300
+ end
301
+ return
302
+ end
303
+
304
+ if k == glfw.KEY_ESC then
305
+ running = false
306
+ return
307
+ end
308
+
309
+ if k == glfw.KEY_UP then
310
+ view.rotx = view.rotx + 5.0
311
+ return
312
+ end
313
+
314
+ if k == glfw.KEY_DOWN then
315
+ view.rotx = view.rotx - 5.0
316
+ return
317
+ end
318
+
319
+ if k == glfw.KEY_LEFT then
320
+ view.roty = view.roty + 5.0
321
+ return
322
+ end
323
+
324
+ if k == glfw.KEY_RIGHT then
325
+ view.roty = view.roty - 5.0
326
+ return
327
+ end
328
+ end
329
+
330
+
331
+ --------------------------------------------------------------------------
332
+ -- main()
333
+ --------------------------------------------------------------------------
334
+ local function main()
335
+ -- Init GLFW
336
+ if glfw.Init() ~= glfw.TRUE then
337
+ return
338
+ end
339
+
340
+ -- Open window
341
+ if glfw.OpenWindow( 640,480,0,0,0,0,24,0,glfw.WINDOW ) ~= glfw.TRUE then
342
+ glfw.Terminate()
343
+ return
344
+ end
345
+
346
+ glfw.SetWindowTitle( "Gears" );
347
+ glfw.Enable( glfw.KEY_REPEAT );
348
+ glfw.SwapInterval( 0 );
349
+
350
+ -- Special args?
351
+ init(args);
352
+
353
+ -- Set callback functions
354
+ glfw.SetWindowSizeCallback( "reshape" );
355
+ glfw.SetKeyCallback( "key" );
356
+
357
+ while running do
358
+ -- Draw gears
359
+ draw()
360
+
361
+ -- Update animation
362
+ animate()
363
+
364
+ -- Swap buffers
365
+ glfw.SwapBuffers()
366
+
367
+ -- Was the window closed?
368
+ if glfw.GetWindowParam( glfw.OPENED ) ~= glfw.TRUE then
369
+ running = false
370
+ end
371
+
372
+ end
373
+
374
+ -- Terminate GLFW
375
+ glfw.Terminate()
376
+
377
+ -- Exit program
378
+ return
379
+ end
380
+
381
+
382
+ -- execute!
383
+ main()