glfw3 0.1.1 → 0.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 +4 -4
- data/COPYING +26 -0
- data/README.md +86 -0
- data/ext/glfw3/glfw3.c +506 -163
- data/lib/glfw3.rb +6 -0
- data/lib/glfw3/callbacks.rb +45 -0
- data/lib/glfw3/window.rb +45 -0
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c71879992988bff0b3bd240651241e68c5f6315c
|
4
|
+
data.tar.gz: 6de12532188d628f437867a407d7dd0dd26d8921
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aecf77997284f61fc094da9ae5aa7d89b75ad2f1a474e4ba3fb8e9004a9316298e3b9fa8059639e6c7f5492be5d7fac8e874d7afb08a75e5759dc2f0d6300f13
|
7
|
+
data.tar.gz: cec9e493ec9a01b0d45ebb5bb004aa3840340dbbd43edd85c013ddeb484a1f1b1240eedb295f92925818f71f8ca64067bb3f8ac09016158c51c6e1e86da28f50
|
data/COPYING
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2013, Noel Raymond Cower <ncower@gmail.com>.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
8
|
+
list of conditions and the following disclaimer.
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
16
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
17
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
18
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
19
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
20
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
21
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
22
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
23
|
+
|
24
|
+
The views and conclusions contained in the software and documentation are those
|
25
|
+
of the authors and should not be interpreted as representing official policies,
|
26
|
+
either expressed or implied, of the FreeBSD Project.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
ruby-glfw3
|
2
|
+
==========
|
3
|
+
|
4
|
+
[GLFW 3] bindings gem for Ruby 2.x.
|
5
|
+
|
6
|
+
To install the gem, you'll need GLFW 3 built and installed where pkg-config can
|
7
|
+
find it. You may also want to grab some [OpenGL bindings] as well.
|
8
|
+
|
9
|
+
[OpenGL bindings]: https://github.com/nilium/ruby-opengl
|
10
|
+
[GLFW 3]: https://github.com/glfw/glfw
|
11
|
+
|
12
|
+
Once that's taken care of, you can install it simply by building and installing
|
13
|
+
the gem, like so:
|
14
|
+
|
15
|
+
$ gem build glfw3.gemspec
|
16
|
+
$ gem install glfw3-0.0.1.gemspec
|
17
|
+
|
18
|
+
After that, write a quick script to toy with it. For example:
|
19
|
+
|
20
|
+
require 'glfw3'
|
21
|
+
require 'opengl-core'
|
22
|
+
|
23
|
+
# Initialize GLFW 3
|
24
|
+
Glfw.init
|
25
|
+
|
26
|
+
# Create a window
|
27
|
+
window = Glfw::Window.new(800, 600, "Foobar")
|
28
|
+
|
29
|
+
# Set some callbacks
|
30
|
+
window.set_key_callback {
|
31
|
+
|window, key, code, action, mods|
|
32
|
+
window.should_close = true if key == Glfw::KEY_ESCAPE
|
33
|
+
}
|
34
|
+
|
35
|
+
window.set_close_callback {
|
36
|
+
|window|
|
37
|
+
window.should_close = true
|
38
|
+
}
|
39
|
+
|
40
|
+
# Make the window's context current
|
41
|
+
window.make_context_current
|
42
|
+
loop {
|
43
|
+
# And do stuff
|
44
|
+
Glfw.wait_events
|
45
|
+
Gl.glClear(Gl::GL_COLOR_BUFFER_BIT | Gl::GL_DEPTH_BUFFER_BIT)
|
46
|
+
window.swap_buffers
|
47
|
+
break if window.should_close?
|
48
|
+
}
|
49
|
+
|
50
|
+
# Explicitly destroy the window when done with it.
|
51
|
+
window.destroy
|
52
|
+
|
53
|
+
|
54
|
+
License
|
55
|
+
-------
|
56
|
+
|
57
|
+
ruby-glw3 is licensed under a simplified BSD license because it seems the most
|
58
|
+
reasonable. If there's a problem with that, let me know.
|
59
|
+
|
60
|
+
Copyright (c) 2013, Noel Raymond Cower <ncower@gmail.com>.
|
61
|
+
All rights reserved.
|
62
|
+
|
63
|
+
Redistribution and use in source and binary forms, with or without
|
64
|
+
modification, are permitted provided that the following conditions are met:
|
65
|
+
|
66
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
67
|
+
list of conditions and the following disclaimer.
|
68
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
69
|
+
this list of conditions and the following disclaimer in the documentation
|
70
|
+
and/or other materials provided with the distribution.
|
71
|
+
|
72
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
73
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
74
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
75
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
76
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
77
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
78
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
79
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
80
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
81
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
82
|
+
|
83
|
+
The views and conclusions contained in the software and documentation are those
|
84
|
+
of the authors and should not be interpreted as representing official policies,
|
85
|
+
either expressed or implied, of the FreeBSD Project.
|
86
|
+
|
data/ext/glfw3/glfw3.c
CHANGED
@@ -51,8 +51,14 @@ static VALUE NAME (VALUE self, VALUE enabled) \
|
|
51
51
|
}
|
52
52
|
|
53
53
|
|
54
|
-
/*
|
55
|
-
|
54
|
+
/*
|
55
|
+
* Initializes GLFW. Returns true on success, false on failure.
|
56
|
+
*
|
57
|
+
* call-seq:
|
58
|
+
* init -> true or false
|
59
|
+
*
|
60
|
+
* Wraps glfwInit.
|
61
|
+
*/
|
56
62
|
static VALUE rb_glfw_init(VALUE self)
|
57
63
|
{
|
58
64
|
(void)self;
|
@@ -66,8 +72,11 @@ static VALUE rb_glfw_init(VALUE self)
|
|
66
72
|
|
67
73
|
|
68
74
|
|
69
|
-
/*
|
70
|
-
|
75
|
+
/*
|
76
|
+
* Terminates GLFW.
|
77
|
+
*
|
78
|
+
* Wraps glfwTerminate.
|
79
|
+
*/
|
71
80
|
static VALUE rb_glfw_terminate(VALUE self)
|
72
81
|
{
|
73
82
|
glfwTerminate();
|
@@ -76,8 +85,14 @@ static VALUE rb_glfw_terminate(VALUE self)
|
|
76
85
|
|
77
86
|
|
78
87
|
|
79
|
-
/*
|
80
|
-
|
88
|
+
/*
|
89
|
+
* Returns GLFW's version in an array.
|
90
|
+
*
|
91
|
+
* call-seq:
|
92
|
+
* version -> [major, minor, revision]
|
93
|
+
*
|
94
|
+
* Wraps glfwGetVersion.
|
95
|
+
*/
|
81
96
|
static VALUE rb_glfw_version(VALUE self)
|
82
97
|
{
|
83
98
|
int major = 0;
|
@@ -89,14 +104,10 @@ static VALUE rb_glfw_version(VALUE self)
|
|
89
104
|
|
90
105
|
|
91
106
|
|
92
|
-
/* GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); */
|
93
|
-
|
94
107
|
static void rb_glfw_error_callback(int error_code, const char *description)
|
95
108
|
{
|
96
109
|
VALUE lambda = rb_cvar_get(s_glfw_module, rb_intern(kRB_CVAR_GLFW_ERROR_CALLBACK));
|
97
110
|
|
98
|
-
|
99
|
-
|
100
111
|
if (RTEST(lambda)) {
|
101
112
|
VALUE rb_description = rb_str_new2(description);
|
102
113
|
VALUE rb_error_code = INT2FIX(error_code);
|
@@ -110,8 +121,14 @@ static void rb_glfw_error_callback(int error_code, const char *description)
|
|
110
121
|
|
111
122
|
|
112
123
|
|
113
|
-
/*
|
114
|
-
|
124
|
+
/*
|
125
|
+
* Gets an array of all currently connected monitors.
|
126
|
+
*
|
127
|
+
* call-seq:
|
128
|
+
* monitors -> [Glfw::Monitor, ...]
|
129
|
+
*
|
130
|
+
* Wraps glfwGetMonitors.
|
131
|
+
*/
|
115
132
|
VALUE rb_glfw_get_monitors(VALUE self)
|
116
133
|
{
|
117
134
|
long monitor_index = 0;
|
@@ -128,8 +145,14 @@ VALUE rb_glfw_get_monitors(VALUE self)
|
|
128
145
|
|
129
146
|
|
130
147
|
|
131
|
-
/*
|
132
|
-
|
148
|
+
/*
|
149
|
+
* Gets the primary monitor.
|
150
|
+
*
|
151
|
+
* call-seq:
|
152
|
+
* primary_monitor -> Glfw::Monitor
|
153
|
+
*
|
154
|
+
* Wraps glfwGetPrimaryMonitor.
|
155
|
+
*/
|
133
156
|
VALUE rb_glfw_get_primary_monitor(VALUE self)
|
134
157
|
{
|
135
158
|
VALUE monitor = Data_Wrap_Struct(s_glfw_monitor_klass, 0, 0, glfwGetPrimaryMonitor());
|
@@ -139,8 +162,14 @@ VALUE rb_glfw_get_primary_monitor(VALUE self)
|
|
139
162
|
|
140
163
|
|
141
164
|
|
142
|
-
/*
|
143
|
-
|
165
|
+
/*
|
166
|
+
* Gets the monitor's position in screen-space.
|
167
|
+
*
|
168
|
+
* call-seq:
|
169
|
+
* position -> [x, y]
|
170
|
+
*
|
171
|
+
* Wraps glfwGetMonitorPos.
|
172
|
+
*/
|
144
173
|
VALUE rb_monitor_position(VALUE self)
|
145
174
|
{
|
146
175
|
GLFWmonitor *monitor;
|
@@ -153,8 +182,14 @@ VALUE rb_monitor_position(VALUE self)
|
|
153
182
|
|
154
183
|
|
155
184
|
|
156
|
-
/*
|
157
|
-
|
185
|
+
/*
|
186
|
+
* Gets the physical size of the monitor.
|
187
|
+
*
|
188
|
+
* call-seq:
|
189
|
+
* physical_size -> [width, height]
|
190
|
+
*
|
191
|
+
* Wraps glfwGetMonitorPhysicalSize.
|
192
|
+
*/
|
158
193
|
VALUE rb_monitor_physical_size(VALUE self)
|
159
194
|
{
|
160
195
|
GLFWmonitor *monitor;
|
@@ -167,9 +202,14 @@ VALUE rb_monitor_physical_size(VALUE self)
|
|
167
202
|
|
168
203
|
|
169
204
|
|
170
|
-
/*
|
171
|
-
|
172
|
-
|
205
|
+
/*
|
206
|
+
* Gets the name of the monitor.
|
207
|
+
*
|
208
|
+
* call-seq:
|
209
|
+
* name -> String
|
210
|
+
*
|
211
|
+
* Wraps glfwGetMonitorName.
|
212
|
+
*/
|
173
213
|
VALUE rb_monitor_name(VALUE self)
|
174
214
|
{
|
175
215
|
GLFWmonitor *monitor;
|
@@ -179,8 +219,6 @@ VALUE rb_monitor_name(VALUE self)
|
|
179
219
|
|
180
220
|
|
181
221
|
|
182
|
-
/* GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); */
|
183
|
-
|
184
222
|
static void rb_glfw_monitor_callback(GLFWmonitor *monitor, int message)
|
185
223
|
{
|
186
224
|
VALUE lambda = rb_cvar_get(s_glfw_module, rb_intern(kRB_CVAR_GLFW_MONITOR_CALLBACK));
|
@@ -193,8 +231,14 @@ static void rb_glfw_monitor_callback(GLFWmonitor *monitor, int message)
|
|
193
231
|
|
194
232
|
|
195
233
|
|
196
|
-
/*
|
197
|
-
|
234
|
+
/*
|
235
|
+
* The width of the video mode.
|
236
|
+
*
|
237
|
+
* call-seq:
|
238
|
+
* width -> Fixed
|
239
|
+
*
|
240
|
+
* Wraps GLFWvidmode.width.
|
241
|
+
*/
|
198
242
|
static VALUE rb_videomode_width(VALUE self)
|
199
243
|
{
|
200
244
|
GLFWvidmode *mode;
|
@@ -202,6 +246,14 @@ static VALUE rb_videomode_width(VALUE self)
|
|
202
246
|
return INT2FIX(mode->width);
|
203
247
|
}
|
204
248
|
|
249
|
+
/*
|
250
|
+
* The height of the video mode.
|
251
|
+
*
|
252
|
+
* call-seq:
|
253
|
+
* height -> Fixed
|
254
|
+
*
|
255
|
+
* Wraps GLFWvidmode.height.
|
256
|
+
*/
|
205
257
|
static VALUE rb_videomode_height(VALUE self)
|
206
258
|
{
|
207
259
|
GLFWvidmode *mode;
|
@@ -209,6 +261,14 @@ static VALUE rb_videomode_height(VALUE self)
|
|
209
261
|
return INT2FIX(mode->height);
|
210
262
|
}
|
211
263
|
|
264
|
+
/*
|
265
|
+
* The number of red bits in the video mode.
|
266
|
+
*
|
267
|
+
* call-seq:
|
268
|
+
* red_bits -> Fixed
|
269
|
+
*
|
270
|
+
* Wraps GLFWvidmode.redBits.
|
271
|
+
*/
|
212
272
|
static VALUE rb_videomode_red_bits(VALUE self)
|
213
273
|
{
|
214
274
|
GLFWvidmode *mode;
|
@@ -216,6 +276,14 @@ static VALUE rb_videomode_red_bits(VALUE self)
|
|
216
276
|
return INT2FIX(mode->redBits);
|
217
277
|
}
|
218
278
|
|
279
|
+
/*
|
280
|
+
* The number of green bits in the video mode.
|
281
|
+
*
|
282
|
+
* call-seq:
|
283
|
+
* green_bits -> Fixed
|
284
|
+
*
|
285
|
+
* Wraps GLFWvidmode.greenBits.
|
286
|
+
*/
|
219
287
|
static VALUE rb_videomode_green_bits(VALUE self)
|
220
288
|
{
|
221
289
|
GLFWvidmode *mode;
|
@@ -223,6 +291,14 @@ static VALUE rb_videomode_green_bits(VALUE self)
|
|
223
291
|
return INT2FIX(mode->greenBits);
|
224
292
|
}
|
225
293
|
|
294
|
+
/*
|
295
|
+
* The number of blue bits in the video mode.
|
296
|
+
*
|
297
|
+
* call-seq:
|
298
|
+
* blue_bits -> Fixed
|
299
|
+
*
|
300
|
+
* Wraps GLFWvidmode.blueBits.
|
301
|
+
*/
|
226
302
|
static VALUE rb_videomode_blue_bits(VALUE self)
|
227
303
|
{
|
228
304
|
GLFWvidmode *mode;
|
@@ -230,6 +306,14 @@ static VALUE rb_videomode_blue_bits(VALUE self)
|
|
230
306
|
return INT2FIX(mode->blueBits);
|
231
307
|
}
|
232
308
|
|
309
|
+
/*
|
310
|
+
* The video mode's refresh rate.
|
311
|
+
*
|
312
|
+
* call-seq:
|
313
|
+
* refresh_rate -> Fixed
|
314
|
+
*
|
315
|
+
* Wraps GLFWvidmode.refreshRate.
|
316
|
+
*/
|
233
317
|
static VALUE rb_videomode_refresh_rate(VALUE self)
|
234
318
|
{
|
235
319
|
GLFWvidmode *mode;
|
@@ -237,6 +321,16 @@ static VALUE rb_videomode_refresh_rate(VALUE self)
|
|
237
321
|
return INT2FIX(mode->refreshRate);
|
238
322
|
}
|
239
323
|
|
324
|
+
/*
|
325
|
+
* Gets an array of all video modes associated with the monitor, sorted
|
326
|
+
* ascending first by color depth and then the video mode's area
|
327
|
+
* (width x height).
|
328
|
+
*
|
329
|
+
* call-seq:
|
330
|
+
* video_mode -> [Glfw::VideoMode, ...]
|
331
|
+
*
|
332
|
+
* Wraps glfwGetVideoModes.
|
333
|
+
*/
|
240
334
|
static VALUE rb_monitor_video_modes(VALUE self)
|
241
335
|
{
|
242
336
|
GLFWmonitor *monitor;
|
@@ -257,8 +351,14 @@ static VALUE rb_monitor_video_modes(VALUE self)
|
|
257
351
|
|
258
352
|
|
259
353
|
|
260
|
-
/*
|
261
|
-
|
354
|
+
/*
|
355
|
+
* Gets the monitor's current video mode.
|
356
|
+
*
|
357
|
+
* call-seq:
|
358
|
+
* video_mode -> Glfw::VideoMode
|
359
|
+
*
|
360
|
+
* Wraps glfwGetVideoMode.
|
361
|
+
*/
|
262
362
|
static VALUE rb_monitor_video_mode(VALUE self)
|
263
363
|
{
|
264
364
|
GLFWmonitor *monitor;
|
@@ -272,8 +372,15 @@ static VALUE rb_monitor_video_mode(VALUE self)
|
|
272
372
|
|
273
373
|
|
274
374
|
|
275
|
-
/*
|
276
|
-
|
375
|
+
/*
|
376
|
+
* Sets the monitor's gamma ramp to a 256-element ramp generated by the given
|
377
|
+
* exponent.
|
378
|
+
*
|
379
|
+
* call-seq:
|
380
|
+
* set_gamma(gamma) -> self
|
381
|
+
*
|
382
|
+
* Wraps glfwSetGamma.
|
383
|
+
*/
|
277
384
|
static VALUE rb_monitor_set_gamma(VALUE self, VALUE gamma)
|
278
385
|
{
|
279
386
|
GLFWmonitor *monitor;
|
@@ -284,20 +391,20 @@ static VALUE rb_monitor_set_gamma(VALUE self, VALUE gamma)
|
|
284
391
|
|
285
392
|
|
286
393
|
|
287
|
-
/* GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); */
|
288
|
-
|
289
394
|
#warning "No implementation for glfwGetGammaRamp bindings"
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
/* GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); */
|
294
|
-
|
295
395
|
#warning "No implementation for glfwSetGammaRamp bindings"
|
296
396
|
|
297
397
|
|
298
398
|
|
299
|
-
/*
|
300
|
-
|
399
|
+
/*
|
400
|
+
* Sets the window hints to their default values. See GLFW 3 documentation for
|
401
|
+
* details on what those values are.
|
402
|
+
*
|
403
|
+
* call-seq:
|
404
|
+
* default_window_hints() -> self
|
405
|
+
*
|
406
|
+
* Wraps glfwDefaultWindowHints.
|
407
|
+
*/
|
301
408
|
static VALUE rb_window_default_window_hints(VALUE self)
|
302
409
|
{
|
303
410
|
glfwDefaultWindowHints();
|
@@ -306,8 +413,14 @@ static VALUE rb_window_default_window_hints(VALUE self)
|
|
306
413
|
|
307
414
|
|
308
415
|
|
309
|
-
/*
|
310
|
-
|
416
|
+
/*
|
417
|
+
* Sets a window hint to the given value.
|
418
|
+
*
|
419
|
+
* call-seq:
|
420
|
+
* window_hint(target, hint) -> self
|
421
|
+
*
|
422
|
+
* Wraps glfwWindowHint.
|
423
|
+
*/
|
311
424
|
static VALUE rb_window_window_hint(VALUE self, VALUE target, VALUE hint)
|
312
425
|
{
|
313
426
|
glfwWindowHint(NUM2INT(target), NUM2INT(hint));
|
@@ -315,14 +428,13 @@ static VALUE rb_window_window_hint(VALUE self, VALUE target, VALUE hint)
|
|
315
428
|
}
|
316
429
|
|
317
430
|
|
318
|
-
|
319
|
-
/* GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, */
|
320
|
-
|
431
|
+
// Auxiliary function for extracting a Glfw::Window object from a GLFWwindow.
|
321
432
|
static VALUE rb_lookup_window(GLFWwindow *window)
|
322
433
|
{
|
323
434
|
return (VALUE)glfwGetWindowUserPointer(window);
|
324
435
|
}
|
325
436
|
|
437
|
+
// And the opposite of rb_lookup_window
|
326
438
|
static GLFWwindow *rb_get_window(VALUE rb_window)
|
327
439
|
{
|
328
440
|
GLFWwindow *window = NULL;
|
@@ -336,11 +448,15 @@ static GLFWwindow *rb_get_window(VALUE rb_window)
|
|
336
448
|
return window;
|
337
449
|
}
|
338
450
|
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
451
|
+
/*
|
452
|
+
* Creates a new window with the given parameters. If a shared window is
|
453
|
+
* provided, the new window will use the context of the shared window.
|
454
|
+
*
|
455
|
+
* call-seq:
|
456
|
+
* new(width, height, title='', monitor=nil, shared_window=nil) -> Glfw::Window
|
457
|
+
*
|
458
|
+
* Wraps glfwCreateWindow.
|
459
|
+
*/
|
344
460
|
static VALUE rb_window_new(int argc, VALUE *argv, VALUE self)
|
345
461
|
{
|
346
462
|
ID ivar_window = rb_intern(kRB_IVAR_WINDOW_INTERNAL);
|
@@ -413,8 +529,11 @@ static VALUE rb_window_new(int argc, VALUE *argv, VALUE self)
|
|
413
529
|
|
414
530
|
|
415
531
|
|
416
|
-
/*
|
417
|
-
|
532
|
+
/*
|
533
|
+
* Destroys the window.
|
534
|
+
*
|
535
|
+
* Wraps glfwDestroyWindow.
|
536
|
+
*/
|
418
537
|
static VALUE rb_window_destroy(VALUE self)
|
419
538
|
{
|
420
539
|
GLFWwindow *window = rb_get_window(self);
|
@@ -429,8 +548,14 @@ static VALUE rb_window_destroy(VALUE self)
|
|
429
548
|
|
430
549
|
|
431
550
|
|
432
|
-
/*
|
433
|
-
|
551
|
+
/*
|
552
|
+
* Gets the window's should-close flag.
|
553
|
+
*
|
554
|
+
* call-seq:
|
555
|
+
* should_close? -> true or false
|
556
|
+
*
|
557
|
+
* Wraps glfwWindowShouldClose.
|
558
|
+
*/
|
434
559
|
static VALUE rb_window_should_close(VALUE self)
|
435
560
|
{
|
436
561
|
GLFWwindow *window = rb_get_window(self);
|
@@ -439,29 +564,51 @@ static VALUE rb_window_should_close(VALUE self)
|
|
439
564
|
|
440
565
|
|
441
566
|
|
442
|
-
/*
|
443
|
-
|
567
|
+
/*
|
568
|
+
* Sets the window's should-close flag. Ideally, the value provided should be
|
569
|
+
* a boolean, though it is only tested for non-nil and -false status, so it can
|
570
|
+
* be anything that would yield true for !!value.
|
571
|
+
*
|
572
|
+
* call-seq:
|
573
|
+
* should_close=(value) -> value
|
574
|
+
* should_close = value -> value
|
575
|
+
*
|
576
|
+
* Wraps glfwSetWindowShouldClose.
|
577
|
+
*/
|
444
578
|
static VALUE rb_window_set_should_close(VALUE self, VALUE value)
|
445
579
|
{
|
446
580
|
GLFWwindow *window = rb_get_window(self);
|
447
581
|
glfwSetWindowShouldClose(window, RTEST(value) ? GL_TRUE : GL_FALSE);
|
448
|
-
return
|
582
|
+
return value;
|
449
583
|
}
|
450
584
|
|
451
585
|
|
452
586
|
|
453
|
-
/*
|
454
|
-
|
455
|
-
|
587
|
+
/*
|
588
|
+
* Sets the window's title.
|
589
|
+
*
|
590
|
+
* call-seq:
|
591
|
+
* title=(new_title) -> new_title
|
592
|
+
* title = new_title -> new_title
|
593
|
+
*
|
594
|
+
* Wraps glfwSetWindowTitle.
|
595
|
+
*/
|
596
|
+
static VALUE rb_window_set_title(VALUE self, VALUE new_title)
|
456
597
|
{
|
457
|
-
glfwSetWindowTitle(rb_get_window(self), StringValueCStr(
|
458
|
-
return
|
598
|
+
glfwSetWindowTitle(rb_get_window(self), StringValueCStr(new_title));
|
599
|
+
return new_title;
|
459
600
|
}
|
460
601
|
|
461
602
|
|
462
603
|
|
463
|
-
/*
|
464
|
-
|
604
|
+
/*
|
605
|
+
* Gets the windows position.
|
606
|
+
*
|
607
|
+
* call-seq:
|
608
|
+
* position -> [x, y]
|
609
|
+
*
|
610
|
+
* Wraps glfwGetWindowPos.
|
611
|
+
*/
|
465
612
|
static VALUE rb_window_get_position(VALUE self)
|
466
613
|
{
|
467
614
|
int xpos = 0;
|
@@ -472,8 +619,15 @@ static VALUE rb_window_get_position(VALUE self)
|
|
472
619
|
|
473
620
|
|
474
621
|
|
475
|
-
/*
|
476
|
-
|
622
|
+
/*
|
623
|
+
* Moves the window to a new location (sets its position).
|
624
|
+
*
|
625
|
+
* call-seq:
|
626
|
+
* set_position(x, y) -> self
|
627
|
+
* move(x, y) -> self
|
628
|
+
*
|
629
|
+
* Wraps glfwSetWindowPos.
|
630
|
+
*/
|
477
631
|
static VALUE rb_window_set_position(VALUE self, VALUE x, VALUE y)
|
478
632
|
{
|
479
633
|
glfwSetWindowPos(rb_get_window(self), NUM2INT(x), NUM2INT(y));
|
@@ -482,8 +636,14 @@ static VALUE rb_window_set_position(VALUE self, VALUE x, VALUE y)
|
|
482
636
|
|
483
637
|
|
484
638
|
|
485
|
-
/*
|
486
|
-
|
639
|
+
/*
|
640
|
+
* Gets the window's size.
|
641
|
+
*
|
642
|
+
* call-seq:
|
643
|
+
* size -> [width, height]
|
644
|
+
*
|
645
|
+
* Wraps glfwGetWindowSize.
|
646
|
+
*/
|
487
647
|
static VALUE rb_window_get_size(VALUE self)
|
488
648
|
{
|
489
649
|
int width = 0;
|
@@ -494,8 +654,15 @@ static VALUE rb_window_get_size(VALUE self)
|
|
494
654
|
|
495
655
|
|
496
656
|
|
497
|
-
/*
|
498
|
-
|
657
|
+
/*
|
658
|
+
* Sets the window's size.
|
659
|
+
*
|
660
|
+
* call-seq:
|
661
|
+
* set_size(width, height) -> self
|
662
|
+
* resize(width, height) -> self
|
663
|
+
*
|
664
|
+
* Wraps glfwSetWindowSize.
|
665
|
+
*/
|
499
666
|
static VALUE rb_window_set_size(VALUE self, VALUE width, VALUE height)
|
500
667
|
{
|
501
668
|
glfwSetWindowSize(rb_get_window(self), NUM2INT(width), NUM2INT(height));
|
@@ -504,8 +671,14 @@ static VALUE rb_window_set_size(VALUE self, VALUE width, VALUE height)
|
|
504
671
|
|
505
672
|
|
506
673
|
|
507
|
-
/*
|
508
|
-
|
674
|
+
/*
|
675
|
+
* Gets the window context's framebuffer size.
|
676
|
+
*
|
677
|
+
* call-seq:
|
678
|
+
* framebuffer_size -> [width, height]
|
679
|
+
*
|
680
|
+
* Wraps glfwGetFramebufferSize.
|
681
|
+
*/
|
509
682
|
static VALUE rb_window_get_framebuffer_size(VALUE self)
|
510
683
|
{
|
511
684
|
int width = 0;
|
@@ -516,8 +689,11 @@ static VALUE rb_window_get_framebuffer_size(VALUE self)
|
|
516
689
|
|
517
690
|
|
518
691
|
|
519
|
-
/*
|
520
|
-
|
692
|
+
/*
|
693
|
+
* Iconifies the window.
|
694
|
+
*
|
695
|
+
* Wraps glfwIconifyWindow.
|
696
|
+
*/
|
521
697
|
static VALUE rb_window_iconify(VALUE self)
|
522
698
|
{
|
523
699
|
glfwIconifyWindow(rb_get_window(self));
|
@@ -526,8 +702,11 @@ static VALUE rb_window_iconify(VALUE self)
|
|
526
702
|
|
527
703
|
|
528
704
|
|
529
|
-
/*
|
530
|
-
|
705
|
+
/*
|
706
|
+
* Restores the window.
|
707
|
+
*
|
708
|
+
* Wraps glfwRestoreWindow.
|
709
|
+
*/
|
531
710
|
static VALUE rb_window_restore(VALUE self)
|
532
711
|
{
|
533
712
|
glfwRestoreWindow(rb_get_window(self));
|
@@ -536,8 +715,11 @@ static VALUE rb_window_restore(VALUE self)
|
|
536
715
|
|
537
716
|
|
538
717
|
|
539
|
-
/*
|
540
|
-
|
718
|
+
/*
|
719
|
+
* Shows the window.
|
720
|
+
*
|
721
|
+
* Wraps glfwShowWindow.
|
722
|
+
*/
|
541
723
|
static VALUE rb_window_show(VALUE self)
|
542
724
|
{
|
543
725
|
glfwShowWindow(rb_get_window(self));
|
@@ -546,8 +728,11 @@ static VALUE rb_window_show(VALUE self)
|
|
546
728
|
|
547
729
|
|
548
730
|
|
549
|
-
/*
|
550
|
-
|
731
|
+
/*
|
732
|
+
* Hides the window.
|
733
|
+
*
|
734
|
+
* Wraps glfwHideWindow.
|
735
|
+
*/
|
551
736
|
static VALUE rb_window_hide(VALUE self)
|
552
737
|
{
|
553
738
|
glfwHideWindow(rb_get_window(self));
|
@@ -556,8 +741,14 @@ static VALUE rb_window_hide(VALUE self)
|
|
556
741
|
|
557
742
|
|
558
743
|
|
559
|
-
/*
|
560
|
-
|
744
|
+
/*
|
745
|
+
* Gets the window's monitor.
|
746
|
+
*
|
747
|
+
* call-seq:
|
748
|
+
* monitor -> Glfw::Monitor
|
749
|
+
*
|
750
|
+
* Wraps glfwGetWindowMonitor.
|
751
|
+
*/
|
561
752
|
static VALUE rb_window_get_monitor(VALUE self)
|
562
753
|
{
|
563
754
|
GLFWmonitor *monitor = glfwGetWindowMonitor(rb_get_window(self));
|
@@ -568,14 +759,6 @@ static VALUE rb_window_get_monitor(VALUE self)
|
|
568
759
|
|
569
760
|
|
570
761
|
|
571
|
-
/* GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); */
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
/* GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun cbfun); */
|
578
|
-
|
579
762
|
static void rb_window_window_position_callback(GLFWwindow *window, int x, int y)
|
580
763
|
{
|
581
764
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -587,9 +770,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_window_position_callback, rb_window_window_
|
|
587
770
|
|
588
771
|
|
589
772
|
|
590
|
-
|
591
|
-
/* GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbfun); */
|
592
|
-
|
593
773
|
static void rb_window_window_size_callback(GLFWwindow *window, int width, int height)
|
594
774
|
{
|
595
775
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -601,8 +781,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_window_size_callback, rb_window_window_size
|
|
601
781
|
|
602
782
|
|
603
783
|
|
604
|
-
/* GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun); */
|
605
|
-
|
606
784
|
static void rb_window_close_callback(GLFWwindow *window)
|
607
785
|
{
|
608
786
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -614,9 +792,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_close_callback, rb_window_close_callback, g
|
|
614
792
|
|
615
793
|
|
616
794
|
|
617
|
-
|
618
|
-
/* GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun cbfun); */
|
619
|
-
|
620
795
|
static void rb_window_refresh_callback(GLFWwindow *window)
|
621
796
|
{
|
622
797
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -628,8 +803,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_refresh_callback, rb_window_refresh_callbac
|
|
628
803
|
|
629
804
|
|
630
805
|
|
631
|
-
/* GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun); */
|
632
|
-
|
633
806
|
static void rb_window_focus_callback(GLFWwindow *window, int focused)
|
634
807
|
{
|
635
808
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -641,8 +814,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_focus_callback, rb_window_focus_callback, g
|
|
641
814
|
|
642
815
|
|
643
816
|
|
644
|
-
/* GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun cbfun); */
|
645
|
-
|
646
817
|
static void rb_window_iconify_callback(GLFWwindow *window, int iconified)
|
647
818
|
{
|
648
819
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -654,9 +825,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_iconify_callback, rb_window_iconify_callbac
|
|
654
825
|
|
655
826
|
|
656
827
|
|
657
|
-
/* GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun cbfun) */
|
658
|
-
|
659
|
-
|
660
828
|
static void rb_window_fbsize_callback(GLFWwindow *window, int width, int height)
|
661
829
|
{
|
662
830
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -668,8 +836,19 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_fbsize_callback, rb_window_fbsize_callback,
|
|
668
836
|
|
669
837
|
|
670
838
|
|
671
|
-
/*
|
672
|
-
|
839
|
+
/*
|
840
|
+
* Polls for events without blocking until an event occurs.
|
841
|
+
*
|
842
|
+
* Wraps glfwPollEvents.
|
843
|
+
*
|
844
|
+
* This would likely be called at the beginning of your main loop, like so:
|
845
|
+
*
|
846
|
+
* loop {
|
847
|
+
* Glfw.poll_events()
|
848
|
+
*
|
849
|
+
* # ...
|
850
|
+
* }
|
851
|
+
*/
|
673
852
|
static VALUE rb_glfw_poll_events(VALUE self)
|
674
853
|
{
|
675
854
|
glfwPollEvents();
|
@@ -678,8 +857,19 @@ static VALUE rb_glfw_poll_events(VALUE self)
|
|
678
857
|
|
679
858
|
|
680
859
|
|
681
|
-
/*
|
682
|
-
|
860
|
+
/*
|
861
|
+
* Polls for events. Blocks until an event occurs.
|
862
|
+
*
|
863
|
+
* Wraps glfwWaitEvents.
|
864
|
+
*
|
865
|
+
* This would likely be called at the beginning of your main loop, like so:
|
866
|
+
*
|
867
|
+
* loop {
|
868
|
+
* Glfw.wait_events()
|
869
|
+
*
|
870
|
+
* # ...
|
871
|
+
* }
|
872
|
+
*/
|
683
873
|
static VALUE rb_glfw_wait_events(VALUE self)
|
684
874
|
{
|
685
875
|
glfwWaitEvents();
|
@@ -688,8 +878,14 @@ static VALUE rb_glfw_wait_events(VALUE self)
|
|
688
878
|
|
689
879
|
|
690
880
|
|
691
|
-
/*
|
692
|
-
|
881
|
+
/*
|
882
|
+
* Gets the current value for the given input mode.
|
883
|
+
*
|
884
|
+
* call-seq:
|
885
|
+
* get_input_mode(mode) -> Fixed
|
886
|
+
*
|
887
|
+
* Wraps glfwGetInputMode.
|
888
|
+
*/
|
693
889
|
static VALUE rb_window_get_input_mode(VALUE self, VALUE mode)
|
694
890
|
{
|
695
891
|
return INT2FIX(glfwGetInputMode(rb_get_window(self), NUM2INT(mode)));
|
@@ -697,8 +893,14 @@ static VALUE rb_window_get_input_mode(VALUE self, VALUE mode)
|
|
697
893
|
|
698
894
|
|
699
895
|
|
700
|
-
/*
|
701
|
-
|
896
|
+
/*
|
897
|
+
* Sets the value of the given input mode.
|
898
|
+
*
|
899
|
+
* call-seq:
|
900
|
+
* set_input_mode(mode, value) -> self
|
901
|
+
*
|
902
|
+
* Wraps glfwSetInputMode.
|
903
|
+
*/
|
702
904
|
static VALUE rb_window_set_input_mode(VALUE self, VALUE mode, VALUE value)
|
703
905
|
{
|
704
906
|
glfwSetInputMode(rb_get_window(self), NUM2INT(mode), NUM2INT(value));
|
@@ -707,8 +909,14 @@ static VALUE rb_window_set_input_mode(VALUE self, VALUE mode, VALUE value)
|
|
707
909
|
|
708
910
|
|
709
911
|
|
710
|
-
/*
|
711
|
-
|
912
|
+
/*
|
913
|
+
* Gets the last-reported state of the given keyboard key for the window.
|
914
|
+
*
|
915
|
+
* call-seq:
|
916
|
+
* key(key) -> Fixed
|
917
|
+
*
|
918
|
+
* Wraps glfwGetKey.
|
919
|
+
*/
|
712
920
|
static VALUE rb_window_get_key(VALUE self, VALUE key)
|
713
921
|
{
|
714
922
|
return INT2FIX(glfwGetKey(rb_get_window(self), NUM2INT(key)));
|
@@ -716,8 +924,14 @@ static VALUE rb_window_get_key(VALUE self, VALUE key)
|
|
716
924
|
|
717
925
|
|
718
926
|
|
719
|
-
/*
|
720
|
-
|
927
|
+
/*
|
928
|
+
* Gets the last-reported state of the given mouse button for the window.
|
929
|
+
*
|
930
|
+
* call-seq:
|
931
|
+
* mouse_button(key) -> Fixed
|
932
|
+
*
|
933
|
+
* Wraps glfwGetMouseButton.
|
934
|
+
*/
|
721
935
|
static VALUE rb_window_get_mouse_button(VALUE self, VALUE button)
|
722
936
|
{
|
723
937
|
return INT2FIX(glfwGetMouseButton(rb_get_window(self), NUM2INT(button)));
|
@@ -725,8 +939,14 @@ static VALUE rb_window_get_mouse_button(VALUE self, VALUE button)
|
|
725
939
|
|
726
940
|
|
727
941
|
|
728
|
-
/*
|
729
|
-
|
942
|
+
/*
|
943
|
+
* Gets the last-reported cursor position in the window.
|
944
|
+
*
|
945
|
+
* call-seq:
|
946
|
+
* cursor_pos -> [x, y]
|
947
|
+
*
|
948
|
+
* Wraps glfwGetCursorPos.
|
949
|
+
*/
|
730
950
|
static VALUE rb_window_get_cursor_pos(VALUE self)
|
731
951
|
{
|
732
952
|
double xpos = 0;
|
@@ -737,8 +957,16 @@ static VALUE rb_window_get_cursor_pos(VALUE self)
|
|
737
957
|
|
738
958
|
|
739
959
|
|
740
|
-
/*
|
741
|
-
|
960
|
+
/*
|
961
|
+
* Sets the position of the mouse cursor relative to the client area of the
|
962
|
+
* window. If the window isn't focused at the time of the call, this silently
|
963
|
+
* fails.
|
964
|
+
*
|
965
|
+
* call-seq:
|
966
|
+
* set_cursor_pos(x, y) -> self
|
967
|
+
*
|
968
|
+
* Wraps glfwSetCursorPos.
|
969
|
+
*/
|
742
970
|
static VALUE rb_window_set_cursor_pos(VALUE self, VALUE x, VALUE y)
|
743
971
|
{
|
744
972
|
glfwSetCursorPos(rb_get_window(self), NUM2DBL(x), NUM2DBL(y));
|
@@ -747,8 +975,6 @@ static VALUE rb_window_set_cursor_pos(VALUE self, VALUE x, VALUE y)
|
|
747
975
|
|
748
976
|
|
749
977
|
|
750
|
-
/* GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); */
|
751
|
-
|
752
978
|
static void rb_window_key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
753
979
|
{
|
754
980
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -760,8 +986,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_key_callback, rb_window_key_callback, glfwS
|
|
760
986
|
|
761
987
|
|
762
988
|
|
763
|
-
/* GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); */
|
764
|
-
|
765
989
|
static void rb_window_char_callback(GLFWwindow *window, unsigned int code)
|
766
990
|
{
|
767
991
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -774,8 +998,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_char_callback, rb_window_char_callback, glf
|
|
774
998
|
|
775
999
|
|
776
1000
|
|
777
|
-
/* GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun cbfun); */
|
778
|
-
|
779
1001
|
static void rb_window_mouse_button_callback(GLFWwindow *window, int button, int action, int mods)
|
780
1002
|
{
|
781
1003
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -787,8 +1009,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_mouse_button_callback, rb_window_mouse_butt
|
|
787
1009
|
|
788
1010
|
|
789
1011
|
|
790
|
-
/* GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun cbfun); */
|
791
|
-
|
792
1012
|
static void rb_window_cursor_position_callback(GLFWwindow *window, double x, double y)
|
793
1013
|
{
|
794
1014
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -800,8 +1020,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_position_callback, rb_window_cursor_
|
|
800
1020
|
|
801
1021
|
|
802
1022
|
|
803
|
-
/* GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun cbfun); */
|
804
|
-
|
805
1023
|
static void rb_window_cursor_enter_callback(GLFWwindow *window, int entered)
|
806
1024
|
{
|
807
1025
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -813,8 +1031,6 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_cursor_enter_callback, rb_window_cursor_ent
|
|
813
1031
|
|
814
1032
|
|
815
1033
|
|
816
|
-
/* GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun); */
|
817
|
-
|
818
1034
|
static void rb_window_scroll_callback(GLFWwindow *window, double x, double y)
|
819
1035
|
{
|
820
1036
|
VALUE rb_window = rb_lookup_window(window);
|
@@ -827,17 +1043,30 @@ RB_ENABLE_CALLBACK_DEF(rb_window_set_scroll_callback, rb_window_scroll_callback,
|
|
827
1043
|
|
828
1044
|
|
829
1045
|
|
830
|
-
/*
|
831
|
-
|
832
|
-
|
1046
|
+
/*
|
1047
|
+
* Returns whether the given joystick is present.
|
1048
|
+
*
|
1049
|
+
* call-seq:
|
1050
|
+
* joystick_present?(joystick) -> true or false
|
1051
|
+
*
|
1052
|
+
* Wraps glfwJoystickPresent.
|
1053
|
+
*/
|
1054
|
+
static VALUE rb_glfw_joystick_present(VALUE self, VALUE joystick)
|
833
1055
|
{
|
834
1056
|
return glfwJoystickPresent(NUM2INT(joystick)) ? Qtrue : Qfalse;
|
835
1057
|
}
|
836
1058
|
|
837
1059
|
|
838
1060
|
|
839
|
-
/*
|
840
|
-
|
1061
|
+
/*
|
1062
|
+
* Gets the values of all axes of the given joystick. Returns nil if the
|
1063
|
+
* joystick isn't present. See #joystick_present?.
|
1064
|
+
*
|
1065
|
+
* call-seq:
|
1066
|
+
* joystick_axes(joystick) -> [Float, ...] or nil
|
1067
|
+
*
|
1068
|
+
* Wraps glfwGetJoystickAxes.
|
1069
|
+
*/
|
841
1070
|
static VALUE rb_glfw_get_joystick_axes(VALUE self, VALUE joystick)
|
842
1071
|
{
|
843
1072
|
VALUE rb_axes = Qnil;
|
@@ -854,8 +1083,15 @@ static VALUE rb_glfw_get_joystick_axes(VALUE self, VALUE joystick)
|
|
854
1083
|
|
855
1084
|
|
856
1085
|
|
857
|
-
/*
|
858
|
-
|
1086
|
+
/*
|
1087
|
+
* Gets the button values of the given joystick. Returns nil if the joystick
|
1088
|
+
* isn't present. See #joystick_present?.
|
1089
|
+
*
|
1090
|
+
* call-seq:
|
1091
|
+
* joystick_buttons(joystick) -> [Fixed, ...] or nil
|
1092
|
+
*
|
1093
|
+
* Wraps glfwGetJoystickButtons.
|
1094
|
+
*/
|
859
1095
|
static VALUE rb_glfw_get_joystick_buttons(VALUE self, VALUE joystick)
|
860
1096
|
{
|
861
1097
|
VALUE rb_buttons = Qnil;
|
@@ -872,8 +1108,14 @@ static VALUE rb_glfw_get_joystick_buttons(VALUE self, VALUE joystick)
|
|
872
1108
|
|
873
1109
|
|
874
1110
|
|
875
|
-
/*
|
876
|
-
|
1111
|
+
/*
|
1112
|
+
* Returns the name of the given joystick.
|
1113
|
+
*
|
1114
|
+
* call-seq:
|
1115
|
+
* joystick_name(joystick) -> String
|
1116
|
+
*
|
1117
|
+
* Wraps glfwGetJoystickName.
|
1118
|
+
*/
|
877
1119
|
static VALUE rb_glfw_get_joystick_name(VALUE self, VALUE joystick)
|
878
1120
|
{
|
879
1121
|
const char *joy_name = glfwGetJoystickName(NUM2INT(joystick));
|
@@ -886,8 +1128,16 @@ static VALUE rb_glfw_get_joystick_name(VALUE self, VALUE joystick)
|
|
886
1128
|
|
887
1129
|
|
888
1130
|
|
889
|
-
/*
|
890
|
-
|
1131
|
+
/*
|
1132
|
+
* Sets the system clipboard string. The window this is set for will own the
|
1133
|
+
* given string.
|
1134
|
+
*
|
1135
|
+
* call-seq:
|
1136
|
+
* clipboard_string=(string) -> String
|
1137
|
+
* clipboard_string = string -> String
|
1138
|
+
*
|
1139
|
+
* Wraps glfwSetClipboardString.
|
1140
|
+
*/
|
891
1141
|
static VALUE rb_window_set_clipboard_string(VALUE self, VALUE string)
|
892
1142
|
{
|
893
1143
|
glfwSetClipboardString(rb_get_window(self), StringValueCStr(string));
|
@@ -896,8 +1146,15 @@ static VALUE rb_window_set_clipboard_string(VALUE self, VALUE string)
|
|
896
1146
|
|
897
1147
|
|
898
1148
|
|
899
|
-
/*
|
900
|
-
|
1149
|
+
/*
|
1150
|
+
* Gets the system clipboard's contents as a string. The window this is called
|
1151
|
+
* from will request the clipboard contents.
|
1152
|
+
*
|
1153
|
+
* call-seq:
|
1154
|
+
* clipboard_string() -> String
|
1155
|
+
*
|
1156
|
+
* Wraps glfwGetClipboardString.
|
1157
|
+
*/
|
901
1158
|
static VALUE rb_window_get_clipboard_string(VALUE self)
|
902
1159
|
{
|
903
1160
|
return rb_str_new2(glfwGetClipboardString(rb_get_window(self)));
|
@@ -905,8 +1162,15 @@ static VALUE rb_window_get_clipboard_string(VALUE self)
|
|
905
1162
|
|
906
1163
|
|
907
1164
|
|
908
|
-
/*
|
909
|
-
|
1165
|
+
/*
|
1166
|
+
* Gets the current time in seconds. The returned time is relative to the time
|
1167
|
+
* since GLFW was initialized unless the time has been set using #timer=.
|
1168
|
+
*
|
1169
|
+
* call-seq:
|
1170
|
+
* time -> Float
|
1171
|
+
*
|
1172
|
+
* Wraps glfwGetTime.
|
1173
|
+
*/
|
910
1174
|
static VALUE rb_glfw_get_time(VALUE self)
|
911
1175
|
{
|
912
1176
|
return rb_float_new(glfwGetTime());
|
@@ -914,8 +1178,17 @@ static VALUE rb_glfw_get_time(VALUE self)
|
|
914
1178
|
|
915
1179
|
|
916
1180
|
|
917
|
-
/*
|
918
|
-
|
1181
|
+
/*
|
1182
|
+
* Sets the current time in seconds. If set, GLFW will continue measuring time
|
1183
|
+
* elapsed from that time forward.
|
1184
|
+
*
|
1185
|
+
* In most cases, you will not need to use this.
|
1186
|
+
*
|
1187
|
+
* call-seq:
|
1188
|
+
* time = Float
|
1189
|
+
*
|
1190
|
+
* Wraps glfwSetTime.
|
1191
|
+
*/
|
919
1192
|
static VALUE rb_glfw_set_time(VALUE self, VALUE time_)
|
920
1193
|
{
|
921
1194
|
glfwSetTime(NUM2DBL(time_));
|
@@ -924,8 +1197,23 @@ static VALUE rb_glfw_set_time(VALUE self, VALUE time_)
|
|
924
1197
|
|
925
1198
|
|
926
1199
|
|
927
|
-
/*
|
928
|
-
|
1200
|
+
/*
|
1201
|
+
* Makes the window's GL context current. You will need to call this before
|
1202
|
+
* calling any OpenGL functions. See also ::unset_context to unset a context.
|
1203
|
+
*
|
1204
|
+
* Wraps glfwMakeContextCurrent(window).
|
1205
|
+
*
|
1206
|
+
* # Good
|
1207
|
+
* window.make_context_current()
|
1208
|
+
* Gl.glClear(Gl::GL_COLOR_BUFFER_BIT)
|
1209
|
+
*
|
1210
|
+
* # Bad
|
1211
|
+
* Gl.glClear(Gl::GL_COLOR_BUFFER_BIT)
|
1212
|
+
* window.make_context_current()
|
1213
|
+
*
|
1214
|
+
* Remember to make a window's context current before calling any OpenGL
|
1215
|
+
* functions. A window's GL context may only be current in one thread at a time.
|
1216
|
+
*/
|
929
1217
|
static VALUE rb_window_make_context_current(VALUE self)
|
930
1218
|
{
|
931
1219
|
glfwMakeContextCurrent(rb_get_window(self));
|
@@ -934,8 +1222,27 @@ static VALUE rb_window_make_context_current(VALUE self)
|
|
934
1222
|
|
935
1223
|
|
936
1224
|
|
937
|
-
/*
|
1225
|
+
/*
|
1226
|
+
* Unsets the current GL context.
|
1227
|
+
*
|
1228
|
+
* Wraps glfwMakeContextCurrent(NULL).
|
1229
|
+
*/
|
1230
|
+
static VALUE rb_window_unset_context(VALUE self)
|
1231
|
+
{
|
1232
|
+
glfwMakeContextCurrent(NULL);
|
1233
|
+
return self;
|
1234
|
+
}
|
1235
|
+
|
938
1236
|
|
1237
|
+
|
1238
|
+
/*
|
1239
|
+
* Gets the window for the current GL context in this thread.
|
1240
|
+
*
|
1241
|
+
* call-seq:
|
1242
|
+
* current_context() -> Glfw::Window
|
1243
|
+
*
|
1244
|
+
* Wraps glfwGetCurrentContext.
|
1245
|
+
*/
|
939
1246
|
static VALUE rb_window_get_current_context(VALUE self)
|
940
1247
|
{
|
941
1248
|
GLFWwindow *window = glfwGetCurrentContext();
|
@@ -948,8 +1255,20 @@ static VALUE rb_window_get_current_context(VALUE self)
|
|
948
1255
|
|
949
1256
|
|
950
1257
|
|
951
|
-
/*
|
952
|
-
|
1258
|
+
/*
|
1259
|
+
* Swaps the front and back buffers for the window. You will typically call this
|
1260
|
+
* at the end of your drawing routines.
|
1261
|
+
*
|
1262
|
+
* Wraps glfwSwapBuffers.
|
1263
|
+
*
|
1264
|
+
* loop {
|
1265
|
+
* Glfw.poll_events()
|
1266
|
+
*
|
1267
|
+
* # ...
|
1268
|
+
*
|
1269
|
+
* window.swap_buffers()
|
1270
|
+
* }
|
1271
|
+
*/
|
953
1272
|
static VALUE rb_window_swap_buffers(VALUE self)
|
954
1273
|
{
|
955
1274
|
glfwSwapBuffers(rb_get_window(self));
|
@@ -958,20 +1277,41 @@ static VALUE rb_window_swap_buffers(VALUE self)
|
|
958
1277
|
|
959
1278
|
|
960
1279
|
|
961
|
-
/*
|
962
|
-
|
963
|
-
|
1280
|
+
/*
|
1281
|
+
* Sets the swap interval for the current context.
|
1282
|
+
* (See Glfw::Window#make_context_current)
|
1283
|
+
*
|
1284
|
+
* call-seq:
|
1285
|
+
* swap_interval=(interval) -> self
|
1286
|
+
* swap_interval = interval -> self
|
1287
|
+
*
|
1288
|
+
* Wraps glfwSwapInterval.
|
1289
|
+
*/
|
1290
|
+
static VALUE rb_glfw_swap_interval(VALUE self, VALUE interval)
|
964
1291
|
{
|
1292
|
+
glfwSwapInterval(NUM2INT(interval));
|
965
1293
|
return self;
|
966
1294
|
}
|
967
1295
|
|
968
1296
|
|
969
1297
|
|
970
|
-
/*
|
971
|
-
|
972
|
-
|
1298
|
+
/*
|
1299
|
+
* Retursn whether a given OpenGL or context creation API extension is supported
|
1300
|
+
* by the current context.
|
1301
|
+
* (See Glfw::Window#make_context_current)
|
1302
|
+
*
|
1303
|
+
* Bear in mind that this function does not cache its results, so calls may be
|
1304
|
+
* expensive. If you find yourself using it, consider caching the results
|
1305
|
+
* yourself.
|
1306
|
+
*
|
1307
|
+
* call-seq:
|
1308
|
+
* extension_supported?(extension) -> true or false
|
1309
|
+
*
|
1310
|
+
* Wraps glfwExtensionSupported.
|
1311
|
+
*/
|
1312
|
+
static VALUE rb_glfw_extension_supported(VALUE self, VALUE extension)
|
973
1313
|
{
|
974
|
-
return
|
1314
|
+
return glfwExtensionSupported(StringValueCStr(extension)) ? Qtrue : Qfalse;
|
975
1315
|
}
|
976
1316
|
|
977
1317
|
|
@@ -985,6 +1325,8 @@ void Init_glfw3(void)
|
|
985
1325
|
s_glfw_videomode_klass = rb_define_class_under(s_glfw_module, "VideoMode", rb_cObject);
|
986
1326
|
|
987
1327
|
/* Glfw::Monitor */
|
1328
|
+
rb_define_singleton_method(s_glfw_monitor_klass, "monitors", rb_glfw_get_monitors, 0);
|
1329
|
+
rb_define_singleton_method(s_glfw_monitor_klass, "primary_monitor", rb_glfw_get_primary_monitor, 0);
|
988
1330
|
rb_define_method(s_glfw_monitor_klass, "name", rb_monitor_name, 0);
|
989
1331
|
rb_define_method(s_glfw_monitor_klass, "position", rb_monitor_position, 0);
|
990
1332
|
rb_define_method(s_glfw_monitor_klass, "physical_size", rb_monitor_physical_size, 0);
|
@@ -1004,6 +1346,7 @@ void Init_glfw3(void)
|
|
1004
1346
|
rb_define_singleton_method(s_glfw_window_klass, "new", rb_window_new, -1);
|
1005
1347
|
rb_define_singleton_method(s_glfw_window_klass, "window_hint", rb_window_window_hint, 2);
|
1006
1348
|
rb_define_singleton_method(s_glfw_window_klass, "default_window_hints", rb_window_default_window_hints, 0);
|
1349
|
+
rb_define_singleton_method(s_glfw_window_klass, "unset_context", rb_window_unset_context, 0);
|
1007
1350
|
// rb_define_method(s_glfw_window_klass, "initialize", rb_window_init, -1);
|
1008
1351
|
rb_define_method(s_glfw_window_klass, "destroy", rb_window_destroy, 0);
|
1009
1352
|
rb_define_method(s_glfw_window_klass, "should_close?", rb_window_should_close, 0);
|
@@ -1014,8 +1357,10 @@ void Init_glfw3(void)
|
|
1014
1357
|
rb_define_method(s_glfw_window_klass, "swap_buffers", rb_window_swap_buffers, 0);
|
1015
1358
|
rb_define_method(s_glfw_window_klass, "title=", rb_window_set_title, 1);
|
1016
1359
|
rb_define_method(s_glfw_window_klass, "position", rb_window_get_position, 0);
|
1360
|
+
rb_define_method(s_glfw_window_klass, "set_position", rb_window_set_position, 2);
|
1017
1361
|
rb_define_method(s_glfw_window_klass, "move", rb_window_set_position, 2);
|
1018
1362
|
rb_define_method(s_glfw_window_klass, "size", rb_window_get_size, 0);
|
1363
|
+
rb_define_method(s_glfw_window_klass, "set_size", rb_window_set_size, 2);
|
1019
1364
|
rb_define_method(s_glfw_window_klass, "resize", rb_window_set_size, 2);
|
1020
1365
|
rb_define_method(s_glfw_window_klass, "framebuffer_size", rb_window_get_framebuffer_size, 0);
|
1021
1366
|
rb_define_method(s_glfw_window_klass, "iconify", rb_window_iconify, 0);
|
@@ -1052,11 +1397,9 @@ void Init_glfw3(void)
|
|
1052
1397
|
rb_define_singleton_method(s_glfw_module, "version", rb_glfw_version, 0);
|
1053
1398
|
rb_define_singleton_method(s_glfw_module, "terminate", rb_glfw_terminate, 0);
|
1054
1399
|
rb_define_singleton_method(s_glfw_module, "init", rb_glfw_init, 0);
|
1055
|
-
rb_define_singleton_method(s_glfw_module, "monitors", rb_glfw_get_monitors, 0);
|
1056
|
-
rb_define_singleton_method(s_glfw_module, "primary_monitor", rb_glfw_get_primary_monitor, 0);
|
1057
1400
|
rb_define_singleton_method(s_glfw_module, "poll_events", rb_glfw_poll_events, 0);
|
1058
1401
|
rb_define_singleton_method(s_glfw_module, "wait_events", rb_glfw_wait_events, 0);
|
1059
|
-
rb_define_singleton_method(s_glfw_module, "
|
1402
|
+
rb_define_singleton_method(s_glfw_module, "joystick_present?", rb_glfw_joystick_present, 1);
|
1060
1403
|
rb_define_singleton_method(s_glfw_module, "joystick_axes", rb_glfw_get_joystick_axes, 1);
|
1061
1404
|
rb_define_singleton_method(s_glfw_module, "joystick_buttons", rb_glfw_get_joystick_buttons, 1);
|
1062
1405
|
rb_define_singleton_method(s_glfw_module, "joystick_name", rb_glfw_get_joystick_name, 1);
|