glfw3 0.2.1 → 0.3.1
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/README.md +7 -3
- data/ext/glfw3/glfw3.c +139 -21
- data/lib/glfw3.rb +1 -0
- data/lib/glfw3/monitor.rb +8 -0
- data/lib/glfw3/window.rb +27 -2
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8321b1d791bc79297ffc7ce8c4087290f2de35de
|
4
|
+
data.tar.gz: e70fed392fc347121443d92da642dde29714e521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3af48ed74e81c3e577d2df3c719557b669825b8459c79acd36db0e8cd363ac3434693018f9d0db76cccff2cb2db92668d6dcc528e8a8a471b04b26380a23437
|
7
|
+
data.tar.gz: 70952724a68e2e1142d5fc89b41f8b54995365c5f5a0559a80027dfeee27158daa6db13c24829b2b5a7c2cdd7ac641b2568531282644867fe25d4342df8f6919
|
data/README.md
CHANGED
@@ -9,11 +9,15 @@ find it. You may also want to grab some [OpenGL bindings] as well.
|
|
9
9
|
[OpenGL bindings]: https://github.com/nilium/ruby-opengl
|
10
10
|
[GLFW 3]: https://github.com/glfw/glfw
|
11
11
|
|
12
|
-
Once that's taken care of, you can install it simply by
|
13
|
-
|
12
|
+
Once that's taken care of, you can install it simply by installing the gem via RubyGems.org using
|
13
|
+
|
14
|
+
$ gem install glfw3
|
15
|
+
|
16
|
+
Or by building and installing the gem, making note of the version so you know
|
17
|
+
the gem package to install, like so:
|
14
18
|
|
15
19
|
$ gem build glfw3.gemspec
|
16
|
-
$ gem install glfw3-
|
20
|
+
$ gem install glfw3-VERSION-HERE.gemspec
|
17
21
|
|
18
22
|
After that, write a quick script to toy with it. For example:
|
19
23
|
|
data/ext/glfw3/glfw3.c
CHANGED
@@ -134,11 +134,15 @@ VALUE rb_glfw_get_monitors(VALUE self)
|
|
134
134
|
long monitor_index = 0;
|
135
135
|
int num_monitors = 0;
|
136
136
|
GLFWmonitor **monitors = glfwGetMonitors(&num_monitors);
|
137
|
-
VALUE monitors_out =
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
137
|
+
VALUE monitors_out = Qnil;
|
138
|
+
|
139
|
+
if (monitors) {
|
140
|
+
monitors_out = rb_ary_new();
|
141
|
+
for (; num_monitors; --num_monitors, ++monitor_index) {
|
142
|
+
VALUE monitor = Data_Wrap_Struct(s_glfw_monitor_klass, 0, 0, monitors[monitor_index]);
|
143
|
+
rb_obj_call_init(monitor, 0, 0);
|
144
|
+
rb_ary_push(monitors_out, monitor);
|
145
|
+
}
|
142
146
|
}
|
143
147
|
return monitors_out;
|
144
148
|
}
|
@@ -155,9 +159,13 @@ VALUE rb_glfw_get_monitors(VALUE self)
|
|
155
159
|
*/
|
156
160
|
VALUE rb_glfw_get_primary_monitor(VALUE self)
|
157
161
|
{
|
158
|
-
|
159
|
-
|
160
|
-
|
162
|
+
GLFWmonitor *monitor = glfwGetPrimaryMonitor();
|
163
|
+
VALUE rb_monitor = Qnil;
|
164
|
+
if (monitor != NULL) {
|
165
|
+
rb_monitor = Data_Wrap_Struct(s_glfw_monitor_klass, 0, 0, monitor);
|
166
|
+
rb_obj_call_init(rb_monitor, 0, 0);
|
167
|
+
}
|
168
|
+
return rb_monitor;
|
161
169
|
}
|
162
170
|
|
163
171
|
|
@@ -213,8 +221,10 @@ VALUE rb_monitor_physical_size(VALUE self)
|
|
213
221
|
VALUE rb_monitor_name(VALUE self)
|
214
222
|
{
|
215
223
|
GLFWmonitor *monitor;
|
224
|
+
const char *monitor_name = NULL;
|
216
225
|
Data_Get_Struct(self, GLFWmonitor, monitor);
|
217
|
-
|
226
|
+
monitor_name = glfwGetMonitorName(monitor);
|
227
|
+
return monitor_name ? rb_str_new2(monitor_name) : Qnil;
|
218
228
|
}
|
219
229
|
|
220
230
|
|
@@ -391,8 +401,114 @@ static VALUE rb_monitor_set_gamma(VALUE self, VALUE gamma)
|
|
391
401
|
|
392
402
|
|
393
403
|
|
394
|
-
|
395
|
-
|
404
|
+
/*
|
405
|
+
* Gets the monitor's gamma ramp and returns it as a hash of its red, green, and
|
406
|
+
* blue gamma ramps. By default, this might be equal to
|
407
|
+
* `{ :red => [], :green => [], :blue => []}`. Ramp values are in the range of
|
408
|
+
* 0 through 65535, or the 0 through USHRT_MAX (in C).
|
409
|
+
*
|
410
|
+
* call-seq:
|
411
|
+
* get_gamma_ramp -> { :red => [...], :green => [...], :blue => [...] } or nil
|
412
|
+
* gamma_ramp = -> hash or nil
|
413
|
+
*
|
414
|
+
* Wraps glfwGetGammaRamp.
|
415
|
+
*/
|
416
|
+
static VALUE rb_monitor_get_gamma_ramp(VALUE self)
|
417
|
+
{
|
418
|
+
GLFWmonitor *monitor;
|
419
|
+
const GLFWgammaramp *ramp;
|
420
|
+
VALUE rb_gamma_hash, rb_red, rb_green, rb_blue;
|
421
|
+
unsigned int ramp_index;
|
422
|
+
unsigned int ramp_len = ramp->size;
|
423
|
+
|
424
|
+
Data_Get_Struct(self, GLFWmonitor, monitor);
|
425
|
+
ramp = glfwGetGammaRamp(monitor);
|
426
|
+
|
427
|
+
rb_gamma_hash = rb_hash_new();
|
428
|
+
rb_red = rb_ary_new();
|
429
|
+
rb_green = rb_ary_new();
|
430
|
+
rb_blue = rb_ary_new();
|
431
|
+
|
432
|
+
for (ramp_index = 0; ramp_index < ramp_len; ++ramp_index) {
|
433
|
+
rb_ary_push(rb_red, INT2NUM(ramp->red[ramp_index]));
|
434
|
+
rb_ary_push(rb_green, INT2NUM(ramp->green[ramp_index]));
|
435
|
+
rb_ary_push(rb_blue, INT2NUM(ramp->blue[ramp_index]));
|
436
|
+
}
|
437
|
+
|
438
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(rb_intern("red")), rb_red);
|
439
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(rb_intern("green")), rb_green);
|
440
|
+
rb_hash_aset(rb_gamma_hash, ID2SYM(rb_intern("blue")), rb_blue);
|
441
|
+
|
442
|
+
return rb_gamma_hash;
|
443
|
+
}
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
/*
|
448
|
+
* Sets the monitor's gamma ramp with the ramps provided in the ramp hash. The
|
449
|
+
* ramp hash must have arrays for :red, :green, and :blue keys. The arrays
|
450
|
+
* should be the same length, otherwise the shortest array length will be used.
|
451
|
+
*
|
452
|
+
* Gamma ramps should be in the range of an usngiend short, so 0 through 65535
|
453
|
+
* or USHRT_MAX.
|
454
|
+
*
|
455
|
+
* For example, to set a linear gamma ramp that is half as intense as what is
|
456
|
+
* likely your default:
|
457
|
+
*
|
458
|
+
* ramp = (0 ... 32768).step(128).to_a
|
459
|
+
* monitor.set_gamma_ramp({ :red => ramp, :green => ramp, :blue => ramp })
|
460
|
+
*
|
461
|
+
* call-seq:
|
462
|
+
* set_gamma_ramp(ramp) -> self
|
463
|
+
* gamma_ramp = ramp -> self
|
464
|
+
*
|
465
|
+
* Wraps glfwSetGammaRamp.
|
466
|
+
*
|
467
|
+
*/
|
468
|
+
static VALUE rb_monitor_set_gamma_ramp(VALUE self, VALUE ramp_hash)
|
469
|
+
{
|
470
|
+
GLFWmonitor *monitor;
|
471
|
+
GLFWgammaramp ramp;
|
472
|
+
VALUE rb_red, rb_green, rb_blue;
|
473
|
+
unsigned int ramp_index;
|
474
|
+
unsigned int ramp_len = 0;
|
475
|
+
|
476
|
+
Data_Get_Struct(self, GLFWmonitor, monitor);
|
477
|
+
|
478
|
+
rb_red = rb_hash_aref(ramp_hash, ID2SYM(rb_intern("red")));
|
479
|
+
rb_green = rb_hash_aref(ramp_hash, ID2SYM(rb_intern("green")));
|
480
|
+
rb_blue = rb_hash_aref(ramp_hash, ID2SYM(rb_intern("blue")));
|
481
|
+
|
482
|
+
if (!(RTEST(rb_red) && RTEST(rb_green) && RTEST(rb_blue))) {
|
483
|
+
rb_raise(rb_eArgError, "Ramp Hash must contain :red, :green, and :blue arrays");
|
484
|
+
}
|
485
|
+
|
486
|
+
ramp_len = RARRAY_LEN(rb_red);
|
487
|
+
if ((ramp_index = (unsigned int)RARRAY_LEN(rb_green)) < ramp_len) {
|
488
|
+
ramp_len = ramp_index;
|
489
|
+
} else if ((ramp_index = (unsigned int)RARRAY_LEN(rb_blue)) < ramp_len) {
|
490
|
+
ramp_len = ramp_index;
|
491
|
+
}
|
492
|
+
|
493
|
+
unsigned short *ramp_buffer = ALLOC_N(unsigned short, 3 * ramp_len);
|
494
|
+
ramp.red = ramp_buffer;
|
495
|
+
ramp.green = &ramp_buffer[ramp_len];
|
496
|
+
ramp.blue = &ramp_buffer[ramp_len * 2];
|
497
|
+
|
498
|
+
for (ramp_index = 0; ramp_index < ramp_len; ++ramp_index) {
|
499
|
+
ramp.red[ramp_index] = rb_num2ushort(rb_ary_entry(rb_red, ramp_index));
|
500
|
+
ramp.green[ramp_index] = rb_num2ushort(rb_ary_entry(rb_green, ramp_index));
|
501
|
+
ramp.blue[ramp_index] = rb_num2ushort(rb_ary_entry(rb_blue, ramp_index));
|
502
|
+
}
|
503
|
+
|
504
|
+
ramp.size = ramp_len;
|
505
|
+
|
506
|
+
glfwSetGammaRamp(monitor, &ramp);
|
507
|
+
|
508
|
+
free(ramp_buffer);
|
509
|
+
|
510
|
+
return self;
|
511
|
+
}
|
396
512
|
|
397
513
|
|
398
514
|
|
@@ -758,8 +874,12 @@ static VALUE rb_window_hide(VALUE self)
|
|
758
874
|
static VALUE rb_window_get_monitor(VALUE self)
|
759
875
|
{
|
760
876
|
GLFWmonitor *monitor = glfwGetWindowMonitor(rb_get_window(self));
|
761
|
-
VALUE rb_monitor =
|
762
|
-
|
877
|
+
VALUE rb_monitor = Qnil;
|
878
|
+
if (monitor != NULL) {
|
879
|
+
// windowed mode
|
880
|
+
Data_Wrap_Struct(s_glfw_monitor_klass, 0, 0, monitor);
|
881
|
+
rb_obj_call_init(rb_monitor, 0, 0);
|
882
|
+
}
|
763
883
|
return rb_monitor;
|
764
884
|
}
|
765
885
|
|
@@ -1339,6 +1459,8 @@ void Init_glfw3(void)
|
|
1339
1459
|
rb_define_method(s_glfw_monitor_klass, "video_modes", rb_monitor_video_modes, 0);
|
1340
1460
|
rb_define_method(s_glfw_monitor_klass, "video_mode", rb_monitor_video_mode, 0);
|
1341
1461
|
rb_define_method(s_glfw_monitor_klass, "set_gamma", rb_monitor_set_gamma, 1);
|
1462
|
+
rb_define_method(s_glfw_monitor_klass, "set_gamma_ramp", rb_monitor_set_gamma_ramp, 1);
|
1463
|
+
rb_define_method(s_glfw_monitor_klass, "get_gamma_ramp", rb_monitor_get_gamma_ramp, 0);
|
1342
1464
|
|
1343
1465
|
/* Glfw::VideoMode */
|
1344
1466
|
rb_define_method(s_glfw_videomode_klass, "width", rb_videomode_width, 0);
|
@@ -1353,21 +1475,17 @@ void Init_glfw3(void)
|
|
1353
1475
|
rb_define_singleton_method(s_glfw_window_klass, "window_hint", rb_window_window_hint, 2);
|
1354
1476
|
rb_define_singleton_method(s_glfw_window_klass, "default_window_hints", rb_window_default_window_hints, 0);
|
1355
1477
|
rb_define_singleton_method(s_glfw_window_klass, "unset_context", rb_window_unset_context, 0);
|
1356
|
-
// rb_define_method(s_glfw_window_klass, "initialize", rb_window_init, -1);
|
1357
1478
|
rb_define_method(s_glfw_window_klass, "destroy", rb_window_destroy, 0);
|
1358
|
-
rb_define_method(s_glfw_window_klass, "
|
1359
|
-
rb_define_method(s_glfw_window_klass, "should_close=", rb_window_set_should_close, 1);
|
1479
|
+
rb_define_method(s_glfw_window_klass, "get_should_close", rb_window_should_close, 0);
|
1360
1480
|
rb_define_method(s_glfw_window_klass, "set_should_close", rb_window_set_should_close, 1);
|
1361
1481
|
rb_define_method(s_glfw_window_klass, "current_context", rb_window_get_current_context, 0);
|
1362
1482
|
rb_define_method(s_glfw_window_klass, "make_context_current", rb_window_make_context_current, 0);
|
1363
1483
|
rb_define_method(s_glfw_window_klass, "swap_buffers", rb_window_swap_buffers, 0);
|
1364
1484
|
rb_define_method(s_glfw_window_klass, "title=", rb_window_set_title, 1);
|
1365
|
-
rb_define_method(s_glfw_window_klass, "
|
1485
|
+
rb_define_method(s_glfw_window_klass, "get_position", rb_window_get_position, 0);
|
1366
1486
|
rb_define_method(s_glfw_window_klass, "set_position", rb_window_set_position, 2);
|
1367
|
-
rb_define_method(s_glfw_window_klass, "
|
1368
|
-
rb_define_method(s_glfw_window_klass, "size", rb_window_get_size, 0);
|
1487
|
+
rb_define_method(s_glfw_window_klass, "get_size", rb_window_get_size, 0);
|
1369
1488
|
rb_define_method(s_glfw_window_klass, "set_size", rb_window_set_size, 2);
|
1370
|
-
rb_define_method(s_glfw_window_klass, "resize", rb_window_set_size, 2);
|
1371
1489
|
rb_define_method(s_glfw_window_klass, "framebuffer_size", rb_window_get_framebuffer_size, 0);
|
1372
1490
|
rb_define_method(s_glfw_window_klass, "iconify", rb_window_iconify, 0);
|
1373
1491
|
rb_define_method(s_glfw_window_klass, "restore", rb_window_restore, 0);
|
@@ -1385,7 +1503,7 @@ void Init_glfw3(void)
|
|
1385
1503
|
rb_define_method(s_glfw_window_klass, "set_input_mode", rb_window_set_input_mode, 2);
|
1386
1504
|
rb_define_method(s_glfw_window_klass, "key", rb_window_get_key, 1);
|
1387
1505
|
rb_define_method(s_glfw_window_klass, "mouse_button", rb_window_get_mouse_button, 1);
|
1388
|
-
rb_define_method(s_glfw_window_klass, "
|
1506
|
+
rb_define_method(s_glfw_window_klass, "get_cursor_pos", rb_window_get_cursor_pos, 0);
|
1389
1507
|
rb_define_method(s_glfw_window_klass, "set_cursor_pos", rb_window_set_cursor_pos, 2);
|
1390
1508
|
rb_define_method(s_glfw_window_klass, "set_key_callback__", rb_window_set_key_callback, 1);
|
1391
1509
|
rb_define_method(s_glfw_window_klass, "set_char_callback__", rb_window_set_char_callback, 1);
|
data/lib/glfw3.rb
CHANGED
data/lib/glfw3/window.rb
CHANGED
@@ -33,14 +33,39 @@ class Glfw::Window
|
|
33
33
|
#
|
34
34
|
attr_accessor :user_data
|
35
35
|
|
36
|
+
|
37
|
+
|
38
|
+
alias_method :should_close?, :get_should_close
|
39
|
+
alias_method :should_close=, :set_should_close
|
40
|
+
|
41
|
+
alias_method :cursor_pos, :get_cursor_pos
|
42
|
+
|
43
|
+
def cursor_pos=(xy)
|
44
|
+
set_cursor_pos(*xy)
|
45
|
+
end
|
46
|
+
|
47
|
+
alias_method :move, :set_position
|
48
|
+
alias_method :resize, :set_size
|
49
|
+
|
50
|
+
alias_method :position, :get_position
|
51
|
+
alias_method :size, :get_size
|
52
|
+
|
53
|
+
def position=(xy)
|
54
|
+
set_position(*xy)
|
55
|
+
end
|
56
|
+
|
57
|
+
def size=(wh)
|
58
|
+
set_size(*wh)
|
59
|
+
end
|
60
|
+
|
36
61
|
#
|
37
62
|
# Returns an array of all allocated GLFW windows.
|
38
63
|
#
|
39
64
|
# call-seq:
|
40
65
|
# windows -> [Glfw::Window, ...]
|
41
66
|
#
|
42
|
-
def windows
|
43
|
-
|
67
|
+
def self.windows
|
68
|
+
@@__windows.values
|
44
69
|
end
|
45
70
|
|
46
71
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glfw3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noel Raymond Cower
|
@@ -21,6 +21,7 @@ extra_rdoc_files:
|
|
21
21
|
- COPYING
|
22
22
|
files:
|
23
23
|
- lib/glfw3/callbacks.rb
|
24
|
+
- lib/glfw3/monitor.rb
|
24
25
|
- lib/glfw3/window.rb
|
25
26
|
- lib/glfw3.rb
|
26
27
|
- ext/glfw3/glfw3.c
|