rays 0.1.6 → 0.1.7
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/.doc/ext/rays/bitmap.cpp +70 -233
- data/.doc/ext/rays/bounds.cpp +339 -57
- data/.doc/ext/rays/color.cpp +58 -48
- data/.doc/ext/rays/color_space.cpp +174 -0
- data/.doc/ext/rays/font.cpp +31 -53
- data/.doc/ext/rays/image.cpp +64 -67
- data/.doc/ext/rays/matrix.cpp +22 -50
- data/.doc/ext/rays/native.cpp +9 -2
- data/.doc/ext/rays/painter.cpp +276 -259
- data/.doc/ext/rays/point.cpp +186 -52
- data/.doc/ext/rays/rays.cpp +25 -20
- data/.doc/ext/rays/shader.cpp +61 -0
- data/.doc/ext/rays/texture.cpp +47 -59
- data/{README → README.md} +0 -0
- data/Rakefile +6 -5
- data/VERSION +1 -1
- data/ext/rays/bitmap.cpp +88 -248
- data/ext/rays/bounds.cpp +437 -141
- data/ext/rays/color.cpp +79 -69
- data/ext/rays/color_space.cpp +185 -0
- data/ext/rays/extconf.rb +14 -63
- data/ext/rays/font.cpp +44 -65
- data/ext/rays/image.cpp +82 -81
- data/ext/rays/matrix.cpp +32 -60
- data/ext/rays/native.cpp +9 -2
- data/ext/rays/painter.cpp +345 -321
- data/ext/rays/point.cpp +212 -69
- data/ext/rays/rays.cpp +29 -23
- data/ext/rays/shader.cpp +63 -0
- data/ext/rays/texture.cpp +64 -74
- data/include/rays/bitmap.h +21 -12
- data/include/rays/bounds.h +67 -9
- data/include/rays/color.h +23 -7
- data/include/rays/{colorspace.h → color_space.h} +6 -3
- data/include/rays/exception.h +17 -11
- data/include/rays/font.h +4 -3
- data/include/rays/image.h +11 -6
- data/include/rays/matrix.h +15 -12
- data/include/rays/opengl.h +54 -1
- data/include/rays/painter.h +98 -108
- data/include/rays/point.h +45 -5
- data/include/rays/rays.h +2 -2
- data/include/rays/ruby/bitmap.h +2 -16
- data/include/rays/ruby/bounds.h +4 -16
- data/include/rays/ruby/color.h +3 -16
- data/include/rays/ruby/color_space.h +27 -0
- data/include/rays/ruby/font.h +2 -16
- data/include/rays/ruby/image.h +2 -16
- data/include/rays/ruby/matrix.h +2 -16
- data/include/rays/ruby/painter.h +2 -16
- data/include/rays/ruby/point.h +3 -16
- data/include/rays/ruby/shader.h +27 -0
- data/include/rays/ruby/texture.h +2 -16
- data/include/rays/ruby.h +1 -0
- data/include/rays/shader.h +48 -0
- data/include/rays/texture.h +13 -2
- data/include/rays.h +2 -1
- data/lib/rays/bitmap.rb +20 -11
- data/lib/rays/bounds.rb +29 -68
- data/lib/rays/color.rb +39 -0
- data/lib/rays/color_space.rb +33 -0
- data/lib/rays/font.rb +29 -0
- data/lib/rays/image.rb +22 -0
- data/lib/rays/module.rb +11 -7
- data/lib/rays/painter.rb +103 -40
- data/lib/rays/point.rb +19 -36
- data/lib/rays/shader.rb +13 -0
- data/lib/rays/texture.rb +9 -0
- data/lib/rays.rb +4 -0
- data/rays.gemspec +3 -4
- data/src/bounds.cpp +272 -63
- data/src/color.cpp +168 -21
- data/src/{colorspace.cpp → color_space.cpp} +38 -1
- data/src/exception.cpp +24 -15
- data/src/frame_buffer.cpp +275 -0
- data/src/frame_buffer.h +79 -0
- data/src/image.cpp +80 -36
- data/src/ios/bitmap.mm +340 -0
- data/src/ios/font.mm +206 -0
- data/src/{cocoa → ios}/helper.h +2 -2
- data/src/{cocoa → ios}/helper.mm +0 -0
- data/src/ios/opengl.mm +21 -0
- data/src/ios/program.cpp +122 -0
- data/src/{cocoa → ios}/rays.mm +8 -7
- data/src/matrix.cpp +10 -22
- data/src/opengl.cpp +64 -0
- data/src/{cocoa → osx}/bitmap.mm +121 -70
- data/src/{cocoa → osx}/font.mm +32 -24
- data/src/osx/helper.h +26 -0
- data/src/osx/helper.mm +25 -0
- data/src/osx/opengl.mm +103 -0
- data/src/osx/rays.mm +43 -0
- data/src/painter.cpp +596 -422
- data/src/point.cpp +154 -11
- data/src/program.cpp +513 -0
- data/src/program.h +73 -0
- data/src/render_buffer.cpp +120 -0
- data/src/render_buffer.h +47 -0
- data/src/shader.cpp +117 -0
- data/src/texture.cpp +104 -134
- data/test/helper.rb +10 -3
- data/test/test_bitmap.rb +18 -0
- data/test/test_bounds.rb +81 -35
- data/test/test_color.rb +29 -2
- data/test/test_image.rb +63 -0
- data/test/test_painter.rb +120 -0
- data/test/test_point.rb +30 -9
- data/test/test_shader.rb +37 -0
- data/test/test_texture.rb +18 -0
- metadata +75 -58
- data/.gitignore +0 -14
- data/ChangeLog +0 -8
data/.doc/ext/rays/painter.cpp
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
#include <rucy.h>
|
5
|
-
#include
|
6
|
-
#include
|
7
|
-
#include
|
8
|
-
#include
|
9
|
-
#include
|
5
|
+
#include "rays/ruby/point.h"
|
6
|
+
#include "rays/ruby/bounds.h"
|
7
|
+
#include "rays/ruby/color.h"
|
8
|
+
#include "rays/ruby/matrix.h"
|
9
|
+
#include "rays/ruby/font.h"
|
10
|
+
#include "rays/ruby/image.h"
|
11
|
+
#include "rays/ruby/shader.h"
|
10
12
|
#include "defs.h"
|
11
13
|
|
12
14
|
|
@@ -17,44 +19,11 @@ using Rays::coord;
|
|
17
19
|
|
18
20
|
static Class cPainter;
|
19
21
|
|
22
|
+
RUCY_DEFINE_VALUE_FROM_TO(Rays::Painter, cPainter)
|
20
23
|
|
21
|
-
|
22
|
-
{
|
23
|
-
|
24
|
+
#define THIS to<Rays::Painter*>(self)
|
24
25
|
|
25
|
-
|
26
|
-
painter_class ()
|
27
|
-
{
|
28
|
-
return cPainter;
|
29
|
-
}
|
30
|
-
|
31
|
-
|
32
|
-
}// Rays
|
33
|
-
|
34
|
-
|
35
|
-
namespace Rucy
|
36
|
-
{
|
37
|
-
|
38
|
-
|
39
|
-
Value
|
40
|
-
value (const Rays::Painter& obj)
|
41
|
-
{
|
42
|
-
return new_type(cPainter, new Rays::Painter(obj));
|
43
|
-
}
|
44
|
-
|
45
|
-
Value
|
46
|
-
value (const Rays::Painter* obj)
|
47
|
-
{
|
48
|
-
return obj ? value(*obj) : nil();
|
49
|
-
}
|
50
|
-
|
51
|
-
|
52
|
-
}// Rucy
|
53
|
-
|
54
|
-
|
55
|
-
#define THIS to<Rays::Painter*>(self)
|
56
|
-
|
57
|
-
#define CHECK RUCY_CHECK_OBJECT(self, Rays::Painter, cPainter)
|
26
|
+
#define CHECK RUCY_CHECK_OBJECT(Rays::Painter, cPainter, self)
|
58
27
|
|
59
28
|
|
60
29
|
static
|
@@ -72,8 +41,7 @@ VALUE canvas(VALUE self, VALUE x, VALUE y, VALUE width, VALUE height)
|
|
72
41
|
coord yy = to<coord>(y);
|
73
42
|
coord ww = to<coord>(width);
|
74
43
|
coord hh = to<coord>(height);
|
75
|
-
|
76
|
-
rays_error("Painter#canvas(%f, %f, %f, %f) failed.", xx, yy, ww, hh);
|
44
|
+
THIS->canvas(xx, yy, ww, hh);
|
77
45
|
|
78
46
|
return self;
|
79
47
|
}
|
@@ -82,10 +50,7 @@ static
|
|
82
50
|
VALUE begin_paint(VALUE self)
|
83
51
|
{
|
84
52
|
CHECK;
|
85
|
-
|
86
|
-
if (!THIS->begin())
|
87
|
-
rays_error("Painter#begin_paint() failed.");
|
88
|
-
|
53
|
+
THIS->begin();
|
89
54
|
return self;
|
90
55
|
}
|
91
56
|
|
@@ -93,40 +58,47 @@ static
|
|
93
58
|
VALUE end_paint(VALUE self)
|
94
59
|
{
|
95
60
|
CHECK;
|
96
|
-
|
97
|
-
if (!THIS->end())
|
98
|
-
rays_error("Painter#end_paint() failed.");
|
99
|
-
|
61
|
+
THIS->end();
|
100
62
|
return self;
|
101
63
|
}
|
102
64
|
|
103
65
|
|
104
66
|
static
|
105
|
-
VALUE line(VALUE self
|
67
|
+
VALUE line(VALUE self)
|
106
68
|
{
|
107
69
|
CHECK;
|
70
|
+
check_arg_count(__FILE__, __LINE__, "Painter#line", argc, 2, 4);
|
108
71
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
72
|
+
if (argc == 2)
|
73
|
+
THIS->line(to<Rays::Point&>(argv[0]), to<Rays::Point&>(argv[1]));
|
74
|
+
else
|
75
|
+
{
|
76
|
+
coord x1 = to<coord>(argv[0]);
|
77
|
+
coord y1 = to<coord>(argv[1]);
|
78
|
+
coord x2 = to<coord>(argv[2]);
|
79
|
+
coord y2 = to<coord>(argv[3]);
|
80
|
+
THIS->line(x1, y1, x2, y2);
|
81
|
+
}
|
115
82
|
|
116
83
|
return self;
|
117
84
|
}
|
118
85
|
|
119
86
|
static
|
120
|
-
VALUE rect(VALUE self
|
87
|
+
VALUE rect(VALUE self)
|
121
88
|
{
|
122
89
|
CHECK;
|
90
|
+
check_arg_count(__FILE__, __LINE__, "Painter#rect", argc, 1, 4);
|
123
91
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
92
|
+
if (argc == 1)
|
93
|
+
THIS->rect(to<Rays::Bounds&>(argv[0]));
|
94
|
+
else
|
95
|
+
{
|
96
|
+
coord x = to<coord>(argv[0]);
|
97
|
+
coord y = to<coord>(argv[1]);
|
98
|
+
coord w = to<coord>(argv[2]);
|
99
|
+
coord h = to<coord>(argv[3]);
|
100
|
+
THIS->rect(x, y, w, h);
|
101
|
+
}
|
130
102
|
|
131
103
|
return self;
|
132
104
|
}
|
@@ -135,20 +107,24 @@ static
|
|
135
107
|
VALUE ellipse(VALUE self)
|
136
108
|
{
|
137
109
|
CHECK;
|
138
|
-
|
139
|
-
arg_count_error("Painter#ellipse", argc, 4, 5, 6);
|
110
|
+
check_arg_count(__FILE__, __LINE__, "Painter#ellipse", argc, 1, 2, 3, 4, 5, 6);
|
140
111
|
|
141
|
-
|
142
|
-
coord yy = to<coord>(argv[1]);
|
143
|
-
coord ww = to<coord>(argv[2]);
|
144
|
-
coord hh = (argc >= 4) ? to<coord>(argv[3]) : 0;
|
145
|
-
coord min_ = (argc >= 5) ? to<coord>(argv[4]) : 0;
|
146
|
-
uint nseg = (argc >= 6) ? to<uint>(argv[5]) : 0;
|
147
|
-
if (!THIS->ellipse(xx, yy, ww, hh, min_, nseg))
|
112
|
+
if (argv[0].is_kind_of(Rays::bounds_class()))
|
148
113
|
{
|
149
|
-
|
150
|
-
|
151
|
-
|
114
|
+
const Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
|
115
|
+
coord min_ = (argc >= 2) ? to<coord>(argv[1]) : 0;
|
116
|
+
uint nseg = (argc >= 3) ? to<uint> (argv[2]) : 0;
|
117
|
+
THIS->ellipse(b, min_, nseg);
|
118
|
+
}
|
119
|
+
else
|
120
|
+
{
|
121
|
+
coord x = to<coord>(argv[0]);
|
122
|
+
coord y = to<coord>(argv[1]);
|
123
|
+
coord w = to<coord>(argv[2]);
|
124
|
+
coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
|
125
|
+
coord min_ = (argc >= 5) ? to<coord>(argv[4]) : 0;
|
126
|
+
uint nseg = (argc >= 6) ? to<uint> (argv[5]) : 0;
|
127
|
+
THIS->ellipse(x, y, w, h, min_, nseg);
|
152
128
|
}
|
153
129
|
|
154
130
|
return self;
|
@@ -158,22 +134,28 @@ static
|
|
158
134
|
VALUE arc(VALUE self)
|
159
135
|
{
|
160
136
|
CHECK;
|
161
|
-
|
162
|
-
arg_count_error("Painter#ellipse", argc, 4, 5, 6, 7, 8);
|
137
|
+
check_arg_count(__FILE__, __LINE__, "Painter#ellipse", argc, 1, 2, 3, 4, 5, 6, 7, 8);
|
163
138
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
139
|
+
if (argv[0].is_kind_of(Rays::bounds_class()))
|
140
|
+
{
|
141
|
+
const Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
|
142
|
+
float from = (argc >= 2) ? to<float>(argv[1]) : 0;
|
143
|
+
float to_ = (argc >= 3) ? to<float>(argv[2]) : 360;
|
144
|
+
coord min_ = (argc >= 4) ? to<coord>(argv[3]) : 0;
|
145
|
+
uint nseg = (argc >= 5) ? to<uint> (argv[4]) : 0;
|
146
|
+
THIS->arc(b, from, to_, min_, nseg);
|
147
|
+
}
|
148
|
+
else
|
173
149
|
{
|
174
|
-
|
175
|
-
|
176
|
-
|
150
|
+
coord x = to<coord>(argv[0]);
|
151
|
+
coord y = to<coord>(argv[1]);
|
152
|
+
coord w = to<coord>(argv[2]);
|
153
|
+
coord h = (argc >= 4) ? to<coord>(argv[3]) : 0;
|
154
|
+
float from = (argc >= 5) ? to<float>(argv[4]) : 0;
|
155
|
+
float to_ = (argc >= 6) ? to<float>(argv[5]) : 360;
|
156
|
+
coord min_ = (argc >= 7) ? to<coord>(argv[6]) : 0;
|
157
|
+
uint nseg = (argc >= 8) ? to<uint> (argv[7]) : 0;
|
158
|
+
THIS->arc(x, y, w, h, from, to_, min_, nseg);
|
177
159
|
}
|
178
160
|
|
179
161
|
return self;
|
@@ -183,38 +165,24 @@ static
|
|
183
165
|
VALUE image(VALUE self)
|
184
166
|
{
|
185
167
|
CHECK;
|
186
|
-
|
187
|
-
arg_count_error("Painter#image", argc, 1, 3, 5, 7, 9);
|
168
|
+
check_arg_count(__FILE__, __LINE__, "Painter#image", argc, 1, 3, 5, 7, 9);
|
188
169
|
|
189
170
|
const Rays::Image* image = to<Rays::Image*>(argv[0]);
|
190
171
|
if (!image)
|
191
|
-
argument_error("%s is not an image.", argv[0].inspect().c_str());
|
172
|
+
argument_error(__FILE__, __LINE__, "%s is not an image.", argv[0].inspect().c_str());
|
192
173
|
|
193
174
|
if (argc == 1)
|
194
|
-
|
195
|
-
if (!THIS->image(*image))
|
196
|
-
rays_error("Painter#image(%s) failed.", argv[0].inspect().c_str());
|
197
|
-
}
|
175
|
+
THIS->image(*image);
|
198
176
|
else if (argc == 3)
|
199
177
|
{
|
200
178
|
coord x = to<coord>(argv[1]), y = to<coord>(argv[2]);
|
201
|
-
|
202
|
-
{
|
203
|
-
rays_error(
|
204
|
-
"Painter#image(%s, %f, %f) failed.",
|
205
|
-
argv[0].inspect().c_str(), x, y);
|
206
|
-
}
|
179
|
+
THIS->image(*image, x, y);
|
207
180
|
}
|
208
181
|
else if (argc == 5)
|
209
182
|
{
|
210
183
|
coord x = to<coord>(argv[1]), w = to<coord>(argv[3]);
|
211
184
|
coord y = to<coord>(argv[2]), h = to<coord>(argv[4]);
|
212
|
-
|
213
|
-
{
|
214
|
-
rays_error(
|
215
|
-
"Painter#image(%s, %f, %f, %f, %f) failed.",
|
216
|
-
argv[0].inspect().c_str(), x, y, w, h);
|
217
|
-
}
|
185
|
+
THIS->image(*image, x, y, w, h);
|
218
186
|
}
|
219
187
|
else if (argc == 7)
|
220
188
|
{
|
@@ -222,12 +190,7 @@ VALUE image(VALUE self)
|
|
222
190
|
coord sy = to<coord>(argv[2]), dy = to<coord>(argv[6]);
|
223
191
|
coord sw = to<coord>(argv[3]);
|
224
192
|
coord sh = to<coord>(argv[4]);
|
225
|
-
|
226
|
-
{
|
227
|
-
rays_error(
|
228
|
-
"Painter#image(%s, %f, %f, %f, %f, %f, %f) failed.",
|
229
|
-
argv[0].inspect().c_str(), sx, sy, sw, sh, dx, dy);
|
230
|
-
}
|
193
|
+
THIS->image(*image, sx, sy, sw, sh, dx, dy);
|
231
194
|
}
|
232
195
|
else if (argc == 9)
|
233
196
|
{
|
@@ -235,12 +198,7 @@ VALUE image(VALUE self)
|
|
235
198
|
coord sy = to<coord>(argv[2]), dy = to<coord>(argv[6]);
|
236
199
|
coord sw = to<coord>(argv[3]), dw = to<coord>(argv[7]);
|
237
200
|
coord sh = to<coord>(argv[4]), dh = to<coord>(argv[8]);
|
238
|
-
|
239
|
-
{
|
240
|
-
rays_error(
|
241
|
-
"Painter#image(%s, %f, %f, %f, %f, %f, %f, %f, %f) failed.",
|
242
|
-
argv[0].inspect().c_str(), sx, sy, sw, sh, dx, dy, dw, dh);
|
243
|
-
}
|
201
|
+
THIS->image(*image, sx, sy, sw, sh, dx, dy, dw, dh);
|
244
202
|
}
|
245
203
|
|
246
204
|
return self;
|
@@ -250,81 +208,71 @@ static
|
|
250
208
|
VALUE text(VALUE self)
|
251
209
|
{
|
252
210
|
CHECK;
|
253
|
-
|
254
|
-
arg_count_error("Painter#text", argc, 1, 3, 4, 5, 7);
|
211
|
+
check_arg_count(__FILE__, __LINE__, "Painter#text", argc, 1, 3, 4, 5, 7);
|
255
212
|
|
256
213
|
if (argc == 1)
|
257
|
-
|
258
|
-
if (!THIS->text(argv[0].c_str()))
|
259
|
-
rays_error("Painter#text(%s) failed.", argv[0].inspect().c_str());
|
260
|
-
}
|
214
|
+
THIS->text(argv[0].c_str());
|
261
215
|
else if (argc == 3)
|
262
216
|
{
|
263
217
|
coord x = to<coord>(argv[1]), y = to<coord>(argv[2]);
|
264
|
-
|
265
|
-
{
|
266
|
-
rays_error(
|
267
|
-
"Painter#text(%s, %f, %f) failed.",
|
268
|
-
argv[0].inspect().c_str(), x, y);
|
269
|
-
}
|
218
|
+
THIS->text(argv[0].c_str(), x, y);
|
270
219
|
}
|
271
220
|
else if (argc == 4)
|
272
221
|
{
|
273
222
|
const Rays::Font* font = to<Rays::Font*>(argv[3]);
|
274
223
|
if (!font || !*font)
|
275
|
-
rays_error("Painter#text: invalid font.");
|
224
|
+
rays_error(__FILE__, __LINE__, "Painter#text: invalid font.");
|
276
225
|
|
277
226
|
coord x = to<coord>(argv[1]), y = to<coord>(argv[2]);
|
278
|
-
|
279
|
-
{
|
280
|
-
rays_error(
|
281
|
-
"Painter#image(%s, %f, %f, %s) failed.",
|
282
|
-
argv[0].inspect().c_str(), x, y, argv[3].inspect().c_str());
|
283
|
-
}
|
227
|
+
THIS->text(argv[0].c_str(), x, y, font);
|
284
228
|
}
|
285
229
|
else if (argc == 5)
|
286
230
|
{
|
287
231
|
coord x = to<coord>(argv[1]), w = to<coord>(argv[3]);
|
288
232
|
coord y = to<coord>(argv[2]), h = to<coord>(argv[4]);
|
289
|
-
|
290
|
-
{
|
291
|
-
rays_error(
|
292
|
-
"Painter#text(%s, %f, %f, %f, %f) failed.",
|
293
|
-
argv[0].inspect().c_str(), x, y, w, h);
|
294
|
-
}
|
233
|
+
THIS->text(argv[0].c_str(), x, y, w, h);
|
295
234
|
}
|
296
235
|
else if (argc == 7)
|
297
236
|
{
|
298
237
|
const Rays::Font* font = to<Rays::Font*>(argv[3]);
|
299
238
|
if (!font || !*font)
|
300
|
-
rays_error("Painter#text: invalid font.");
|
239
|
+
rays_error(__FILE__, __LINE__, "Painter#text: invalid font.");
|
301
240
|
|
302
241
|
coord x = to<coord>(argv[1]), w = to<coord>(argv[3]);
|
303
242
|
coord y = to<coord>(argv[2]), h = to<coord>(argv[4]);
|
304
|
-
|
305
|
-
{
|
306
|
-
rays_error(
|
307
|
-
"Painter#image(%s, %f, %f, %f, %f, %s) failed.",
|
308
|
-
argv[0].inspect().c_str(), x, y, w, h, argv[3].inspect().c_str());
|
309
|
-
}
|
243
|
+
THIS->text(argv[0].c_str(), x, y, w, h, font);
|
310
244
|
}
|
311
245
|
|
312
246
|
return self;
|
313
247
|
}
|
314
248
|
|
249
|
+
static
|
250
|
+
VALUE clear(VALUE self)
|
251
|
+
{
|
252
|
+
CHECK;
|
253
|
+
THIS->clear();
|
254
|
+
}
|
255
|
+
|
256
|
+
static
|
257
|
+
VALUE bounds(VALUE self)
|
258
|
+
{
|
259
|
+
CHECK;
|
260
|
+
return value(THIS->bounds());
|
261
|
+
}
|
262
|
+
|
315
263
|
static
|
316
264
|
VALUE set_background(VALUE self)
|
317
265
|
{
|
318
266
|
CHECK;
|
319
|
-
|
320
|
-
arg_count_error("Painter#set_background", argc, 1, 2, 3, 4);
|
267
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_background", argc, 1, 2, 3, 4);
|
321
268
|
|
322
|
-
if (argc == 1
|
269
|
+
if (argc == 1 && argv[0].is_kind_of(Rays::color_class()))
|
270
|
+
THIS->set_background(to<Rays::Color&>(argv[0]));
|
271
|
+
else if (argc == 1 || argc == 2)
|
323
272
|
{
|
324
273
|
float v = to<float>(argv[0]);
|
325
274
|
float a = (argc >= 2) ? to<float>(argv[1]) : 1;
|
326
|
-
|
327
|
-
rays_error("Painter#set_background(%f, %f) failed.", v, a);
|
275
|
+
THIS->set_background(v, v, v, a);
|
328
276
|
}
|
329
277
|
else
|
330
278
|
{
|
@@ -332,8 +280,7 @@ VALUE set_background(VALUE self)
|
|
332
280
|
float g = to<float>(argv[1]);
|
333
281
|
float b = to<float>(argv[2]);
|
334
282
|
float a = (argc == 4) ? to<float>(argv[3]) : 1;
|
335
|
-
|
336
|
-
rays_error("Painter#set_background(%f, %f, %f, %f) failed.", r, g, b, a);
|
283
|
+
THIS->set_background(r, g, b, a);
|
337
284
|
}
|
338
285
|
|
339
286
|
return self;
|
@@ -343,10 +290,7 @@ static
|
|
343
290
|
VALUE no_background(VALUE self)
|
344
291
|
{
|
345
292
|
CHECK;
|
346
|
-
|
347
|
-
if (!THIS->no_background())
|
348
|
-
rays_error("Painter#no_clear() failed.");
|
349
|
-
|
293
|
+
THIS->no_background();
|
350
294
|
return self;
|
351
295
|
}
|
352
296
|
|
@@ -354,7 +298,6 @@ static
|
|
354
298
|
VALUE get_background(VALUE self)
|
355
299
|
{
|
356
300
|
CHECK;
|
357
|
-
|
358
301
|
return value(THIS->background());
|
359
302
|
}
|
360
303
|
|
@@ -362,15 +305,15 @@ static
|
|
362
305
|
VALUE set_fill(VALUE self)
|
363
306
|
{
|
364
307
|
CHECK;
|
365
|
-
|
366
|
-
arg_count_error("Painter#set_fill", argc, 1, 2, 3, 4);
|
308
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_fill", argc, 1, 2, 3, 4);
|
367
309
|
|
368
|
-
if (argc == 1
|
310
|
+
if (argc == 1 && argv[0].is_kind_of(Rays::color_class()))
|
311
|
+
THIS->set_fill(to<Rays::Color&>(argv[0]));
|
312
|
+
else if (argc == 1 || argc == 2)
|
369
313
|
{
|
370
314
|
float v = to<float>(argv[0]);
|
371
315
|
float a = (argc >= 2) ? to<float>(argv[1]) : 1;
|
372
|
-
|
373
|
-
rays_error("Painter#set_fill(%f, %f) failed.", v, a);
|
316
|
+
THIS->set_fill(v, v, v, a);
|
374
317
|
}
|
375
318
|
else
|
376
319
|
{
|
@@ -378,8 +321,7 @@ VALUE set_fill(VALUE self)
|
|
378
321
|
float g = to<float>(argv[1]);
|
379
322
|
float b = to<float>(argv[2]);
|
380
323
|
float a = (argc == 4) ? to<float>(argv[3]) : 1;
|
381
|
-
|
382
|
-
rays_error("Painter#set_fill(%f, %f, %f, %f) failed.", r, g, b, a);
|
324
|
+
THIS->set_fill(r, g, b, a);
|
383
325
|
}
|
384
326
|
|
385
327
|
return self;
|
@@ -389,10 +331,7 @@ static
|
|
389
331
|
VALUE no_fill(VALUE self)
|
390
332
|
{
|
391
333
|
CHECK;
|
392
|
-
|
393
|
-
if (!THIS->no_fill())
|
394
|
-
rays_error("Painter#no_fill() failed.");
|
395
|
-
|
334
|
+
THIS->no_fill();
|
396
335
|
return self;
|
397
336
|
}
|
398
337
|
|
@@ -400,7 +339,6 @@ static
|
|
400
339
|
VALUE get_fill(VALUE self)
|
401
340
|
{
|
402
341
|
CHECK;
|
403
|
-
|
404
342
|
return value(THIS->fill());
|
405
343
|
}
|
406
344
|
|
@@ -408,15 +346,15 @@ static
|
|
408
346
|
VALUE set_stroke(VALUE self)
|
409
347
|
{
|
410
348
|
CHECK;
|
411
|
-
|
412
|
-
arg_count_error("Painter#set_stroke", argc, 1, 2, 3, 4);
|
349
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_stroke", argc, 1, 2, 3, 4);
|
413
350
|
|
414
|
-
if (argc == 1
|
351
|
+
if (argc == 1 && argv[0].is_kind_of(Rays::color_class()))
|
352
|
+
THIS->set_stroke(to<Rays::Color&>(argv[0]));
|
353
|
+
else if (argc == 1 || argc == 2)
|
415
354
|
{
|
416
355
|
float v = to<float>(argv[0]);
|
417
356
|
float a = (argc >= 2) ? to<float>(argv[1]) : 1;
|
418
|
-
|
419
|
-
rays_error("Painter#set_stroke(%f, %f) failed.", v, a);
|
357
|
+
THIS->set_stroke(v, v, v, a);
|
420
358
|
}
|
421
359
|
else
|
422
360
|
{
|
@@ -424,8 +362,7 @@ VALUE set_stroke(VALUE self)
|
|
424
362
|
float g = to<float>(argv[1]);
|
425
363
|
float b = to<float>(argv[2]);
|
426
364
|
float a = (argc == 4) ? to<float>(argv[3]) : 1;
|
427
|
-
|
428
|
-
rays_error("Painter#set_stroke(%f, %f, %f, %f) failed.", r, g, b, a);
|
365
|
+
THIS->set_stroke(r, g, b, a);
|
429
366
|
}
|
430
367
|
|
431
368
|
return self;
|
@@ -435,10 +372,7 @@ static
|
|
435
372
|
VALUE no_stroke(VALUE self)
|
436
373
|
{
|
437
374
|
CHECK;
|
438
|
-
|
439
|
-
if (!THIS->no_stroke())
|
440
|
-
rays_error("Painter#no_stroke() failed.");
|
441
|
-
|
375
|
+
THIS->no_stroke();
|
442
376
|
return self;
|
443
377
|
}
|
444
378
|
|
@@ -446,19 +380,25 @@ static
|
|
446
380
|
VALUE get_stroke(VALUE self)
|
447
381
|
{
|
448
382
|
CHECK;
|
449
|
-
|
450
383
|
return value(THIS->stroke());
|
451
384
|
}
|
452
385
|
|
453
386
|
static
|
454
|
-
VALUE set_clip(VALUE self
|
387
|
+
VALUE set_clip(VALUE self)
|
455
388
|
{
|
456
389
|
CHECK;
|
390
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_clip", argc, 1, 4);
|
457
391
|
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
392
|
+
if (argc == 1)
|
393
|
+
THIS->set_clip(to<Rays::Bounds&>(argv[0]));
|
394
|
+
else
|
395
|
+
{
|
396
|
+
coord x = to<coord>(argv[0]);
|
397
|
+
coord y = to<coord>(argv[1]);
|
398
|
+
coord w = to<coord>(argv[2]);
|
399
|
+
coord h = to<coord>(argv[3]);
|
400
|
+
THIS->set_clip(x, y, w, h);
|
401
|
+
}
|
462
402
|
|
463
403
|
return self;
|
464
404
|
}
|
@@ -467,10 +407,7 @@ static
|
|
467
407
|
VALUE no_clip(VALUE self)
|
468
408
|
{
|
469
409
|
CHECK;
|
470
|
-
|
471
|
-
if (!THIS->no_clip())
|
472
|
-
rays_error("Painter#no_clip() failed.");
|
473
|
-
|
410
|
+
THIS->no_clip();
|
474
411
|
return self;
|
475
412
|
}
|
476
413
|
|
@@ -478,22 +415,31 @@ static
|
|
478
415
|
VALUE get_clip(VALUE self)
|
479
416
|
{
|
480
417
|
CHECK;
|
481
|
-
|
482
418
|
return value(THIS->clip());
|
483
419
|
}
|
484
420
|
|
485
421
|
static
|
486
|
-
VALUE set_font(VALUE self
|
422
|
+
VALUE set_font(VALUE self)
|
487
423
|
{
|
488
424
|
CHECK;
|
425
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_font", argc, 0, 1, 2);
|
489
426
|
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
427
|
+
if (argc == 0 || argv[0].is_kind_of(Rays::font_class()))
|
428
|
+
{
|
429
|
+
const Rays::Font* f = argc == 0
|
430
|
+
? &Rays::default_font()
|
431
|
+
: to<Rays::Font*>(argv[0]);
|
432
|
+
if (!f || !*f)
|
433
|
+
argument_error(__FILE__, __LINE__);
|
494
434
|
|
495
|
-
|
496
|
-
|
435
|
+
THIS->set_font(*f);
|
436
|
+
}
|
437
|
+
else
|
438
|
+
{
|
439
|
+
const char* name = argv[0].c_str();
|
440
|
+
coord size = argc >= 2 ? to<coord>(argv[1]) : 0;
|
441
|
+
THIS->set_font(name, size);
|
442
|
+
}
|
497
443
|
|
498
444
|
return self;
|
499
445
|
}
|
@@ -502,29 +448,94 @@ static
|
|
502
448
|
VALUE get_font(VALUE self)
|
503
449
|
{
|
504
450
|
CHECK;
|
505
|
-
|
506
451
|
return value(THIS->font());
|
507
452
|
}
|
508
453
|
|
509
454
|
static
|
510
|
-
VALUE
|
455
|
+
VALUE push_attr(VALUE self)
|
456
|
+
{
|
457
|
+
CHECK;
|
458
|
+
THIS->push_attr();
|
459
|
+
return self;
|
460
|
+
}
|
461
|
+
|
462
|
+
static
|
463
|
+
VALUE pop_attr(VALUE self)
|
511
464
|
{
|
512
465
|
CHECK;
|
466
|
+
THIS->pop_attr();
|
467
|
+
return self;
|
468
|
+
}
|
469
|
+
|
513
470
|
|
514
|
-
|
515
|
-
|
471
|
+
static
|
472
|
+
VALUE attach_shader(VALUE self, VALUE shader)
|
473
|
+
{
|
474
|
+
CHECK;
|
475
|
+
THIS->attach(to<Rays::Shader&>(shader));
|
476
|
+
return self;
|
477
|
+
}
|
516
478
|
|
479
|
+
static
|
480
|
+
VALUE detach_shader(VALUE self, VALUE shader)
|
481
|
+
{
|
482
|
+
CHECK;
|
483
|
+
THIS->detach(to<Rays::Shader&>(shader));
|
517
484
|
return self;
|
518
485
|
}
|
519
486
|
|
520
487
|
static
|
521
|
-
VALUE
|
488
|
+
VALUE set_uniform(VALUE self)
|
522
489
|
{
|
523
490
|
CHECK;
|
491
|
+
check_arg_count(__FILE__, __LINE__, "Painter#set_uniform", argc, 2, 3, 4, 5);
|
492
|
+
|
493
|
+
#define Ai(n) (argv[n].as_i())
|
494
|
+
#define Af(n) ((float) argv[n].as_f())
|
495
|
+
|
496
|
+
const char* name = argv[0].c_str();
|
497
|
+
if (argv[1].is_i())
|
498
|
+
{
|
499
|
+
switch (argc)
|
500
|
+
{
|
501
|
+
case 2: THIS->set_uniform(name, Ai(1)); break;
|
502
|
+
case 3: THIS->set_uniform(name, Ai(1), Ai(2)); break;
|
503
|
+
case 4: THIS->set_uniform(name, Ai(1), Ai(2), Ai(3)); break;
|
504
|
+
case 5: THIS->set_uniform(name, Ai(1), Ai(2), Ai(3), Ai(4)); break;
|
505
|
+
}
|
506
|
+
}
|
507
|
+
else if (argv[1].is_f())
|
508
|
+
{
|
509
|
+
switch (argc)
|
510
|
+
{
|
511
|
+
case 2: THIS->set_uniform(name, Af(1)); break;
|
512
|
+
case 3: THIS->set_uniform(name, Af(1), Af(2)); break;
|
513
|
+
case 4: THIS->set_uniform(name, Af(1), Af(2), Af(3)); break;
|
514
|
+
case 5: THIS->set_uniform(name, Af(1), Af(2), Af(3), Af(4)); break;
|
515
|
+
}
|
516
|
+
}
|
517
|
+
else
|
518
|
+
argument_error(__FILE__, __LINE__);
|
519
|
+
|
520
|
+
#undef Ai
|
521
|
+
#undef Af
|
522
|
+
|
523
|
+
return self;
|
524
|
+
}
|
524
525
|
|
525
|
-
|
526
|
-
|
526
|
+
static
|
527
|
+
VALUE push_shader(VALUE self)
|
528
|
+
{
|
529
|
+
CHECK;
|
530
|
+
THIS->push_shader();
|
531
|
+
return self;
|
532
|
+
}
|
527
533
|
|
534
|
+
static
|
535
|
+
VALUE pop_shader(VALUE self)
|
536
|
+
{
|
537
|
+
CHECK;
|
538
|
+
THIS->pop_shader();
|
528
539
|
return self;
|
529
540
|
}
|
530
541
|
|
@@ -533,14 +544,12 @@ static
|
|
533
544
|
VALUE translate(VALUE self)
|
534
545
|
{
|
535
546
|
CHECK;
|
536
|
-
|
537
|
-
arg_count_error("Painter#translate", argc, 2, 3);
|
547
|
+
check_arg_count(__FILE__, __LINE__, "Painter#translate", argc, 2, 3);
|
538
548
|
|
539
549
|
coord xx = to<coord>(argv[0]);
|
540
550
|
coord yy = to<coord>(argv[1]);
|
541
551
|
coord zz = (argc >= 3) ? to<coord>(argv[2]) : 0;
|
542
|
-
|
543
|
-
rays_error("Painter#translate(%f %f %f) failed.", xx, yy, zz);
|
552
|
+
THIS->translate(xx, yy, zz);
|
544
553
|
|
545
554
|
return self;
|
546
555
|
}
|
@@ -549,14 +558,12 @@ static
|
|
549
558
|
VALUE scale(VALUE self)
|
550
559
|
{
|
551
560
|
CHECK;
|
552
|
-
|
553
|
-
arg_count_error("Painter#scale", argc, 2, 3);
|
561
|
+
check_arg_count(__FILE__, __LINE__, "Painter#scale", argc, 2, 3);
|
554
562
|
|
555
563
|
coord xx = to<coord>(argv[0]);
|
556
564
|
coord yy = to<coord>(argv[1]);
|
557
565
|
coord zz = (argc >= 3) ? to<coord>(argv[2]) : 1;
|
558
|
-
|
559
|
-
rays_error("Painter#scale(%f %f %f) failed.", xx, yy, zz);
|
566
|
+
THIS->scale(xx, yy, zz);
|
560
567
|
|
561
568
|
return self;
|
562
569
|
}
|
@@ -565,8 +572,7 @@ static
|
|
565
572
|
VALUE rotate(VALUE self)
|
566
573
|
{
|
567
574
|
CHECK;
|
568
|
-
|
569
|
-
arg_count_error("Painter#rotate", argc, 1, 3, 4);
|
575
|
+
check_arg_count(__FILE__, __LINE__, "Painter#rotate", argc, 1, 3, 4);
|
570
576
|
|
571
577
|
coord aa = to<coord>(argv[0]), xx = 0, yy = 0, zz = 1;
|
572
578
|
if (argc >= 3)
|
@@ -576,8 +582,7 @@ VALUE rotate(VALUE self)
|
|
576
582
|
zz = argc >= 4 ? to<coord>(argv[3]) : 0;
|
577
583
|
}
|
578
584
|
|
579
|
-
|
580
|
-
rays_error("Painter#rotate(%f %f %f %f) failed.", aa, xx, yy, zz);
|
585
|
+
THIS->rotate(aa, xx, yy, zz);
|
581
586
|
|
582
587
|
return self;
|
583
588
|
}
|
@@ -586,10 +591,7 @@ static
|
|
586
591
|
VALUE set_matrix(VALUE self)
|
587
592
|
{
|
588
593
|
CHECK;
|
589
|
-
|
590
|
-
if (!THIS->set_matrix())
|
591
|
-
rays_error("Painter#set_matrix() failed.");
|
592
|
-
|
594
|
+
THIS->set_matrix();
|
593
595
|
return self;
|
594
596
|
}
|
595
597
|
|
@@ -597,7 +599,6 @@ static
|
|
597
599
|
VALUE get_matrix(VALUE self)
|
598
600
|
{
|
599
601
|
CHECK;
|
600
|
-
|
601
602
|
return value(THIS->matrix());
|
602
603
|
}
|
603
604
|
|
@@ -605,10 +606,7 @@ static
|
|
605
606
|
VALUE push_matrix(VALUE self)
|
606
607
|
{
|
607
608
|
CHECK;
|
608
|
-
|
609
|
-
if (!THIS->push_matrix())
|
610
|
-
rays_error("Painter#push_matrix() failed.");
|
611
|
-
|
609
|
+
THIS->push_matrix();
|
612
610
|
return self;
|
613
611
|
}
|
614
612
|
|
@@ -616,10 +614,7 @@ static
|
|
616
614
|
VALUE pop_matrix(VALUE self)
|
617
615
|
{
|
618
616
|
CHECK;
|
619
|
-
|
620
|
-
if (!THIS->pop_matrix())
|
621
|
-
rays_error("Painter#pop_matrix() failed.");
|
622
|
-
|
617
|
+
THIS->pop_matrix();
|
623
618
|
return self;
|
624
619
|
}
|
625
620
|
|
@@ -633,38 +628,60 @@ Init_painter ()
|
|
633
628
|
rb_define_alloc_func(cPainter, alloc);
|
634
629
|
|
635
630
|
rb_define_method(cPainter, "canvas", RUBY_METHOD_FUNC(canvas), 4);
|
636
|
-
|
637
|
-
|
631
|
+
rb_define_private_method(cPainter, "begin_paint", RUBY_METHOD_FUNC(begin_paint), 0);
|
632
|
+
rb_define_private_method(cPainter, "end_paint", RUBY_METHOD_FUNC(end_paint), 0);
|
638
633
|
|
639
|
-
rb_define_method(cPainter, "line", RUBY_METHOD_FUNC(line),
|
640
|
-
rb_define_method(cPainter, "rect", RUBY_METHOD_FUNC(rect),
|
634
|
+
rb_define_method(cPainter, "line", RUBY_METHOD_FUNC(line), -1);
|
635
|
+
rb_define_method(cPainter, "rect", RUBY_METHOD_FUNC(rect), -1);
|
641
636
|
rb_define_method(cPainter, "ellipse", RUBY_METHOD_FUNC(ellipse), -1);
|
642
637
|
rb_define_method(cPainter, "arc", RUBY_METHOD_FUNC(arc), -1);
|
643
638
|
rb_define_method(cPainter, "image", RUBY_METHOD_FUNC(image), -1);
|
644
639
|
rb_define_method(cPainter, "text", RUBY_METHOD_FUNC(text), -1);
|
645
640
|
|
646
|
-
rb_define_method(cPainter, "
|
641
|
+
rb_define_method(cPainter, "clear", RUBY_METHOD_FUNC(clear), 0);
|
642
|
+
rb_define_method(cPainter, "bounds", RUBY_METHOD_FUNC(bounds), 0);
|
643
|
+
rb_define_private_method(cPainter, "set_background", RUBY_METHOD_FUNC(set_background), -1);
|
644
|
+
rb_define_private_method(cPainter, "get_background", RUBY_METHOD_FUNC(get_background), 0);
|
647
645
|
rb_define_method(cPainter, "no_background", RUBY_METHOD_FUNC(no_background), 0);
|
648
|
-
|
649
|
-
|
646
|
+
rb_define_private_method(cPainter, "set_fill", RUBY_METHOD_FUNC(set_fill), -1);
|
647
|
+
rb_define_private_method(cPainter, "get_fill", RUBY_METHOD_FUNC(get_fill), 0);
|
650
648
|
rb_define_method(cPainter, "no_fill", RUBY_METHOD_FUNC(no_fill), 0);
|
651
|
-
|
652
|
-
|
649
|
+
rb_define_private_method(cPainter, "set_stroke", RUBY_METHOD_FUNC(set_stroke), -1);
|
650
|
+
rb_define_private_method(cPainter, "get_stroke", RUBY_METHOD_FUNC(get_stroke), 0);
|
653
651
|
rb_define_method(cPainter, "no_stroke", RUBY_METHOD_FUNC(no_stroke), 0);
|
654
|
-
|
655
|
-
|
652
|
+
rb_define_private_method(cPainter, "set_clip", RUBY_METHOD_FUNC(set_clip), -1);
|
653
|
+
rb_define_private_method(cPainter, "get_clip", RUBY_METHOD_FUNC(get_clip), 0);
|
656
654
|
rb_define_method(cPainter, "no_clip", RUBY_METHOD_FUNC(no_clip), 0);
|
657
|
-
|
658
|
-
|
659
|
-
rb_define_method(cPainter, "
|
660
|
-
rb_define_method(cPainter, "
|
661
|
-
|
655
|
+
rb_define_private_method(cPainter, "set_font", RUBY_METHOD_FUNC(set_font), -1);
|
656
|
+
rb_define_private_method(cPainter, "get_font", RUBY_METHOD_FUNC(get_font), 0);
|
657
|
+
rb_define_method(cPainter, "push_attr", RUBY_METHOD_FUNC(push_attr), 0);
|
658
|
+
rb_define_method(cPainter, "pop_attr", RUBY_METHOD_FUNC(pop_attr), 0);
|
659
|
+
|
660
|
+
rb_define_private_method(cPainter, "attach_shader", RUBY_METHOD_FUNC(attach_shader), 1);
|
661
|
+
rb_define_private_method(cPainter, "detach_shader", RUBY_METHOD_FUNC(detach_shader), 1);
|
662
|
+
rb_define_private_method(cPainter, "set_uniform", RUBY_METHOD_FUNC(set_uniform), -1);
|
663
|
+
rb_define_method(cPainter, "push_shader", RUBY_METHOD_FUNC(push_shader), 0);
|
664
|
+
rb_define_method(cPainter, "pop_shader", RUBY_METHOD_FUNC(pop_shader), 0);
|
662
665
|
|
663
666
|
rb_define_method(cPainter, "translate", RUBY_METHOD_FUNC(translate), -1);
|
664
|
-
rb_define_method(cPainter, "scale", RUBY_METHOD_FUNC(
|
665
|
-
rb_define_method(cPainter, "rotate", RUBY_METHOD_FUNC(
|
666
|
-
|
667
|
-
|
667
|
+
rb_define_method(cPainter, "scale", RUBY_METHOD_FUNC(scale), -1);
|
668
|
+
rb_define_method(cPainter, "rotate", RUBY_METHOD_FUNC(rotate), -1);
|
669
|
+
rb_define_private_method(cPainter, "set_matrix", RUBY_METHOD_FUNC(set_matrix), -1);
|
670
|
+
rb_define_private_method(cPainter, "get_matrix", RUBY_METHOD_FUNC(get_matrix), 0);
|
668
671
|
rb_define_method(cPainter, "push_matrix", RUBY_METHOD_FUNC(push_matrix), 0);
|
669
672
|
rb_define_method(cPainter, "pop_matrix", RUBY_METHOD_FUNC(pop_matrix), 0);
|
670
673
|
}
|
674
|
+
|
675
|
+
|
676
|
+
namespace Rays
|
677
|
+
{
|
678
|
+
|
679
|
+
|
680
|
+
Class
|
681
|
+
painter_class ()
|
682
|
+
{
|
683
|
+
return cPainter;
|
684
|
+
}
|
685
|
+
|
686
|
+
|
687
|
+
}// Rays
|