opengl-bindings 1.2.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.
- checksums.yaml +7 -0
- data/ChangeLog +41 -0
- data/LICENSE.txt +21 -0
- data/README.md +299 -0
- data/lib/glfw.rb +390 -0
- data/lib/glu.rb +331 -0
- data/lib/opengl.rb +7 -0
- data/lib/opengl_command.rb +6462 -0
- data/lib/opengl_common.rb +43 -0
- data/lib/opengl_enum.rb +1727 -0
- data/lib/opengl_ext.rb +19 -0
- data/lib/opengl_ext_command.rb +20176 -0
- data/lib/opengl_ext_enum.rb +5128 -0
- data/lib/opengl_platform.rb +19 -0
- data/lib/opengl_windows.rb +31 -0
- data/sample/README.md +7 -0
- data/sample/glfw_build_dylib.sh +22 -0
- data/sample/report_env.rb +23 -0
- data/sample/simple.rb +64 -0
- metadata +63 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: aaf34ba647a0d10f96d95005bb9f7c9c5ce0e298
|
4
|
+
data.tar.gz: d705a711712e7ca59de0217300af197bd3803f84
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8573d09a2d0d120fed63d15b33d8557c715f811dc457b86e0ffff1516ad058457ec69681ca8cc43a10474444528ef057c145404acd453a914c3593d103260613
|
7
|
+
data.tar.gz: 8ee82b84e8b5dea0cad1e4b8327e41f0fe6dee43100cfaa6feafd318602c3e062a609ff16c2a69f058ed60a87e063453ab18d2938a1b933e26c57b6b0a32193d
|
data/ChangeLog
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
2013-09-15 vaiorabbit <https://twitter.com/vaiorabbit>
|
2
|
+
|
3
|
+
* opengl-bindings.gemspec: Added to make RubyGems package.
|
4
|
+
* Changed directory structure more RubyGems-compliant.
|
5
|
+
|
6
|
+
2013-09-14 vaiorabbit <https://twitter.com/vaiorabbit>
|
7
|
+
|
8
|
+
* generator/aux_generate_typemap.rb: Fixed to handle signed/unsinged correctly.
|
9
|
+
* sample/GLExcess: Added.
|
10
|
+
* opengl_ext_enum.rb, generator/generate_ext_enum.rb: Now checks if same constant is already defined before cosnt_set.
|
11
|
+
|
12
|
+
2013-09-08 vaiorabbit <https://twitter.com/vaiorabbit>
|
13
|
+
|
14
|
+
* opengl_ext_command.rb, opengl_ext_enum.rb, opengl_ext.rb: Added for OpenGL extension support.
|
15
|
+
* sample/report_env.rb: Reports the names of supported extensions.
|
16
|
+
* sample/Extension/nvpr_hello_world.rb: Added.
|
17
|
+
|
18
|
+
2013-09-07 vaiorabbit <https://twitter.com/vaiorabbit>
|
19
|
+
|
20
|
+
* opengl_command.rb: Updated using latest gl.xml.
|
21
|
+
* opengl_command.rb: Fixed some bugs.
|
22
|
+
* opengl_command.rb, glu.rb (load_dll): Updated platform detection.
|
23
|
+
* sample/report_env.rb : Added.
|
24
|
+
* opengl_common.rb (check_extension): Added.
|
25
|
+
|
26
|
+
2013-09-05 vaiorabbit <https://twitter.com/vaiorabbit>
|
27
|
+
|
28
|
+
* sample/ComputeShader: Added.
|
29
|
+
|
30
|
+
2013-09-03 vaiorabbit <https://twitter.com/vaiorabbit>
|
31
|
+
|
32
|
+
* opengl_platform.rb, opengl_windows.rb: Added.
|
33
|
+
|
34
|
+
2013-08-28 vaiorabbit <https://twitter.com/vaiorabbit>
|
35
|
+
|
36
|
+
* glu.rb: Added.
|
37
|
+
|
38
|
+
2013-08-28 vaiorabbit <https://twitter.com/vaiorabbit>
|
39
|
+
|
40
|
+
* (Announce) First release.
|
41
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Ruby-OpenGL : Yet another OpenGL wrapper for Ruby (and wrapper code generator)
|
2
|
+
Copyright (c) 2013- vaiorabbit <http://twitter.com/vaiorabbit>
|
3
|
+
|
4
|
+
This software is provided 'as-is', without any express or implied
|
5
|
+
warranty. In no event will the authors be held liable for any damages
|
6
|
+
arising from the use of this software.
|
7
|
+
|
8
|
+
Permission is granted to anyone to use this software for any purpose,
|
9
|
+
including commercial applications, and to alter it and redistribute it
|
10
|
+
freely, subject to the following restrictions:
|
11
|
+
|
12
|
+
1. The origin of this software must not be misrepresented; you must not
|
13
|
+
claim that you wrote the original software. If you use this software
|
14
|
+
in a product, an acknowledgment in the product documentation would be
|
15
|
+
appreciated but is not required.
|
16
|
+
|
17
|
+
2. Altered source versions must be plainly marked as such, and must not be
|
18
|
+
misrepresented as being the original software.
|
19
|
+
|
20
|
+
3. This notice may not be removed or altered from any source
|
21
|
+
distribution.
|
data/README.md
ADDED
@@ -0,0 +1,299 @@
|
|
1
|
+
<!-- -*- mode:markdown; coding:utf-8; -*- -->
|
2
|
+
|
3
|
+
# Yet another OpenGL wrapper for Ruby #
|
4
|
+
|
5
|
+
...and wrapper code generator.
|
6
|
+
|
7
|
+
* Created : 2013-08-28
|
8
|
+
* Last modified : 2013-09-15
|
9
|
+
|
10
|
+
|
11
|
+
## Features ##
|
12
|
+
|
13
|
+
* Uses Fiddle (One of the Ruby standard libraries that wraps libffi)
|
14
|
+
* No need to build C extension library
|
15
|
+
|
16
|
+
* Uses Khronos XML API registry
|
17
|
+
* The command/enum wrapper codes are generated via 'gl.xml'
|
18
|
+
* Supports OpenGL 1.0 - 4.4, and all OpenGL extensions.
|
19
|
+
|
20
|
+
|
21
|
+
## How to use ##
|
22
|
+
|
23
|
+
See sample/simple.rb.
|
24
|
+
|
25
|
+
To get more samples and generator scripts, please visit:
|
26
|
+
https://github.com/vaiorabbit/ruby-opengl
|
27
|
+
|
28
|
+
|
29
|
+
## Contents ##
|
30
|
+
|
31
|
+
* 'opengl.rb' includes these scripts:
|
32
|
+
* 'opengl_command.rb' : OpenGL command wrapper (glDrawRangeElements, etc.). Generated via generator/generate_command.rb.
|
33
|
+
* 'opengl_enum.rb' : OpenGL enum wrapper (GL_TRIANGLE_STRIP, etc.). Generated via generator/generate_enum.rb.
|
34
|
+
* 'opengl_common.rb' : Provies utilitiy funcitions.
|
35
|
+
* 'opengl_platform.rb' : Provies platform check funcitions (OpneGL.get_platform).
|
36
|
+
* 'opengl_windows.rb' : Provies funcitions for Windows platform (wglGetProcAddress).
|
37
|
+
|
38
|
+
* 'opengl_ext.rb' includes these scripts:
|
39
|
+
* 'opengl_ext_command.rb' : OpenGL extension command wrapper. Generated via generator/generate_ext_command.rb.
|
40
|
+
* 'opengl_ext_enum.rb' : OpenGL extension enum wrapper Generated via generator/generate_ext_enum.rb.
|
41
|
+
|
42
|
+
* 'glfw.rb'
|
43
|
+
* My handwirtten GLFW wrapper (https://github.com/vaiorabbit/ruby-glfw).
|
44
|
+
|
45
|
+
* 'glu.rb'
|
46
|
+
* My handwirtten GLU wrapper.
|
47
|
+
|
48
|
+
* 'generator/gl.xml'
|
49
|
+
* Khronos' official XML API registry for OpenGL.
|
50
|
+
|
51
|
+
* 'generator/Rakefile'
|
52
|
+
* Type 'rake' to generate wrapper codes / fetch gl.xml.
|
53
|
+
* You can get the latest one by 'get_gl_xml.rb'.
|
54
|
+
|
55
|
+
* 'sample/simple.rb'
|
56
|
+
* Simple example.
|
57
|
+
* You need to get glfw3.dll (Windows) or libglfw.dylib (Mac OS X). See sample/README.md.
|
58
|
+
|
59
|
+
* 'sample/data', 'sample/util'
|
60
|
+
* Data and utilities for sample programs.
|
61
|
+
|
62
|
+
## Prerequisites ##
|
63
|
+
|
64
|
+
* Fiddle
|
65
|
+
* A libffi wrapper
|
66
|
+
* Standard library since Ruby 2.0.0
|
67
|
+
|
68
|
+
### For sample ###
|
69
|
+
|
70
|
+
* GLFW
|
71
|
+
* http://www.glfw.org/
|
72
|
+
* http://www.glfw.org/download.html
|
73
|
+
|
74
|
+
### For generator ###
|
75
|
+
|
76
|
+
* nokogiri XML parser
|
77
|
+
* http://nokogiri.org
|
78
|
+
* http://nokogiri.org/tutorials/installing_nokogiri.html
|
79
|
+
|
80
|
+
|
81
|
+
## Tested Environment ##
|
82
|
+
|
83
|
+
* Ruby
|
84
|
+
* ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
|
85
|
+
* ruby 2.0.0p247 (2013-06-27) [i386-mingw32]
|
86
|
+
|
87
|
+
* Windows 7 Home Premium, 64-bit (Service Pack 1)
|
88
|
+
* NVIDIA GeForce GTX 560
|
89
|
+
* OpenGL 4.3
|
90
|
+
|
91
|
+
> ruby report_env.rb
|
92
|
+
4.3.0
|
93
|
+
|
94
|
+
* Mac OS X 10.8.4, 64-bit
|
95
|
+
* NVIDIA GeForce 320M on Mac mini (Mid 2010)
|
96
|
+
* OpenGL 2.1
|
97
|
+
|
98
|
+
$ ruby report_env.rb
|
99
|
+
2.1 NVIDIA-8.12.47 310.40.00.05f01
|
100
|
+
|
101
|
+
* Though I have not tested on Linux yet, it should work with proper 'OpenGL.load_dll' settings like:
|
102
|
+
* OpenGL.load_dll( 'libGL.so', '/usr/lib' )
|
103
|
+
* GLFW.load_dll( 'libGLFW.so', '.' )
|
104
|
+
|
105
|
+
|
106
|
+
## Note ##
|
107
|
+
|
108
|
+
* No Ruby-Style handy interfaces are available (like one in the ruby-opengl2 (http://ruby-opengl.rubyforge.org/))
|
109
|
+
* Example:
|
110
|
+
* (Original C API)
|
111
|
+
|
112
|
+
GLuint tex_names_buf[2];
|
113
|
+
glGenTextures( 2, tex_names_buf );
|
114
|
+
GLuint tex_name = tex_names_buf[0];
|
115
|
+
|
116
|
+
* (This library)
|
117
|
+
|
118
|
+
tex_names_buf = ' ' # String instance that is enough to catch texture names (integer).
|
119
|
+
glGenTextures( 2, tex_names_buf )
|
120
|
+
tex_name = tex_names_buf.unpack('L2')[0]
|
121
|
+
|
122
|
+
* (ruby-opengl2)
|
123
|
+
|
124
|
+
tex_name = glGenTextures( 2 )[0]
|
125
|
+
|
126
|
+
* Because:
|
127
|
+
* I don't want to maintain this feature, which makes difficult to auto-generate.
|
128
|
+
* I don't like to modify original OpenGL API.
|
129
|
+
* Thanks to Fiddle, all these C-pointer issue can be simply handled with Array#pack and String#unpack.
|
130
|
+
|
131
|
+
* Reference : Other approaches after ruby-opengl2
|
132
|
+
* OpenGL (opengl3) by davll (https://github.com/davll/ruby-opengl)
|
133
|
+
* Built on Ruby-FFI, which is useful for JRuby users.
|
134
|
+
* opengl-core by nilium (https://github.com/nilium/ruby-opengl)
|
135
|
+
* Build on Fiddle.
|
136
|
+
* Provides more customize points and handy utilities.
|
137
|
+
|
138
|
+
|
139
|
+
## License ##
|
140
|
+
|
141
|
+
The zlib/libpng License (http://opensource.org/licenses/Zlib).
|
142
|
+
|
143
|
+
Copyright (c) 2013 vaiorabbit@twitter.com
|
144
|
+
|
145
|
+
This software is provided 'as-is', without any express or implied
|
146
|
+
warranty. In no event will the authors be held liable for any damages
|
147
|
+
arising from the use of this software.
|
148
|
+
|
149
|
+
Permission is granted to anyone to use this software for any purpose,
|
150
|
+
including commercial applications, and to alter it and redistribute it
|
151
|
+
freely, subject to the following restrictions:
|
152
|
+
|
153
|
+
1. The origin of this software must not be misrepresented; you must not
|
154
|
+
claim that you wrote the original software. If you use this software in a
|
155
|
+
product, an acknowledgment in the product documentation would be
|
156
|
+
appreciated but is not required.
|
157
|
+
|
158
|
+
2. Altered source versions must be plainly marked as such, and must not be
|
159
|
+
misrepresented as being the original software.
|
160
|
+
|
161
|
+
3. This notice may not be removed or altered from any source distribution.
|
162
|
+
|
163
|
+
Sample codes/resources under sample/GLExcess are provided under the GNU General
|
164
|
+
Public License version 2. See sample/GLExcess/GPL2.txt .
|
165
|
+
|
166
|
+
-------------------------------------------------------------------------------
|
167
|
+
|
168
|
+
# 自前 Ruby-OpenGL と自動生成スクリプト #
|
169
|
+
|
170
|
+
## 特徴 ##
|
171
|
+
|
172
|
+
* 標準ライブラリ Fiddle を使っています ⇒ 拡張ライブラリをビルドする必要がありません
|
173
|
+
* 関数とenumのラッパーコードは Khronos の XML API registry (gl.xml) から自動生成しています
|
174
|
+
|
175
|
+
|
176
|
+
## 使い方 ##
|
177
|
+
|
178
|
+
sample/simple.rb を参照してください。
|
179
|
+
|
180
|
+
その他のサンプルと自動生成スクリプトはこちらで開発しています:
|
181
|
+
https://github.com/vaiorabbit/ruby-opengl
|
182
|
+
|
183
|
+
|
184
|
+
## 内容 ##
|
185
|
+
|
186
|
+
* 'opengl.rb' を require することで下記のスクリプトを取り込みます:
|
187
|
+
* 'opengl_command.rb' : OpenGL 関数のラッパーコード (glDrawRangeElements, etc.)。 generator/generate_command.rb で自動生成されたものです。
|
188
|
+
* 'opengl_enum.rb' : OpenGL enum のラッパーコード (GL_TRIANGLE_STRIP, etc.)。 generator/generate_enum.rb で自動生成されたものです。
|
189
|
+
* 'opengl_common.rb' : 共通のユーティリティ関数を提供しています。
|
190
|
+
* 'opengl_platform.rb' : 動作プラットフォームの判別機能を提供しています (OpneGL.get_platform)。
|
191
|
+
* 'opengl_windows.rb' : Windows用の機能を提供しています (wglGetProcAddress)。
|
192
|
+
|
193
|
+
* 'opengl_ext.rb' を require することで下記のスクリプトを取り込みます:
|
194
|
+
* 'opengl_ext_command.rb' : OpenGL 拡張関数のラッパーコード。 generator/generate_ext_command.rb で自動生成されたものです。
|
195
|
+
* 'opengl_ext_enum.rb' : OpenGL 拡張enumのラッパーコード。 generator/generate_ext_enum.rb で自動生成されたものです。
|
196
|
+
|
197
|
+
* 'glfw.rb'
|
198
|
+
* GLFW のラッパーコードです(自動生成ではありません) (https://github.com/vaiorabbit/ruby-glfw)。
|
199
|
+
|
200
|
+
* 'glu.rb'
|
201
|
+
* GLU のラッパーコードです(自動生成ではありません)。
|
202
|
+
|
203
|
+
* 'generator/gl.xml'
|
204
|
+
* Khronos 公式の XML API registry です。
|
205
|
+
|
206
|
+
* 'generator/Rakefile'
|
207
|
+
* 自動生成関連のタスクを自動化するためのものです。'rake' と打てば gl.xml の取得とラッパーコードの生成を実行します。
|
208
|
+
* gl.xml の取得だけなど、単体のタスクなら 'get_gl_xml.rb' などの個別Rubyスクリプトでも実行できます。
|
209
|
+
|
210
|
+
* 'sample/simple.rb'
|
211
|
+
* 一番簡単なサンプルです。
|
212
|
+
* 同じ場所に glfw3.dll (Windows) もしくは libglfw.dylib (Mac OS X) を置いてください。詳細は sample/README.md に記載されています。
|
213
|
+
|
214
|
+
* 'sample/data', 'sample/util'
|
215
|
+
* サンプルで共有する機能・データの配置場所です。
|
216
|
+
|
217
|
+
|
218
|
+
## 必要なもの ##
|
219
|
+
|
220
|
+
* Fiddle
|
221
|
+
* libffi のラッパーです
|
222
|
+
* Ruby 2.0.0 以降で標準ライブラリになりました
|
223
|
+
|
224
|
+
### サンプル用 ###
|
225
|
+
|
226
|
+
* GLFW
|
227
|
+
* http://www.glfw.org/
|
228
|
+
* http://www.glfw.org/download.html
|
229
|
+
|
230
|
+
### 自動生成スクリプト用 ###
|
231
|
+
|
232
|
+
* nokogiri XML パーサー
|
233
|
+
* http://nokogiri.org
|
234
|
+
* http://nokogiri.org/tutorials/installing_nokogiri.html
|
235
|
+
|
236
|
+
## テストした環境 ##
|
237
|
+
|
238
|
+
* Ruby
|
239
|
+
* ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
|
240
|
+
* ruby 2.0.0p247 (2013-06-27) [i386-mingw32]
|
241
|
+
|
242
|
+
* Windows 7 Home Premium, 64-bit (Service Pack 1)
|
243
|
+
* NVIDIA GeForce GTX 560
|
244
|
+
* OpenGL 4.3
|
245
|
+
|
246
|
+
> ruby report_env.rb
|
247
|
+
4.3.0
|
248
|
+
|
249
|
+
* Mac OS X 10.8.4, 64-bit
|
250
|
+
* NVIDIA GeForce 320M on Mac mini (Mid 2010)
|
251
|
+
* OpenGL 2.1
|
252
|
+
|
253
|
+
$ ruby report_env.rb
|
254
|
+
2.1 NVIDIA-8.12.47 310.40.00.05f01
|
255
|
+
|
256
|
+
* まだ Linux では動作確認していませんが、'OpenGL.load_dll' などの引数が正しければ動くはず…
|
257
|
+
* OpenGL.load_dll( 'libGL.so', '/usr/lib' )
|
258
|
+
* GLFW.load_dll( 'libGLFW.so', '.' )
|
259
|
+
|
260
|
+
|
261
|
+
## メモ ##
|
262
|
+
|
263
|
+
* Rubyスタイルの便利なインターフェースはサポートしていません (ruby-opengl2 (http://ruby-opengl.rubyforge.org/) にあったような感じのもの)
|
264
|
+
* 例:
|
265
|
+
* (OpenGLオリジナルの C API)
|
266
|
+
|
267
|
+
GLuint tex_names_buf[2];
|
268
|
+
glGenTextures( 2, tex_names_buf );
|
269
|
+
GLuint tex_name = tex_names_buf[0];
|
270
|
+
|
271
|
+
* (このライブラリの場合)
|
272
|
+
|
273
|
+
tex_names_buf = ' ' # テクスチャ名(GLuint)を受け取るのに十分なサイズ String インスタンスであればOK
|
274
|
+
glGenTextures( 2, tex_names_buf )
|
275
|
+
tex_name = tex_names_buf.unpack('L2')[0]
|
276
|
+
|
277
|
+
* (ruby-opengl2 の場合)
|
278
|
+
|
279
|
+
tex_name = glGenTextures( 2 )[0] # glGenTextures が配列を返すように修正されています
|
280
|
+
|
281
|
+
* なぜサポートしないのか:
|
282
|
+
* 面倒。自動生成になじまない。
|
283
|
+
* OpenGL オリジナルの API を変更するのは個人的に嫌。
|
284
|
+
* この手の C ポインタ関連の問題はすべて Array#pack と String#unpack だけで簡単に解決できます (Fiddleのおかげ)。
|
285
|
+
|
286
|
+
* 参考 : ruby-opengl2 以降に出てきたその他のアプローチ
|
287
|
+
* OpenGL (opengl3) by davll (https://github.com/davll/ruby-opengl)
|
288
|
+
* Ruby-FFI を利用 ⇒ JRuby でも使えるようです
|
289
|
+
* opengl-core by nilium (https://github.com/nilium/ruby-opengl)
|
290
|
+
* Fiddle を利用
|
291
|
+
* カスタマイズポイント・ユーティリティがこのライブラリよりも揃ってます
|
292
|
+
|
293
|
+
|
294
|
+
## ライセンス ##
|
295
|
+
|
296
|
+
* zlib/libpng ライセンスです (http://opensource.org/licenses/Zlib)。
|
297
|
+
|
298
|
+
* sample/GLExcess 以下にあるものについては GNU General Public License version 2 です。
|
299
|
+
sample/GLExcess/GPL2.txt を参照してください。
|
data/lib/glfw.rb
ADDED
@@ -0,0 +1,390 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'fiddle/import'
|
3
|
+
|
4
|
+
module GLFW
|
5
|
+
|
6
|
+
extend Fiddle::Importer
|
7
|
+
|
8
|
+
#
|
9
|
+
# Fiddle's default 'extern' stores all methods into local variable '@func_map', that makes difficult to 'include GLFW'.
|
10
|
+
# So I override it and replace '@func_map' into 'GLFW_FUNCTIONS_MAP'.
|
11
|
+
# Ref.: /lib/ruby/2.0.0/fiddle/import.rb
|
12
|
+
#
|
13
|
+
GLFW_FUNCTIONS_MAP = {}
|
14
|
+
def self.extern(signature, *opts)
|
15
|
+
symname, ctype, argtype = parse_signature(signature, @type_alias)
|
16
|
+
opt = parse_bind_options(opts)
|
17
|
+
f = import_function(symname, ctype, argtype, opt[:call_type])
|
18
|
+
name = symname.gsub(/@.+/,'')
|
19
|
+
GLFW_FUNCTIONS_MAP[name] = f
|
20
|
+
begin
|
21
|
+
/^(.+?):(\d+)/ =~ caller.first
|
22
|
+
file, line = $1, $2.to_i
|
23
|
+
rescue
|
24
|
+
file, line = __FILE__, __LINE__+3
|
25
|
+
end
|
26
|
+
args_str="*args"
|
27
|
+
module_eval(<<-EOS, file, line)
|
28
|
+
def #{name}(*args, &block)
|
29
|
+
GLFW_FUNCTIONS_MAP['#{name}'].call(*args,&block)
|
30
|
+
end
|
31
|
+
EOS
|
32
|
+
module_function(name)
|
33
|
+
f
|
34
|
+
end
|
35
|
+
|
36
|
+
# defines
|
37
|
+
GLFW_VERSION_MAJOR = 3
|
38
|
+
GLFW_VERSION_MINOR = 0
|
39
|
+
GLFW_VERSION_REVISION = 1
|
40
|
+
|
41
|
+
GLFW_RELEASE = 0
|
42
|
+
GLFW_PRESS = 1
|
43
|
+
GLFW_REPEAT = 2
|
44
|
+
|
45
|
+
GLFW_KEY_UNKNOWN = -1
|
46
|
+
|
47
|
+
GLFW_KEY_SPACE = 32
|
48
|
+
GLFW_KEY_APOSTROPHE = 39 # '
|
49
|
+
GLFW_KEY_COMMA = 44 # ,
|
50
|
+
GLFW_KEY_MINUS = 45 # -
|
51
|
+
GLFW_KEY_PERIOD = 46 # .
|
52
|
+
GLFW_KEY_SLASH = 47 # /
|
53
|
+
GLFW_KEY_0 = 48
|
54
|
+
GLFW_KEY_1 = 49
|
55
|
+
GLFW_KEY_2 = 50
|
56
|
+
GLFW_KEY_3 = 51
|
57
|
+
GLFW_KEY_4 = 52
|
58
|
+
GLFW_KEY_5 = 53
|
59
|
+
GLFW_KEY_6 = 54
|
60
|
+
GLFW_KEY_7 = 55
|
61
|
+
GLFW_KEY_8 = 56
|
62
|
+
GLFW_KEY_9 = 57
|
63
|
+
GLFW_KEY_SEMICOLON = 59 # ;
|
64
|
+
GLFW_KEY_EQUAL = 61 # =
|
65
|
+
GLFW_KEY_A = 65
|
66
|
+
GLFW_KEY_B = 66
|
67
|
+
GLFW_KEY_C = 67
|
68
|
+
GLFW_KEY_D = 68
|
69
|
+
GLFW_KEY_E = 69
|
70
|
+
GLFW_KEY_F = 70
|
71
|
+
GLFW_KEY_G = 71
|
72
|
+
GLFW_KEY_H = 72
|
73
|
+
GLFW_KEY_I = 73
|
74
|
+
GLFW_KEY_J = 74
|
75
|
+
GLFW_KEY_K = 75
|
76
|
+
GLFW_KEY_L = 76
|
77
|
+
GLFW_KEY_M = 77
|
78
|
+
GLFW_KEY_N = 78
|
79
|
+
GLFW_KEY_O = 79
|
80
|
+
GLFW_KEY_P = 80
|
81
|
+
GLFW_KEY_Q = 81
|
82
|
+
GLFW_KEY_R = 82
|
83
|
+
GLFW_KEY_S = 83
|
84
|
+
GLFW_KEY_T = 84
|
85
|
+
GLFW_KEY_U = 85
|
86
|
+
GLFW_KEY_V = 86
|
87
|
+
GLFW_KEY_W = 87
|
88
|
+
GLFW_KEY_X = 88
|
89
|
+
GLFW_KEY_Y = 89
|
90
|
+
GLFW_KEY_Z = 90
|
91
|
+
GLFW_KEY_LEFT_BRACKET = 91 # [
|
92
|
+
GLFW_KEY_BACKSLASH = 92 # \
|
93
|
+
GLFW_KEY_RIGHT_BRACKET = 93 # ]
|
94
|
+
GLFW_KEY_GRAVE_ACCENT = 96 # `
|
95
|
+
GLFW_KEY_WORLD_1 = 161 # non-US #1
|
96
|
+
GLFW_KEY_WORLD_2 = 162 # non-US #2
|
97
|
+
|
98
|
+
GLFW_KEY_ESCAPE = 256
|
99
|
+
GLFW_KEY_ENTER = 257
|
100
|
+
GLFW_KEY_TAB = 258
|
101
|
+
GLFW_KEY_BACKSPACE = 259
|
102
|
+
GLFW_KEY_INSERT = 260
|
103
|
+
GLFW_KEY_DELETE = 261
|
104
|
+
GLFW_KEY_RIGHT = 262
|
105
|
+
GLFW_KEY_LEFT = 263
|
106
|
+
GLFW_KEY_DOWN = 264
|
107
|
+
GLFW_KEY_UP = 265
|
108
|
+
GLFW_KEY_PAGE_UP = 266
|
109
|
+
GLFW_KEY_PAGE_DOWN = 267
|
110
|
+
GLFW_KEY_HOME = 268
|
111
|
+
GLFW_KEY_END = 269
|
112
|
+
GLFW_KEY_CAPS_LOCK = 280
|
113
|
+
GLFW_KEY_SCROLL_LOCK = 281
|
114
|
+
GLFW_KEY_NUM_LOCK = 282
|
115
|
+
GLFW_KEY_PRINT_SCREEN = 283
|
116
|
+
GLFW_KEY_PAUSE = 284
|
117
|
+
GLFW_KEY_F1 = 290
|
118
|
+
GLFW_KEY_F2 = 291
|
119
|
+
GLFW_KEY_F3 = 292
|
120
|
+
GLFW_KEY_F4 = 293
|
121
|
+
GLFW_KEY_F5 = 294
|
122
|
+
GLFW_KEY_F6 = 295
|
123
|
+
GLFW_KEY_F7 = 296
|
124
|
+
GLFW_KEY_F8 = 297
|
125
|
+
GLFW_KEY_F9 = 298
|
126
|
+
GLFW_KEY_F10 = 299
|
127
|
+
GLFW_KEY_F11 = 300
|
128
|
+
GLFW_KEY_F12 = 301
|
129
|
+
GLFW_KEY_F13 = 302
|
130
|
+
GLFW_KEY_F14 = 303
|
131
|
+
GLFW_KEY_F15 = 304
|
132
|
+
GLFW_KEY_F16 = 305
|
133
|
+
GLFW_KEY_F17 = 306
|
134
|
+
GLFW_KEY_F18 = 307
|
135
|
+
GLFW_KEY_F19 = 308
|
136
|
+
GLFW_KEY_F20 = 309
|
137
|
+
GLFW_KEY_F21 = 310
|
138
|
+
GLFW_KEY_F22 = 311
|
139
|
+
GLFW_KEY_F23 = 312
|
140
|
+
GLFW_KEY_F24 = 313
|
141
|
+
GLFW_KEY_F25 = 314
|
142
|
+
GLFW_KEY_KP_0 = 320
|
143
|
+
GLFW_KEY_KP_1 = 321
|
144
|
+
GLFW_KEY_KP_2 = 322
|
145
|
+
GLFW_KEY_KP_3 = 323
|
146
|
+
GLFW_KEY_KP_4 = 324
|
147
|
+
GLFW_KEY_KP_5 = 325
|
148
|
+
GLFW_KEY_KP_6 = 326
|
149
|
+
GLFW_KEY_KP_7 = 327
|
150
|
+
GLFW_KEY_KP_8 = 328
|
151
|
+
GLFW_KEY_KP_9 = 329
|
152
|
+
GLFW_KEY_KP_DECIMAL = 330
|
153
|
+
GLFW_KEY_KP_DIVIDE = 331
|
154
|
+
GLFW_KEY_KP_MULTIPLY = 332
|
155
|
+
GLFW_KEY_KP_SUBTRACT = 333
|
156
|
+
GLFW_KEY_KP_ADD = 334
|
157
|
+
GLFW_KEY_KP_ENTER = 335
|
158
|
+
GLFW_KEY_KP_EQUAL = 336
|
159
|
+
GLFW_KEY_LEFT_SHIFT = 340
|
160
|
+
GLFW_KEY_LEFT_CONTROL = 341
|
161
|
+
GLFW_KEY_LEFT_ALT = 342
|
162
|
+
GLFW_KEY_LEFT_SUPER = 343
|
163
|
+
GLFW_KEY_RIGHT_SHIFT = 344
|
164
|
+
GLFW_KEY_RIGHT_CONTROL = 345
|
165
|
+
GLFW_KEY_RIGHT_ALT = 346
|
166
|
+
GLFW_KEY_RIGHT_SUPER = 347
|
167
|
+
GLFW_KEY_MENU = 348
|
168
|
+
GLFW_KEY_LAST = GLFW_KEY_MENU
|
169
|
+
|
170
|
+
GLFW_MOD_SHIFT = 0x0001
|
171
|
+
GLFW_MOD_CONTROL = 0x0002
|
172
|
+
GLFW_MOD_ALT = 0x0004
|
173
|
+
GLFW_MOD_SUPER = 0x0008
|
174
|
+
|
175
|
+
GLFW_MOUSE_BUTTON_1 = 0
|
176
|
+
GLFW_MOUSE_BUTTON_2 = 1
|
177
|
+
GLFW_MOUSE_BUTTON_3 = 2
|
178
|
+
GLFW_MOUSE_BUTTON_4 = 3
|
179
|
+
GLFW_MOUSE_BUTTON_5 = 4
|
180
|
+
GLFW_MOUSE_BUTTON_6 = 5
|
181
|
+
GLFW_MOUSE_BUTTON_7 = 6
|
182
|
+
GLFW_MOUSE_BUTTON_8 = 7
|
183
|
+
GLFW_MOUSE_BUTTON_LAST = GLFW_MOUSE_BUTTON_8
|
184
|
+
GLFW_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1
|
185
|
+
GLFW_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2
|
186
|
+
GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3
|
187
|
+
|
188
|
+
GLFW_JOYSTICK_1 = 0
|
189
|
+
GLFW_JOYSTICK_2 = 1
|
190
|
+
GLFW_JOYSTICK_3 = 2
|
191
|
+
GLFW_JOYSTICK_4 = 3
|
192
|
+
GLFW_JOYSTICK_5 = 4
|
193
|
+
GLFW_JOYSTICK_6 = 5
|
194
|
+
GLFW_JOYSTICK_7 = 6
|
195
|
+
GLFW_JOYSTICK_8 = 7
|
196
|
+
GLFW_JOYSTICK_9 = 8
|
197
|
+
GLFW_JOYSTICK_10 = 9
|
198
|
+
GLFW_JOYSTICK_11 = 10
|
199
|
+
GLFW_JOYSTICK_12 = 11
|
200
|
+
GLFW_JOYSTICK_13 = 12
|
201
|
+
GLFW_JOYSTICK_14 = 13
|
202
|
+
GLFW_JOYSTICK_15 = 14
|
203
|
+
GLFW_JOYSTICK_16 = 15
|
204
|
+
GLFW_JOYSTICK_LAST = GLFW_JOYSTICK_16
|
205
|
+
|
206
|
+
GLFW_NOT_INITIALIZED = 0x00010001
|
207
|
+
GLFW_NO_CURRENT_CONTEXT = 0x00010002
|
208
|
+
GLFW_INVALID_ENUM = 0x00010003
|
209
|
+
GLFW_INVALID_VALUE = 0x00010004
|
210
|
+
GLFW_OUT_OF_MEMORY = 0x00010005
|
211
|
+
GLFW_API_UNAVAILABLE = 0x00010006
|
212
|
+
GLFW_VERSION_UNAVAILABLE = 0x00010007
|
213
|
+
GLFW_PLATFORM_ERROR = 0x00010008
|
214
|
+
GLFW_FORMAT_UNAVAILABLE = 0x00010009
|
215
|
+
|
216
|
+
GLFW_FOCUSED = 0x00020001
|
217
|
+
GLFW_ICONIFIED = 0x00020002
|
218
|
+
GLFW_RESIZABLE = 0x00020003
|
219
|
+
GLFW_VISIBLE = 0x00020004
|
220
|
+
GLFW_DECORATED = 0x00020005
|
221
|
+
|
222
|
+
GLFW_RED_BITS = 0x00021001
|
223
|
+
GLFW_GREEN_BITS = 0x00021002
|
224
|
+
GLFW_BLUE_BITS = 0x00021003
|
225
|
+
GLFW_ALPHA_BITS = 0x00021004
|
226
|
+
GLFW_DEPTH_BITS = 0x00021005
|
227
|
+
GLFW_STENCIL_BITS = 0x00021006
|
228
|
+
GLFW_ACCUM_RED_BITS = 0x00021007
|
229
|
+
GLFW_ACCUM_GREEN_BITS = 0x00021008
|
230
|
+
GLFW_ACCUM_BLUE_BITS = 0x00021009
|
231
|
+
GLFW_ACCUM_ALPHA_BITS = 0x0002100A
|
232
|
+
GLFW_AUX_BUFFERS = 0x0002100B
|
233
|
+
GLFW_STEREO = 0x0002100C
|
234
|
+
GLFW_SAMPLES = 0x0002100D
|
235
|
+
GLFW_SRGB_CAPABLE = 0x0002100E
|
236
|
+
GLFW_REFRESH_RATE = 0x0002100F
|
237
|
+
|
238
|
+
GLFW_CLIENT_API = 0x00022001
|
239
|
+
GLFW_CONTEXT_VERSION_MAJOR = 0x00022002
|
240
|
+
GLFW_CONTEXT_VERSION_MINOR = 0x00022003
|
241
|
+
GLFW_CONTEXT_REVISION = 0x00022004
|
242
|
+
GLFW_CONTEXT_ROBUSTNESS = 0x00022005
|
243
|
+
GLFW_OPENGL_FORWARD_COMPAT = 0x00022006
|
244
|
+
GLFW_OPENGL_DEBUG_CONTEXT = 0x00022007
|
245
|
+
GLFW_OPENGL_PROFILE = 0x00022008
|
246
|
+
|
247
|
+
GLFW_OPENGL_API = 0x00030001
|
248
|
+
GLFW_OPENGL_ES_API = 0x00030002
|
249
|
+
|
250
|
+
GLFW_NO_ROBUSTNESS = 0
|
251
|
+
GLFW_NO_RESET_NOTIFICATION = 0x00031001
|
252
|
+
GLFW_LOSE_CONTEXT_ON_RESET = 0x00031002
|
253
|
+
|
254
|
+
GLFW_OPENGL_ANY_PROFILE = 0
|
255
|
+
GLFW_OPENGL_CORE_PROFILE = 0x00032001
|
256
|
+
GLFW_OPENGL_COMPAT_PROFILE = 0x00032002
|
257
|
+
|
258
|
+
GLFW_CURSOR = 0x00033001
|
259
|
+
GLFW_STICKY_KEYS = 0x00033002
|
260
|
+
GLFW_STICKY_MOUSE_BUTTONS = 0x00033003
|
261
|
+
|
262
|
+
GLFW_CURSOR_NORMAL = 0x00034001
|
263
|
+
GLFW_CURSOR_HIDDEN = 0x00034002
|
264
|
+
GLFW_CURSOR_DISABLED = 0x00034003
|
265
|
+
|
266
|
+
GLFW_CONNECTED = 0x00040001
|
267
|
+
GLFW_DISCONNECTED = 0x00040002
|
268
|
+
|
269
|
+
# typedefs
|
270
|
+
@@glfw_cb_signature = {
|
271
|
+
:GLFWglproc => "void GLFWglproc()",
|
272
|
+
:GLFWerrorfun => "void GLFWerrorfun(int,const char*)",
|
273
|
+
:GLFWwindowposfun => "void GLFWwindowposfun(void*,int,int)",
|
274
|
+
:GLFWwindowsizefun => "void GLFWwindowsizefun(void*,int,int)",
|
275
|
+
:GLFWwindowclosefun => "void GLFWwindowclosefun(void*)",
|
276
|
+
:GLFWwindowrefreshfun => "void GLFWwindowrefreshfun(void*)",
|
277
|
+
:GLFWwindowfocusfun => "void GLFWwindowfocusfun(void*,int)",
|
278
|
+
:GLFWwindowiconifyfun => "void GLFWwindowiconifyfun(void*,int)",
|
279
|
+
:GLFWframebuffersizefun => "void GLFWframebuffersizefun(void*,int,int)",
|
280
|
+
:GLFWmousebuttonfun => "void GLFWmousebuttonfun(void*,int,int,int)",
|
281
|
+
:GLFWcursorposfun => "void GLFWcursorposfun(void*,double,double)",
|
282
|
+
:GLFWcursorenterfun => "void GLFWcursorenterfun(void*,int)",
|
283
|
+
:GLFWscrollfun => "void GLFWscrollfun(void*,double,double)",
|
284
|
+
:GLFWkeyfun => "void GLFWkeyfun(void*,int,int,int,int)",
|
285
|
+
:GLFWcharfun => "void GLFWcharfun(void*,unsigned int)",
|
286
|
+
:GLFWmonitorfun => "void GLFWmonitorfun(void*,int)",
|
287
|
+
}
|
288
|
+
def self.create_callback( sym, *opts, &blk )
|
289
|
+
return bind( @@glfw_cb_signature[sym], opts, &blk )
|
290
|
+
end
|
291
|
+
|
292
|
+
# struct
|
293
|
+
GLFWvidmode = struct(["int width",
|
294
|
+
"int height",
|
295
|
+
"int redBits",
|
296
|
+
"int greenBits",
|
297
|
+
"int blueBits",
|
298
|
+
"int refreshRate"])
|
299
|
+
|
300
|
+
GLFWgammaramp = struct(["unsigned short* red",
|
301
|
+
"unsigned short* green",
|
302
|
+
"unsigned short* blue",
|
303
|
+
"unsigned int size"])
|
304
|
+
|
305
|
+
@@glfw_import_done = false
|
306
|
+
|
307
|
+
# Load native library.
|
308
|
+
def self.load_dll(lib = 'libglfw.dylib', path = '.')
|
309
|
+
dlload (path + '/' + lib)
|
310
|
+
import_symbols() unless @@glfw_import_done
|
311
|
+
end
|
312
|
+
|
313
|
+
def self.import_symbols
|
314
|
+
# function
|
315
|
+
extern 'int glfwInit()'
|
316
|
+
extern 'void glfwTerminate()'
|
317
|
+
extern 'void glfwGetVersion(int*, int*, int*)'
|
318
|
+
extern 'const char* glfwGetVersionString()'
|
319
|
+
extern 'void* glfwSetErrorCallback(void*)'
|
320
|
+
extern 'void** glfwGetMonitors(int*)'
|
321
|
+
extern 'void* glfwGetPrimaryMonitor()'
|
322
|
+
extern 'void glfwGetMonitorPos(void*, int*, int*)'
|
323
|
+
extern 'void glfwGetMonitorPhysicalSize(void*, int*, int*)'
|
324
|
+
extern 'const char* glfwGetMonitorName(void*)'
|
325
|
+
extern 'void* glfwSetMonitorCallback(void*)'
|
326
|
+
extern 'const void* glfwGetVideoModes(void*, int*)'
|
327
|
+
extern 'const void* glfwGetVideoMode(void*)'
|
328
|
+
extern 'void glfwSetGamma(void*, float)'
|
329
|
+
extern 'const void* glfwGetGammaRamp(void*)'
|
330
|
+
extern 'void glfwSetGammaRamp(void*, const void*)'
|
331
|
+
extern 'void glfwDefaultWindowHints()'
|
332
|
+
extern 'void glfwWindowHint(int, int)'
|
333
|
+
extern 'void* glfwCreateWindow(int, int, const char*, void*, void*)'
|
334
|
+
extern 'void glfwDestroyWindow(void*)'
|
335
|
+
extern 'int glfwWindowShouldClose(void*)'
|
336
|
+
extern 'void glfwSetWindowShouldClose(void* window, int)'
|
337
|
+
extern 'void glfwSetWindowTitle(void*, const char*)'
|
338
|
+
extern 'void glfwGetWindowPos(void*, int*, int*)'
|
339
|
+
extern 'void glfwSetWindowPos(void*, int, int)'
|
340
|
+
extern 'void glfwGetWindowSize(void*, int*, int*)'
|
341
|
+
extern 'void glfwSetWindowSize(void*, int, int)'
|
342
|
+
extern 'void glfwGetFramebufferSize(void*, int*, int*)'
|
343
|
+
extern 'void glfwIconifyWindow(void*)'
|
344
|
+
extern 'void glfwRestoreWindow(void*)'
|
345
|
+
extern 'void glfwShowWindow(void*)'
|
346
|
+
extern 'void glfwHideWindow(void*)'
|
347
|
+
extern 'void* glfwGetWindowMonitor(void*)'
|
348
|
+
extern 'int glfwGetWindowAttrib(void*, int)'
|
349
|
+
extern 'void glfwSetWindowUserPointer(void*, void*)'
|
350
|
+
extern 'void* glfwGetWindowUserPointer(void*)'
|
351
|
+
extern 'void* glfwSetWindowPosCallback(void*, void*)'
|
352
|
+
extern 'void* glfwSetWindowSizeCallback(void*, void*)'
|
353
|
+
extern 'void* glfwSetWindowCloseCallback(void*, void*)'
|
354
|
+
extern 'void* glfwSetWindowRefreshCallback(void*, void*)'
|
355
|
+
extern 'void* glfwSetWindowFocusCallback(void*, void*)'
|
356
|
+
extern 'void* glfwSetWindowIconifyCallback(void*, void*)'
|
357
|
+
extern 'void* glfwSetFramebufferSizeCallback(void*, void*)'
|
358
|
+
extern 'void glfwPollEvents()'
|
359
|
+
extern 'void glfwWaitEvents()'
|
360
|
+
extern 'int glfwGetInputMode(void*, int)'
|
361
|
+
extern 'void glfwSetInputMode(void*, int, int)'
|
362
|
+
extern 'int glfwGetKey(void*, int)'
|
363
|
+
extern 'int glfwGetMouseButton(void*, int)'
|
364
|
+
extern 'void glfwGetCursorPos(void*, void*, void*)'
|
365
|
+
extern 'void glfwSetCursorPos(void*, double, double)'
|
366
|
+
extern 'void* glfwSetKeyCallback(void*, void*)'
|
367
|
+
extern 'void* glfwSetCharCallback(void*, void*)'
|
368
|
+
extern 'void* glfwSetMouseButtonCallback(void*, void*)'
|
369
|
+
extern 'void* glfwSetCursorPosCallback(void*, void*)'
|
370
|
+
extern 'void* glfwSetCursorEnterCallback(void*, void*)'
|
371
|
+
extern 'void* glfwSetScrollCallback(void*, void*)'
|
372
|
+
extern 'int glfwJoystickPresent(int)'
|
373
|
+
extern 'const float* glfwGetJoystickAxes(int, int*)'
|
374
|
+
extern 'const unsigned char* glfwGetJoystickButtons(int, int*)'
|
375
|
+
extern 'const char* glfwGetJoystickName(int)'
|
376
|
+
extern 'void glfwSetClipboardString(void*, const char*)'
|
377
|
+
extern 'const char* glfwGetClipboardString(void*)'
|
378
|
+
extern 'double glfwGetTime()'
|
379
|
+
extern 'void glfwSetTime(double)'
|
380
|
+
extern 'void glfwMakeContextCurrent(void*)'
|
381
|
+
extern 'void* glfwGetCurrentContext()'
|
382
|
+
extern 'void glfwSwapBuffers(void*)'
|
383
|
+
extern 'void glfwSwapInterval(int)'
|
384
|
+
extern 'int glfwExtensionSupported(const char*)'
|
385
|
+
extern 'void* glfwGetProcAddress(const char*)'
|
386
|
+
|
387
|
+
@@glfw_import_done = true
|
388
|
+
end
|
389
|
+
|
390
|
+
end
|