ray 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -6
- data/Rakefile +1 -5
- data/ext/audio.c +25 -19
- data/ext/audio_source.c +67 -39
- data/ext/color.c +19 -19
- data/ext/drawable.c +190 -31
- data/ext/extconf.rb +16 -14
- data/ext/gl.c +310 -30
- data/ext/gl_buffer.c +223 -2
- data/ext/gl_index_buffer.c +11 -0
- data/ext/gl_int_array.c +24 -22
- data/ext/gl_vertex.c +84 -49
- data/ext/image.c +115 -51
- data/ext/image_target.c +58 -10
- data/ext/input.c +73 -6
- data/ext/mo.c +583 -0
- data/ext/mo.h +189 -0
- data/ext/music.c +9 -8
- data/ext/pixel_bus.c +349 -0
- data/ext/polygon.c +68 -45
- data/ext/ray.c +1 -0
- data/ext/ray.h +19 -1
- data/ext/rect.c +9 -47
- data/ext/say.h +1 -2
- data/ext/say_all.h +6 -0
- data/ext/say_audio.h +3 -0
- data/ext/say_audio_context.c +1 -4
- data/ext/say_basic_type.c +24 -0
- data/ext/say_basic_type.h +4 -0
- data/ext/say_buffer.c +217 -88
- data/ext/say_buffer.h +20 -5
- data/ext/say_buffer_renderer.c +10 -7
- data/ext/say_buffer_renderer.h +1 -1
- data/ext/say_buffer_slice.c +70 -76
- data/ext/say_context.c +109 -22
- data/ext/say_context.h +14 -0
- data/ext/say_drawable.c +113 -25
- data/ext/say_drawable.h +23 -2
- data/ext/say_error.c +7 -2
- data/ext/say_font.c +30 -27
- data/ext/say_font.h +3 -6
- data/ext/say_get_proc.c +35 -0
- data/ext/say_image.c +102 -27
- data/ext/say_image.h +11 -4
- data/ext/say_image_target.c +88 -34
- data/ext/say_image_target.h +3 -2
- data/ext/say_index_buffer.c +31 -19
- data/ext/say_index_buffer.h +4 -2
- data/ext/say_index_buffer_slice.c +78 -70
- data/ext/say_music.c +4 -2
- data/ext/say_osx.h +3 -2
- data/ext/say_osx_context.h +37 -4
- data/ext/say_osx_window.h +32 -37
- data/ext/say_pixel_bus.c +163 -0
- data/ext/say_pixel_bus.h +44 -0
- data/ext/say_polygon.c +2 -2
- data/ext/say_shader.c +66 -62
- data/ext/say_shader.h +2 -0
- data/ext/say_sprite.c +1 -2
- data/ext/say_target.c +14 -23
- data/ext/say_target.h +3 -1
- data/ext/say_text.c +45 -7
- data/ext/say_text.h +12 -3
- data/ext/say_thread.c +13 -6
- data/ext/say_thread.h +1 -1
- data/ext/say_thread_variable.c +5 -5
- data/ext/say_vertex_type.c +79 -41
- data/ext/say_vertex_type.h +6 -2
- data/ext/say_view.c +10 -31
- data/ext/say_view.h +1 -5
- data/ext/say_win.h +2 -2
- data/ext/say_win_context.h +49 -11
- data/ext/say_win_window.h +30 -27
- data/ext/say_window.c +3 -3
- data/ext/say_x11.h +3 -1
- data/ext/say_x11_context.h +64 -10
- data/ext/say_x11_window.h +22 -17
- data/ext/shader.c +9 -0
- data/ext/sprite.c +7 -1
- data/ext/target.c +80 -28
- data/ext/text.c +43 -1
- data/ext/view.c +53 -1
- data/ext/window.c +4 -0
- data/lib/ray/animation_list.rb +17 -2
- data/lib/ray/audio_source.rb +11 -0
- data/lib/ray/color.rb +14 -0
- data/lib/ray/drawable.rb +23 -0
- data/lib/ray/dsl/event.rb +1 -9
- data/lib/ray/dsl/event_runner.rb +3 -4
- data/lib/ray/dsl/matcher.rb +20 -1
- data/lib/ray/effect.rb +116 -0
- data/lib/ray/effect/black_and_white.rb +38 -0
- data/lib/ray/effect/color_inversion.rb +16 -0
- data/lib/ray/effect/generator.rb +145 -0
- data/lib/ray/effect/grayscale.rb +32 -0
- data/lib/ray/game.rb +25 -5
- data/lib/ray/gl/vertex.rb +105 -26
- data/lib/ray/helper.rb +5 -0
- data/lib/ray/image.rb +54 -13
- data/lib/ray/image_target.rb +7 -0
- data/lib/ray/matrix.rb +26 -0
- data/lib/ray/music.rb +4 -0
- data/lib/ray/pixel_bus.rb +22 -0
- data/lib/ray/polygon.rb +17 -0
- data/lib/ray/pp.rb +28 -0
- data/lib/ray/ray.rb +7 -1
- data/lib/ray/rect.rb +7 -13
- data/lib/ray/scene.rb +24 -5
- data/lib/ray/scene_list.rb +9 -0
- data/lib/ray/shader.rb +11 -2
- data/lib/ray/sound.rb +4 -0
- data/lib/ray/sprite.rb +23 -62
- data/lib/ray/target.rb +25 -0
- data/lib/ray/text.rb +10 -0
- data/lib/ray/turtle.rb +9 -3
- data/lib/ray/vector.rb +18 -0
- data/lib/ray/vertex.rb +6 -0
- data/lib/ray/view.rb +22 -0
- data/samples/animation/sprite_motion.rb +0 -60
- data/samples/audio/{spacial.rb → spatial.rb} +1 -1
- data/samples/buffer/buffer.rb +1 -0
- data/samples/buffer/index_buffer.rb +2 -0
- data/samples/cptn_ruby/cptn_ruby.rb +6 -7
- data/samples/effects/effect.rb +39 -0
- data/samples/effects/grayscale.rb +27 -0
- data/samples/opengl/image.rb +7 -5
- data/samples/opengl/instancing.rb +159 -0
- data/samples/opengl/instancing.rbc +3231 -0
- data/samples/opengl/obj_loader.rb +9 -8
- data/samples/opengl/shader.rb +1 -3
- data/samples/shaders/geometry.rb +108 -38
- data/samples/shaders/geometry.rbc +2074 -0
- data/samples/shaders/shape.rb +2 -2
- data/samples/starfighter/starfighter.rb +5 -5
- data/samples/window/get_pixel.rb +1 -1
- data/test/animation_list_test.rb +18 -4
- data/test/drawable_test.rb +70 -1
- data/test/effect_generator_test.rb +63 -0
- data/test/effect_test.rb +61 -0
- data/test/game_test.rb +18 -0
- data/test/gl_buffer_test.rb +43 -1
- data/test/gl_index_buffer_test.rb +5 -0
- data/test/gl_vertex_test.rb +28 -1
- data/test/image_test.rb +5 -5
- data/test/input_test.rb +49 -0
- data/test/pixel_bus_test.rb +28 -0
- data/test/rect_test.rb +4 -0
- data/{samples/_media → test/res}/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png b/data/test/res/CptnRuby → Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt b/data/test/res/CptnRuby → Map.txt +0 -0
- data/samples/_media/CptnRuby Tileset.png b/data/test/res/CptnRuby → Tileset.png +0 -0
- data/{samples/_media → test/res}/CptnRuby.png +0 -0
- data/{samples/_media → test/res}/Space.png +0 -0
- data/{samples/_media → test/res}/Star.png +0 -0
- data/{samples/_media → test/res}/Starfighter.png +0 -0
- data/test/res/cube.obj +28 -0
- data/test/res/light3d.c +2 -2
- data/test/res/stone.png +0 -0
- data/test/scene_test.rb +3 -0
- data/test/sprite_test.rb +10 -0
- data/test/text_test.rb +31 -2
- data/test/view_test.rb +13 -1
- metadata +38 -17
- data/ext/say_array.c +0 -124
- data/ext/say_array.h +0 -34
- data/ext/say_table.c +0 -86
- data/ext/say_table.h +0 -24
data/ext/say_x11.h
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
|
10
10
|
#include <GL/glx.h>
|
11
11
|
|
12
|
+
#include "mo.h"
|
13
|
+
|
12
14
|
typedef struct say_x11_window {
|
13
15
|
Display *dis;
|
14
16
|
Window win;
|
@@ -17,7 +19,7 @@ typedef struct say_x11_window {
|
|
17
19
|
XVisualInfo *vi;
|
18
20
|
GLXFBConfig config;
|
19
21
|
|
20
|
-
|
22
|
+
mo_array events;
|
21
23
|
|
22
24
|
XIM im;
|
23
25
|
XIC ic;
|
data/ext/say_x11_context.h
CHANGED
@@ -1,22 +1,78 @@
|
|
1
1
|
#include "say.h"
|
2
2
|
|
3
|
+
#ifdef HAVE_GL_GLXEXT_H
|
4
|
+
# include <GL/glxext.h>
|
5
|
+
#else
|
6
|
+
# define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
7
|
+
# define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
|
8
|
+
# define GLX_CONTEXT_FLAGS_ARB 0x2094
|
9
|
+
# define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
|
10
|
+
|
11
|
+
# define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
|
12
|
+
# define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
|
13
|
+
|
14
|
+
# define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
|
15
|
+
#endif
|
16
|
+
|
17
|
+
typedef GLXContext (*say_glx_create_context)(Display *dpy,
|
18
|
+
GLXFBConfig config,
|
19
|
+
GLXContext share_context,
|
20
|
+
Bool direct,
|
21
|
+
const int *attrib_list);
|
22
|
+
|
23
|
+
static say_glx_create_context glXCreateContextAttribs = NULL;
|
24
|
+
|
3
25
|
say_imp_context say_imp_context_create() {
|
4
|
-
return
|
26
|
+
return say_imp_context_create_shared(NULL);
|
27
|
+
}
|
28
|
+
|
29
|
+
static GLXContext say_x11_do_create_context(Display *dis,
|
30
|
+
GLXFBConfig conf,
|
31
|
+
GLXContext share) {
|
32
|
+
glXCreateContextAttribs = (say_glx_create_context)
|
33
|
+
glXGetProcAddress((GLubyte*)"glXCreateContextAttribsARB");
|
34
|
+
|
35
|
+
say_context_config *say_conf = say_context_get_config();
|
36
|
+
size_t major = say_conf->major_version, minor = say_conf->minor_version;
|
37
|
+
|
38
|
+
if (glXCreateContextAttribs) {
|
39
|
+
GLint attribs[] = {
|
40
|
+
GLX_CONTEXT_MAJOR_VERSION_ARB, major,
|
41
|
+
GLX_CONTEXT_MINOR_VERSION_ARB, minor,
|
42
|
+
GLX_CONTEXT_FLAGS_ARB, say_conf->debug ? GLX_CONTEXT_DEBUG_BIT_ARB : 0,
|
43
|
+
GLX_CONTEXT_PROFILE_MASK_ARB, say_conf->core_profile ?
|
44
|
+
GLX_CONTEXT_CORE_PROFILE_BIT_ARB :
|
45
|
+
GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
46
|
+
None
|
47
|
+
};
|
48
|
+
|
49
|
+
GLXContext ctxt = glXCreateContextAttribs(dis, conf, share, true,
|
50
|
+
attribs);
|
51
|
+
|
52
|
+
if (ctxt)
|
53
|
+
return ctxt;
|
54
|
+
}
|
55
|
+
|
56
|
+
return glXCreateNewContext(dis, conf, GLX_RGBA_TYPE, share, True);
|
5
57
|
}
|
6
58
|
|
7
59
|
say_imp_context say_imp_context_create_shared(say_imp_context shared) {
|
8
60
|
say_x11_context *context = malloc(sizeof(say_x11_context));
|
9
61
|
|
62
|
+
context->should_free_window = true;
|
63
|
+
|
10
64
|
context->dis = XOpenDisplay(NULL);
|
11
65
|
|
12
66
|
int screen = DefaultScreen(context->dis);
|
13
67
|
|
14
|
-
|
68
|
+
say_context_config *say_conf = say_context_get_config();
|
69
|
+
int visual_attribs[] = {
|
15
70
|
GLX_RED_SIZE, 8,
|
16
71
|
GLX_GREEN_SIZE, 8,
|
17
72
|
GLX_BLUE_SIZE, 8,
|
18
73
|
GLX_ALPHA_SIZE, 8,
|
19
|
-
GLX_DEPTH_SIZE,
|
74
|
+
GLX_DEPTH_SIZE, say_conf->depth_size,
|
75
|
+
GLX_STENCIL_SIZE, say_conf->stencil_size,
|
20
76
|
GLX_DOUBLEBUFFER, True,
|
21
77
|
None
|
22
78
|
};
|
@@ -44,12 +100,11 @@ say_imp_context say_imp_context_create_shared(say_imp_context shared) {
|
|
44
100
|
InputOutput,
|
45
101
|
vi->visual,
|
46
102
|
CWBorderPixel|CWColormap, &swa);
|
47
|
-
|
48
103
|
XFree(vi);
|
49
104
|
|
50
105
|
GLXContext glx_shared = shared ? shared->context : NULL;
|
51
|
-
context->context =
|
52
|
-
|
106
|
+
context->context = say_x11_do_create_context(context->dis, config,
|
107
|
+
glx_shared);
|
53
108
|
|
54
109
|
return context;
|
55
110
|
}
|
@@ -63,8 +118,8 @@ say_imp_context say_imp_context_create_for_window(say_imp_context shared,
|
|
63
118
|
|
64
119
|
context->should_free_window = 0;
|
65
120
|
|
66
|
-
context->context =
|
67
|
-
|
121
|
+
context->context = say_x11_do_create_context(window->dis, window->config,
|
122
|
+
shared->context);
|
68
123
|
|
69
124
|
return context;
|
70
125
|
}
|
@@ -90,7 +145,6 @@ void say_imp_context_make_current(say_imp_context context) {
|
|
90
145
|
}
|
91
146
|
|
92
147
|
void say_imp_context_update(say_imp_context context) {
|
93
|
-
|
94
|
-
glXSwapBuffers(context->dis, context->win);
|
148
|
+
glXSwapBuffers(context->dis, context->win);
|
95
149
|
}
|
96
150
|
|
data/ext/say_x11_window.h
CHANGED
@@ -129,13 +129,13 @@ say_imp_window say_imp_window_create() {
|
|
129
129
|
win->hidden_cursor = None;
|
130
130
|
win->old_video_mode = -1;
|
131
131
|
|
132
|
-
win->events
|
132
|
+
mo_array_init(&win->events, sizeof(say_event));
|
133
133
|
|
134
134
|
return win;
|
135
135
|
}
|
136
136
|
|
137
137
|
void say_imp_window_free(say_imp_window win) {
|
138
|
-
|
138
|
+
mo_array_release(&win->events);
|
139
139
|
free(win);
|
140
140
|
}
|
141
141
|
|
@@ -298,7 +298,7 @@ bool say_imp_window_open(say_imp_window win, const char *title,
|
|
298
298
|
}
|
299
299
|
|
300
300
|
void say_imp_window_close(say_imp_window win) {
|
301
|
-
|
301
|
+
mo_array_resize(&win->events, 0);
|
302
302
|
|
303
303
|
#ifdef HAVE_XRANDR
|
304
304
|
if (win->dis && win->old_video_mode >= 0) {
|
@@ -375,10 +375,13 @@ bool say_imp_window_set_icon(say_imp_window win, struct say_image *icon) {
|
|
375
375
|
|
376
376
|
/* Convert image to BGRA */
|
377
377
|
|
378
|
-
say_color *orig_buf = say_image_get_buffer(icon)
|
379
|
-
|
378
|
+
say_color *orig_buf = say_flip_color_buffer_copy(say_image_get_buffer(icon),
|
379
|
+
say_image_get_width(icon),
|
380
|
+
say_image_get_height(icon));
|
380
381
|
|
381
|
-
|
382
|
+
long *pixels = malloc(sizeof(long) * (2 + (icon->width * icon->height)));
|
383
|
+
|
384
|
+
if (!(pixels && orig_buf)) {
|
382
385
|
say_error_set("could not allocate icon buffer");
|
383
386
|
return false;
|
384
387
|
}
|
@@ -399,6 +402,8 @@ bool say_imp_window_set_icon(say_imp_window win, struct say_image *icon) {
|
|
399
402
|
buf++;
|
400
403
|
}
|
401
404
|
|
405
|
+
free(orig_buf);
|
406
|
+
|
402
407
|
/* Set _NET_WM_ICON */
|
403
408
|
|
404
409
|
Atom icon_atom = XInternAtom(win->dis, "_NET_WM_ICON", false);
|
@@ -695,7 +700,7 @@ static int say_x11_window_parse_event(say_x11_window *win, say_event *ev,
|
|
695
700
|
ev.type = SAY_EVENT_TEXT_ENTERED;
|
696
701
|
ev.ev.text.text = character;
|
697
702
|
|
698
|
-
|
703
|
+
mo_array_push(&win->events, &ev);
|
699
704
|
}
|
700
705
|
}
|
701
706
|
else
|
@@ -711,14 +716,14 @@ static int say_x11_window_parse_event(say_x11_window *win, say_event *ev,
|
|
711
716
|
ev.type = SAY_EVENT_TEXT_ENTERED;
|
712
717
|
ev.ev.text.text = (uint32_t)key_buffer[0];
|
713
718
|
|
714
|
-
|
719
|
+
mo_array_push(&win->events, &ev);
|
715
720
|
}
|
716
721
|
}
|
717
722
|
}
|
718
723
|
|
719
|
-
if (ev->type == SAY_EVENT_NONE &&
|
720
|
-
*ev =
|
721
|
-
|
724
|
+
if (ev->type == SAY_EVENT_NONE && win->events.size != 0) {
|
725
|
+
*ev = mo_array_get_as(&win->events, 0, say_event);
|
726
|
+
mo_array_delete(&win->events, 0);
|
722
727
|
|
723
728
|
return 1;
|
724
729
|
}
|
@@ -775,9 +780,9 @@ static int say_x11_window_parse_event(say_x11_window *win, say_event *ev,
|
|
775
780
|
|
776
781
|
bool say_imp_window_poll_event(say_imp_window win, struct say_event *ev,
|
777
782
|
struct say_input *input) {
|
778
|
-
if (
|
779
|
-
*ev =
|
780
|
-
|
783
|
+
if (win->events.size != 0) {
|
784
|
+
*ev = mo_array_get_as(&win->events, 0, say_event);
|
785
|
+
mo_array_delete(&win->events, 0);
|
781
786
|
|
782
787
|
return 1;
|
783
788
|
}
|
@@ -798,9 +803,9 @@ bool say_imp_window_poll_event(say_imp_window win, struct say_event *ev,
|
|
798
803
|
|
799
804
|
void say_imp_window_wait_event(say_imp_window win, struct say_event *ev,
|
800
805
|
struct say_input *input) {
|
801
|
-
if (
|
802
|
-
*ev =
|
803
|
-
|
806
|
+
if (win->events.size != 0) {
|
807
|
+
*ev = mo_array_get_as(&win->events, 0, say_event);
|
808
|
+
mo_array_delete(&win->events, 0);
|
804
809
|
|
805
810
|
return;
|
806
811
|
}
|
data/ext/shader.c
CHANGED
@@ -158,6 +158,14 @@ VALUE ray_shader_bind(VALUE self) {
|
|
158
158
|
return Qnil;
|
159
159
|
}
|
160
160
|
|
161
|
+
/*
|
162
|
+
* @return [Integer] The OpenGL program id
|
163
|
+
*/
|
164
|
+
static
|
165
|
+
VALUE ray_shader_program(VALUE self) {
|
166
|
+
return NUM2ULONG(say_shader_get_program(ray_rb2shader(self)));
|
167
|
+
}
|
168
|
+
|
161
169
|
static
|
162
170
|
VALUE ray_shader_set_vector2(VALUE self, VALUE loc, VALUE val) {
|
163
171
|
rb_check_frozen(self);
|
@@ -299,4 +307,5 @@ void Init_ray_shader() {
|
|
299
307
|
rb_define_method(ray_cShader, "set_bool", ray_shader_set_bool, 2);
|
300
308
|
|
301
309
|
rb_define_method(ray_cShader, "bind", ray_shader_bind, 0);
|
310
|
+
rb_define_method(ray_cShader, "program", ray_shader_program, 0);
|
302
311
|
}
|
data/ext/sprite.c
CHANGED
@@ -16,11 +16,17 @@ say_sprite *ray_rb2sprite(VALUE obj) {
|
|
16
16
|
|
17
17
|
VALUE ray_sprite_alloc(VALUE self) {
|
18
18
|
say_sprite *sprite = say_sprite_create();
|
19
|
-
|
19
|
+
VALUE rb = Data_Wrap_Struct(self, NULL, say_sprite_free, sprite);
|
20
|
+
|
21
|
+
say_drawable_set_shader_proc(sprite->drawable, ray_drawable_shader_proc);
|
22
|
+
say_drawable_set_other_data(sprite->drawable, (void*)rb);
|
23
|
+
|
24
|
+
return rb;
|
20
25
|
}
|
21
26
|
|
22
27
|
VALUE ray_sprite_init_copy(VALUE self, VALUE orig) {
|
23
28
|
rb_iv_set(self, "@image", rb_iv_get(orig, "@image"));
|
29
|
+
ray_drawable_copy_attr(self, orig);
|
24
30
|
say_sprite_copy(ray_rb2sprite(self), ray_rb2sprite(orig));
|
25
31
|
return self;
|
26
32
|
}
|
data/ext/target.c
CHANGED
@@ -18,19 +18,28 @@ say_target *ray_rb2target(VALUE obj) {
|
|
18
18
|
}
|
19
19
|
|
20
20
|
/*
|
21
|
-
|
22
|
-
*/
|
21
|
+
* @return [Ray::Vector2] Size of the target, in pixels.
|
22
|
+
*/
|
23
23
|
static
|
24
24
|
VALUE ray_target_size(VALUE self) {
|
25
25
|
return ray_vector2_to_rb(say_target_get_size(ray_rb2target(self)));
|
26
26
|
}
|
27
27
|
|
28
|
-
/* @
|
28
|
+
/* @see view= */
|
29
29
|
static
|
30
30
|
VALUE ray_target_view(VALUE self) {
|
31
31
|
return ray_view2rb(say_target_get_view(ray_rb2target(self)));
|
32
32
|
}
|
33
33
|
|
34
|
+
/*
|
35
|
+
* @overload view=(view)
|
36
|
+
* Sets the view used by the target
|
37
|
+
*
|
38
|
+
* Notice the view returned by {#view} is a copy of the view used internally.
|
39
|
+
*
|
40
|
+
* @param [Ray::View] view New view
|
41
|
+
* @see Ray::View
|
42
|
+
*/
|
34
43
|
static
|
35
44
|
VALUE ray_target_set_view(VALUE self, VALUE val) {
|
36
45
|
rb_check_frozen(self);
|
@@ -39,28 +48,51 @@ VALUE ray_target_set_view(VALUE self, VALUE val) {
|
|
39
48
|
}
|
40
49
|
|
41
50
|
|
42
|
-
/*
|
51
|
+
/*
|
52
|
+
* Default view of the target
|
53
|
+
*
|
54
|
+
* The default view is made so that no scaling will be performed. It has the
|
55
|
+
* following properties:
|
56
|
+
*
|
57
|
+
* 1. +size+ is the size of the target;
|
58
|
+
* 2. +center+ is the center of the target (half of the target);
|
59
|
+
* 3. +viewport+ is the whole target (that is, +[0, 0, 1, 1]+).
|
60
|
+
*
|
61
|
+
* @return [Ray::View] Default view of the target
|
62
|
+
*/
|
43
63
|
static
|
44
64
|
VALUE ray_target_default_view(VALUE self) {
|
45
65
|
say_view *view = say_target_get_default_view(ray_rb2target(self));
|
46
|
-
return Data_Wrap_Struct(rb_path2class("Ray::View"), NULL, say_view_free,
|
66
|
+
return Data_Wrap_Struct(rb_path2class("Ray::View"), NULL, say_view_free,
|
67
|
+
view);
|
47
68
|
}
|
48
69
|
|
70
|
+
/*
|
71
|
+
* Low-level access to the shader. {#shader} will cache this.
|
72
|
+
* @return [Ray::Shader] The target's shader
|
73
|
+
*/
|
49
74
|
static
|
50
75
|
VALUE ray_target_shader(VALUE self) {
|
51
76
|
return ray_shader2rb(say_target_get_shader(ray_rb2target(self)), self);
|
52
77
|
}
|
53
78
|
|
54
|
-
/*
|
79
|
+
/*
|
80
|
+
* Clipping rectangle when using the current view
|
81
|
+
* @return [Ray::Rect] Part of the target that's used by the view
|
82
|
+
*
|
83
|
+
* @see Ray::View.clip
|
84
|
+
*/
|
55
85
|
static
|
56
86
|
VALUE ray_target_clip(VALUE self) {
|
57
87
|
return ray_rect2rb(say_target_get_clip(ray_rb2target(self)));
|
58
88
|
}
|
59
89
|
|
60
90
|
/*
|
61
|
-
|
62
|
-
|
63
|
-
|
91
|
+
* @overload viewport_for(rect)
|
92
|
+
* Viewport for a view to make it draw on a given rect
|
93
|
+
*
|
94
|
+
* @param [Ray::Rect] rect Rect in pixel
|
95
|
+
* @return [Ray::Rect] Viewport to set in the view
|
64
96
|
*/
|
65
97
|
static
|
66
98
|
VALUE ray_target_viewport_for(VALUE self, VALUE rect) {
|
@@ -69,12 +101,15 @@ VALUE ray_target_viewport_for(VALUE self, VALUE rect) {
|
|
69
101
|
}
|
70
102
|
|
71
103
|
/*
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
104
|
+
* Makes a target become the current one
|
105
|
+
*
|
106
|
+
* This method is only used when using low-level OpenGL access. Calling {#draw}
|
107
|
+
* will cause this method to be called anyway (and custom drawables also allow
|
108
|
+
* OpenGL calls)
|
109
|
+
*
|
110
|
+
* @raise If a context could not be created or made current. This Would often
|
111
|
+
* mean the target was not initialized properly (e.g. window is not open)
|
112
|
+
*/
|
78
113
|
static
|
79
114
|
VALUE ray_target_make_current(VALUE self) {
|
80
115
|
if (!say_target_make_current(ray_rb2target(self)))
|
@@ -83,12 +118,13 @@ VALUE ray_target_make_current(VALUE self) {
|
|
83
118
|
}
|
84
119
|
|
85
120
|
/*
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
121
|
+
* @overload clear(color)
|
122
|
+
* Clears the target in a given color
|
123
|
+
*
|
124
|
+
* This method should usually be called before performing drawing.
|
125
|
+
*
|
126
|
+
* @param [Ray::Color] color Color to clear the target with.
|
127
|
+
*/
|
92
128
|
static
|
93
129
|
VALUE ray_target_clear(VALUE self, VALUE color) {
|
94
130
|
say_target_clear(ray_rb2target(self), ray_rb2col(color));
|
@@ -96,10 +132,10 @@ VALUE ray_target_clear(VALUE self, VALUE color) {
|
|
96
132
|
}
|
97
133
|
|
98
134
|
/*
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
*/
|
135
|
+
* @overload draw(obj)
|
136
|
+
* Draws an object on the target
|
137
|
+
* @param [Ray::Drawable, Ray::BufferRenderer] obj Object to be drawn
|
138
|
+
*/
|
103
139
|
static
|
104
140
|
VALUE ray_target_draw(VALUE self, VALUE obj) {
|
105
141
|
if (RAY_IS_A(obj, rb_path2class("Ray::BufferRenderer"))) {
|
@@ -113,6 +149,11 @@ VALUE ray_target_draw(VALUE self, VALUE obj) {
|
|
113
149
|
|
114
150
|
/*
|
115
151
|
* @overload [](x, y)
|
152
|
+
* Color of the pixel at a given position
|
153
|
+
*
|
154
|
+
* This operation is slow. It is much faster to access a rect or the whole
|
155
|
+
* image than to read each pixel from that rect.
|
156
|
+
*
|
116
157
|
* @param [Integer] x
|
117
158
|
* @param [Integer] y
|
118
159
|
*
|
@@ -127,7 +168,8 @@ VALUE ray_target_get(VALUE self, VALUE x, VALUE y) {
|
|
127
168
|
|
128
169
|
/*
|
129
170
|
* @overload rect(rect)
|
130
|
-
*
|
171
|
+
* Colors of pixels present in a rect
|
172
|
+
* @param [Ray::Rect] rect Rect to read pixels from
|
131
173
|
* @return [Ray::Image] An image containing the pixels of that rect.
|
132
174
|
*/
|
133
175
|
static
|
@@ -146,6 +188,7 @@ VALUE ray_target_rect(VALUE self, VALUE rect) {
|
|
146
188
|
}
|
147
189
|
|
148
190
|
/*
|
191
|
+
* Colors of all the pixels in the target
|
149
192
|
* @return [Ray::Image] An image containing all the pixels of the target
|
150
193
|
*/
|
151
194
|
static
|
@@ -165,20 +208,29 @@ void Init_ray_target() {
|
|
165
208
|
|
166
209
|
rb_define_method(ray_cTarget, "size", ray_target_size, 0);
|
167
210
|
|
211
|
+
/* @group Manipulating views */
|
168
212
|
rb_define_method(ray_cTarget, "view", ray_target_view, 0);
|
169
213
|
rb_define_method(ray_cTarget, "view=", ray_target_set_view, 1);
|
170
214
|
rb_define_method(ray_cTarget, "default_view", ray_target_default_view, 0);
|
171
215
|
|
172
|
-
rb_define_private_method(ray_cTarget, "simple_shader", ray_target_shader, 0);
|
173
|
-
|
174
216
|
rb_define_method(ray_cTarget, "clip", ray_target_clip, 0);
|
175
217
|
rb_define_method(ray_cTarget, "viewport_for", ray_target_viewport_for, 1);
|
218
|
+
/* @endgroup */
|
219
|
+
|
220
|
+
rb_define_private_method(ray_cTarget, "simple_shader", ray_target_shader, 0);
|
176
221
|
|
222
|
+
/* @group Low-level access */
|
177
223
|
rb_define_method(ray_cTarget, "make_current", ray_target_make_current, 0);
|
224
|
+
/* @endgroup */
|
225
|
+
|
226
|
+
/* @group Drawing */
|
178
227
|
rb_define_method(ray_cTarget, "clear", ray_target_clear, 1);
|
179
228
|
rb_define_method(ray_cTarget, "draw", ray_target_draw, 1);
|
229
|
+
/* @endgroup */
|
180
230
|
|
231
|
+
/* @group Pixel-level access */
|
181
232
|
rb_define_method(ray_cTarget, "[]", ray_target_get, 2);
|
182
233
|
rb_define_method(ray_cTarget, "rect", ray_target_rect, 1);
|
183
234
|
rb_define_method(ray_cTarget, "to_image", ray_target_to_image, 0);
|
235
|
+
/* @endgroup */
|
184
236
|
}
|