rays 0.2.1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/rays/bitmap.cpp +99 -32
  3. data/.doc/ext/rays/bounds.cpp +16 -12
  4. data/.doc/ext/rays/camera.cpp +1 -1
  5. data/.doc/ext/rays/color.cpp +2 -2
  6. data/.doc/ext/rays/color_space.cpp +3 -3
  7. data/.doc/ext/rays/defs.cpp +4 -4
  8. data/.doc/ext/rays/font.cpp +4 -3
  9. data/.doc/ext/rays/image.cpp +32 -18
  10. data/.doc/ext/rays/matrix.cpp +6 -6
  11. data/.doc/ext/rays/painter.cpp +1 -1
  12. data/.doc/ext/rays/point.cpp +10 -6
  13. data/.doc/ext/rays/polygon.cpp +11 -9
  14. data/.doc/ext/rays/polyline.cpp +6 -4
  15. data/.doc/ext/rays/rays.cpp +25 -15
  16. data/.doc/ext/rays/shader.cpp +3 -3
  17. data/.github/workflows/release-gem.yml +1 -1
  18. data/.github/workflows/test.yml +3 -0
  19. data/ChangeLog.md +11 -0
  20. data/Gemfile.lock +1 -1
  21. data/LICENSE +1 -1
  22. data/Rakefile +17 -3
  23. data/VERSION +1 -1
  24. data/ext/rays/bitmap.cpp +99 -32
  25. data/ext/rays/bounds.cpp +16 -12
  26. data/ext/rays/camera.cpp +1 -1
  27. data/ext/rays/color.cpp +2 -2
  28. data/ext/rays/color_space.cpp +3 -3
  29. data/ext/rays/defs.cpp +4 -4
  30. data/ext/rays/defs.h +2 -0
  31. data/ext/rays/extconf.rb +4 -2
  32. data/ext/rays/font.cpp +4 -3
  33. data/ext/rays/image.cpp +34 -18
  34. data/ext/rays/matrix.cpp +6 -6
  35. data/ext/rays/painter.cpp +1 -1
  36. data/ext/rays/point.cpp +10 -6
  37. data/ext/rays/polygon.cpp +11 -9
  38. data/ext/rays/polyline.cpp +6 -4
  39. data/ext/rays/rays.cpp +25 -15
  40. data/ext/rays/shader.cpp +3 -3
  41. data/include/rays/defs.h +7 -0
  42. data/include/rays/image.h +8 -2
  43. data/include/rays/ruby/bitmap.h +2 -2
  44. data/include/rays/ruby/bounds.h +2 -2
  45. data/include/rays/ruby/camera.h +2 -2
  46. data/include/rays/ruby/color.h +2 -2
  47. data/include/rays/ruby/color_space.h +2 -2
  48. data/include/rays/ruby/exception.h +3 -3
  49. data/include/rays/ruby/font.h +2 -2
  50. data/include/rays/ruby/image.h +2 -2
  51. data/include/rays/ruby/matrix.h +2 -2
  52. data/include/rays/ruby/painter.h +2 -2
  53. data/include/rays/ruby/point.h +2 -2
  54. data/include/rays/ruby/polygon.h +2 -2
  55. data/include/rays/ruby/polyline.h +2 -2
  56. data/include/rays/ruby/rays.h +6 -6
  57. data/include/rays/ruby/shader.h +2 -2
  58. data/lib/rays/bitmap.rb +7 -0
  59. data/lib/rays/extension.rb +4 -0
  60. data/lib/rays/image.rb +4 -0
  61. data/rays.gemspec +2 -2
  62. data/src/bounds.cpp +6 -2
  63. data/src/color.cpp +12 -4
  64. data/src/coord.h +2 -2
  65. data/src/font.cpp +1 -0
  66. data/src/image.cpp +32 -4
  67. data/src/ios/bitmap.mm +40 -33
  68. data/src/ios/font.mm +6 -1
  69. data/src/ios/rays.mm +2 -2
  70. data/src/matrix.h +1 -1
  71. data/src/opengl.h +1 -2
  72. data/src/osx/bitmap.mm +40 -33
  73. data/src/osx/font.mm +6 -1
  74. data/src/osx/rays.mm +2 -2
  75. data/src/painter.cpp +4 -1
  76. data/src/point.cpp +15 -3
  77. data/src/polygon.cpp +3 -5
  78. data/src/render_buffer.cpp +11 -3
  79. data/src/shader.cpp +3 -0
  80. data/src/shader_program.cpp +19 -9
  81. data/src/shader_source.cpp +5 -1
  82. data/src/texture.cpp +33 -11
  83. data/src/texture.h +6 -2
  84. data/src/win32/bitmap.cpp +178 -66
  85. data/src/win32/camera.cpp +119 -0
  86. data/src/win32/font.cpp +181 -40
  87. data/src/win32/gdi.h +1 -1
  88. data/src/win32/opengl.cpp +127 -0
  89. data/src/win32/rays.cpp +16 -9
  90. data/test/helper.rb +2 -0
  91. data/test/test_bitmap.rb +3 -1
  92. data/test/test_image.rb +8 -14
  93. data/test/test_painter.rb +4 -4
  94. data/test/test_painter_shape.rb +6 -5
  95. metadata +8 -7
  96. data/src/win32/font.h +0 -24
data/ext/rays/color.cpp CHANGED
@@ -6,7 +6,7 @@
6
6
  #include "defs.h"
7
7
 
8
8
 
9
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Color)
9
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Color)
10
10
 
11
11
  #define THIS to<Rays::Color*>(self)
12
12
 
@@ -344,7 +344,7 @@ namespace Rucy
344
344
  return find_color(str_.c_str());
345
345
  }
346
346
 
347
- template <> Rays::Color
347
+ template <> RAYS_EXPORT Rays::Color
348
348
  value_to<Rays::Color> (int argc, const Value*argv, bool convert)
349
349
  {
350
350
  if (argc == 1 && argv->is_array())
@@ -5,7 +5,7 @@
5
5
  #include "defs.h"
6
6
 
7
7
 
8
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::ColorSpace)
8
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::ColorSpace)
9
9
 
10
10
  #define THIS to<Rays::ColorSpace*>(self)
11
11
 
@@ -219,7 +219,7 @@ namespace Rucy
219
219
  {
220
220
 
221
221
 
222
- template <> Rays::ColorSpace
222
+ template <> RAYS_EXPORT Rays::ColorSpace
223
223
  value_to<Rays::ColorSpace> (int argc, const Value* argv, bool convert)
224
224
  {
225
225
  if (argc == 1 && argv->is_array())
@@ -247,7 +247,7 @@ namespace Rucy
247
247
  }
248
248
 
249
249
 
250
- template <> Rays::ColorSpaceType
250
+ template <> RAYS_EXPORT Rays::ColorSpaceType
251
251
  value_to<Rays::ColorSpaceType> (Value value, bool convert)
252
252
  {
253
253
  if (convert)
data/ext/rays/defs.cpp CHANGED
@@ -84,7 +84,7 @@ void get_rect_args (
84
84
  if (argc <= 0)
85
85
  argument_error(__FILE__, __LINE__);
86
86
 
87
- if (argv[0].is_kind_of(Rays::bounds_class()))
87
+ if (argv[0].is_a(Rays::bounds_class()))
88
88
  {
89
89
  Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
90
90
  *x = b.x;
@@ -96,7 +96,7 @@ void get_rect_args (
96
96
  *lb = argc >= 4 ? to<coord>(argv[3]) : *lt;
97
97
  *rb = argc >= 5 ? to<coord>(argv[4]) : *lt;
98
98
  }
99
- else if (argv[0].is_kind_of(Rays::point_class()))
99
+ else if (argv[0].is_a(Rays::point_class()))
100
100
  {
101
101
  if (argc < 2)
102
102
  argument_error(__FILE__, __LINE__);
@@ -154,7 +154,7 @@ void get_ellipse_args (
154
154
  {
155
155
  *x = *y = *w = *h = 0;
156
156
  }
157
- else if (argv[0].is_kind_of(Rays::bounds_class()))
157
+ else if (argv[0].is_a(Rays::bounds_class()))
158
158
  {
159
159
  const Rays::Bounds& b = to<Rays::Bounds&>(argv[0]);
160
160
  *x = b.x;
@@ -162,7 +162,7 @@ void get_ellipse_args (
162
162
  *w = b.w;
163
163
  *h = b.h;
164
164
  }
165
- else if (argv[0].is_kind_of(Rays::point_class()))
165
+ else if (argv[0].is_a(Rays::point_class()))
166
166
  {
167
167
  if (argc < 2)
168
168
  argument_error(__FILE__, __LINE__);
data/ext/rays/defs.h CHANGED
@@ -12,6 +12,8 @@
12
12
  #include "rays/ruby/defs.h"
13
13
 
14
14
 
15
+ using namespace Xot::Types;
16
+
15
17
  using namespace Rucy;
16
18
 
17
19
  using Rays::coord;
data/ext/rays/extconf.rb CHANGED
@@ -12,9 +12,11 @@ require 'rays/extension'
12
12
  Xot::ExtConf.new Xot, Rucy, Rays do
13
13
  setup do
14
14
  headers << 'ruby.h'
15
- libs.unshift 'gdi21', 'opengl32' if win32?
15
+ libs.unshift 'gdi32', 'opengl32', 'glew32' if win32?
16
16
  frameworks << 'AppKit' << 'OpenGL' << 'AVFoundation' if osx?
17
- $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if cygwin?
17
+ $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if mingw? || cygwin?
18
+
19
+ $CPPFLAGS << ' -DRAYS_32BIT_PIXELS_STRING' if RUBY_PLATFORM == 'x64-mingw-ucrt'
18
20
  end
19
21
 
20
22
  create_makefile 'rays/native'
data/ext/rays/font.cpp CHANGED
@@ -5,7 +5,7 @@
5
5
  #include "defs.h"
6
6
 
7
7
 
8
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Font)
8
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Font)
9
9
 
10
10
  #define THIS to<Rays::Font*>(self)
11
11
 
@@ -169,7 +169,7 @@ namespace Rucy
169
169
  {
170
170
 
171
171
 
172
- template <> Rays::Font
172
+ template <> RAYS_EXPORT Rays::Font
173
173
  value_to<Rays::Font> (int argc, const Value* argv, bool convert)
174
174
  {
175
175
  if (argc == 1 && argv->is_array())
@@ -185,7 +185,8 @@ namespace Rucy
185
185
  if (argc == 0)
186
186
  return Rays::get_default_font();
187
187
 
188
- coord size = argc >= 2 ? to<coord>(argv[1]) : Rays::Font::DEFAULT_SIZE;
188
+ coord size =
189
+ argc >= 2 ? to<coord>(argv[1]) : (coord) Rays::Font::DEFAULT_SIZE;
189
190
  if (argv->is_nil())
190
191
  return Rays::Font(NULL, size);
191
192
  else if (argv->is_s() || argv->is_sym())
data/ext/rays/image.cpp CHANGED
@@ -7,7 +7,7 @@
7
7
  #include "defs.h"
8
8
 
9
9
 
10
- RUCY_DEFINE_VALUE_FROM_TO(Rays::Image)
10
+ RUCY_DEFINE_VALUE_FROM_TO(RAYS_EXPORT, Rays::Image)
11
11
 
12
12
  #define THIS to<Rays::Image*>(self)
13
13
 
@@ -22,31 +22,28 @@ RUCY_DEF_ALLOC(alloc, klass)
22
22
  RUCY_END
23
23
 
24
24
  static
25
- RUCY_DEFN(initialize)
25
+ RUCY_DEF3(initialize, args, pixel_density, smooth)
26
26
  {
27
27
  RUCY_CHECK_OBJ(Rays::Image, self);
28
- check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 1, 2, 3, 4);
29
28
 
30
- if (argv[0].is_kind_of(Rays::bitmap_class()))
31
- {
32
- check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 1, 2);
29
+ size_t argc = args.size();
30
+ check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 1, 2, 3);
33
31
 
34
- const Rays::Bitmap* bitmap = to<Rays::Bitmap*>(argv[0]);
35
- if (!bitmap)
32
+ float pd = to<float>(pixel_density);
33
+ if (args[0].is_a(Rays::bitmap_class()))
34
+ {
35
+ const Rays::Bitmap* bmp = to<Rays::Bitmap*>(args[0]);
36
+ if (!bmp)
36
37
  argument_error(__FILE__, __LINE__);
37
38
 
38
- float pixel_density = (argc >= 2) ? to<float>(argv[1]) : 1;
39
- *THIS = Rays::Image(*bitmap, pixel_density);
39
+ *THIS = Rays::Image(*bmp, pd, smooth);
40
40
  }
41
41
  else
42
42
  {
43
- check_arg_count(__FILE__, __LINE__, "Image#initialize", argc, 2, 3, 4);
44
-
45
- int width = to<int>(argv[0]);
46
- int height = to<int>(argv[1]);
47
- Rays::ColorSpace cs = (argc >= 3) ? to<Rays::ColorSpace>(argv[2]) : Rays::RGBA;
48
- float pixel_density = (argc >= 4) ? to<float>(argv[3]) : 1;
49
- *THIS = Rays::Image(width, height, cs, pixel_density);
43
+ int width = to<int>(args[0]);
44
+ int height = to<int>(args[1]);
45
+ auto cs = (argc >= 3) ? to<Rays::ColorSpace>(args[2]) : Rays::RGBA;
46
+ *THIS = Rays::Image(width, height, cs, pd, smooth);
50
47
  }
51
48
 
52
49
  return self;
@@ -120,6 +117,23 @@ RUCY_DEF1(get_bitmap, modify)
120
117
  }
121
118
  RUCY_END
122
119
 
120
+ static
121
+ RUCY_DEF1(set_smooth, smooth)
122
+ {
123
+ CHECK;
124
+ THIS->set_smooth(smooth);
125
+ return smooth;
126
+ }
127
+ RUCY_END
128
+
129
+ static
130
+ RUCY_DEF0(get_smooth)
131
+ {
132
+ CHECK;
133
+ return value(THIS->smooth());
134
+ }
135
+ RUCY_END
136
+
123
137
  static
124
138
  RUCY_DEF1(load, path)
125
139
  {
@@ -137,7 +151,7 @@ Init_rays_image ()
137
151
 
138
152
  cImage = mRays.define_class("Image");
139
153
  cImage.define_alloc_func(alloc);
140
- cImage.define_private_method("initialize", initialize);
154
+ cImage.define_private_method("initialize!", initialize);
141
155
  cImage.define_private_method("initialize_copy", initialize_copy);
142
156
  cImage.define_method("save", save);
143
157
  cImage.define_method("width", width);
@@ -146,6 +160,8 @@ Init_rays_image ()
146
160
  cImage.define_method("pixel_density", pixel_density);
147
161
  cImage.define_method("painter", painter);
148
162
  cImage.define_private_method("get_bitmap", get_bitmap);
163
+ cImage.define_method("smooth=", set_smooth);
164
+ cImage.define_method("smooth", get_smooth);
149
165
  cImage.define_module_function("load", load);
150
166
  }
151
167
 
data/ext/rays/matrix.cpp CHANGED
@@ -6,7 +6,7 @@
6
6
  #include "defs.h"
7
7
 
8
8
 
9
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Matrix)
9
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Matrix)
10
10
 
11
11
  #define THIS to<Rays::Matrix*>(self)
12
12
 
@@ -136,10 +136,10 @@ RUCY_DEF1(mult, val)
136
136
  {
137
137
  CHECK;
138
138
 
139
- if (val.is_kind_of(Rays::matrix_class()))
139
+ if (val.is_a(Rays::matrix_class()))
140
140
  return value(*THIS * to<Rays::Matrix&>(val));
141
141
 
142
- if (val.is_kind_of(Rays::point_class()))
142
+ if (val.is_a(Rays::point_class()))
143
143
  return value(*THIS * to<Rays::Point&>(val));
144
144
 
145
145
  if (val.is_array())
@@ -232,10 +232,10 @@ RUCY_DEFN(s_ortho)
232
232
  RUCY_END
233
233
 
234
234
  static
235
- RUCY_DEF4(s_perspective, fov_y, aspect_ratio, near, far)
235
+ RUCY_DEF4(s_perspective, fov_y, aspect_ratio, near_, far_)
236
236
  {
237
237
  return value(Rays::perspective(
238
- to<float>(fov_y), to<float>(aspect_ratio), to<coord>(near), to<coord>(far)));
238
+ to<float>(fov_y), to<float>(aspect_ratio), to<coord>(near_), to<coord>(far_)));
239
239
  }
240
240
  RUCY_END
241
241
 
@@ -301,7 +301,7 @@ namespace Rucy
301
301
  {
302
302
 
303
303
 
304
- template <> Rays::Matrix
304
+ template <> RAYS_EXPORT Rays::Matrix
305
305
  value_to<Rays::Matrix> (int argc, const Value* argv, bool convert)
306
306
  {
307
307
  if (argc == 1 && argv->is_array())
data/ext/rays/painter.cpp CHANGED
@@ -12,7 +12,7 @@
12
12
  #include "defs.h"
13
13
 
14
14
 
15
- RUCY_DEFINE_VALUE_FROM_TO(Rays::Painter)
15
+ RUCY_DEFINE_VALUE_FROM_TO(RAYS_EXPORT, Rays::Painter)
16
16
 
17
17
  #define THIS to<Rays::Painter*>(self)
18
18
 
data/ext/rays/point.cpp CHANGED
@@ -5,7 +5,7 @@
5
5
  #include "defs.h"
6
6
 
7
7
 
8
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Point)
8
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Point)
9
9
 
10
10
  #define THIS to<Rays::Point*>(self)
11
11
 
@@ -47,7 +47,7 @@ RUCY_DEFN(move_to)
47
47
  CHECK;
48
48
  check_arg_count(__FILE__, __LINE__, "Point#move_to", argc, 1, 2, 3);
49
49
 
50
- if (argv[0].is_kind_of(Rays::point_class()))
50
+ if (argv[0].is_a(Rays::point_class()))
51
51
  THIS->move_to(to<Rays::Point&>(argv[0]));
52
52
  else
53
53
  {
@@ -68,7 +68,7 @@ RUCY_DEFN(move_by)
68
68
  CHECK;
69
69
  check_arg_count(__FILE__, __LINE__, "Point#move_by", argc, 1, 2, 3);
70
70
 
71
- if (argv[0].is_kind_of(Rays::point_class()))
71
+ if (argv[0].is_a(Rays::point_class()))
72
72
  THIS->move_by(to<Rays::Point&>(argv[0]));
73
73
  else
74
74
  {
@@ -224,7 +224,9 @@ RUCY_DEF2(set_at, index, value)
224
224
  CHECK;
225
225
 
226
226
  int i = index.as_i();
227
- if (i < 0 || 2 < i)
227
+ if (i < 0)
228
+ index_error(__FILE__, __LINE__);
229
+ if (i > 2)
228
230
  index_error(__FILE__, __LINE__);
229
231
 
230
232
  (*THIS)[i] = to<coord>(value);
@@ -238,7 +240,9 @@ RUCY_DEF1(get_at, index)
238
240
  CHECK;
239
241
 
240
242
  int i = index.as_i();
241
- if (i < 0 || 2 < i)
243
+ if (i < 0)
244
+ index_error(__FILE__, __LINE__);
245
+ if (i > 2)
242
246
  index_error(__FILE__, __LINE__);
243
247
 
244
248
  return value((*THIS)[i]);
@@ -299,7 +303,7 @@ namespace Rucy
299
303
  {
300
304
 
301
305
 
302
- template <> Rays::Point
306
+ template <> RAYS_EXPORT Rays::Point
303
307
  value_to<Rays::Point> (int argc, const Value* argv, bool convert)
304
308
  {
305
309
  if (argc == 1 && argv->is_array())
data/ext/rays/polygon.cpp CHANGED
@@ -8,7 +8,7 @@
8
8
  #include "defs.h"
9
9
 
10
10
 
11
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Polygon)
11
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Polygon)
12
12
 
13
13
  #define THIS to<Rays::Polygon*>(self)
14
14
 
@@ -27,7 +27,7 @@ RUCY_DEF4(setup, args, loop, colors, texcoords)
27
27
  {
28
28
  CHECK;
29
29
 
30
- if (args[0].is_kind_of(Rays::polyline_class()))
30
+ if (args[0].is_a(Rays::polyline_class()))
31
31
  *THIS = to<Rays::Polygon>(args.size(), args.as_array());
32
32
  else
33
33
  {
@@ -48,7 +48,7 @@ RUCY_DEFN(expand)
48
48
  coord width = to<coord> (argv[0]);
49
49
  Rays::CapType cap = argc >= 2 ? to<Rays::CapType> (argv[1]) : Rays::CAP_DEFAULT;
50
50
  Rays::JoinType join = argc >= 3 ? to<Rays::JoinType>(argv[2]) : Rays::JOIN_DEFAULT;
51
- coord ml = argc >= 4 ? to<coord> (argv[3]) : Rays::JOIN_DEFAULT_MITER_LIMIT;
51
+ coord ml = argc >= 4 ? to<coord> (argv[3]) : (coord) Rays::JOIN_DEFAULT_MITER_LIMIT;
52
52
 
53
53
  Rays::Polygon polygon;
54
54
  THIS->expand(&polygon, width, cap, join, ml);
@@ -89,7 +89,9 @@ RUCY_DEF1(get_at, index)
89
89
  int i = to<int>(index);
90
90
  if (i < 0) i += size;
91
91
 
92
- if (i < 0 || size <= i)
92
+ if (i < 0)
93
+ index_error(__FILE__, __LINE__);
94
+ if (i >= size)
93
95
  index_error(__FILE__, __LINE__);
94
96
 
95
97
  return value((*THIS)[i]);
@@ -124,10 +126,10 @@ RUCY_DEF1(op_add, obj)
124
126
  {
125
127
  CHECK;
126
128
 
127
- if (obj.is_kind_of(Rays::polyline_class()))
129
+ if (obj.is_a(Rays::polyline_class()))
128
130
  return value(*THIS + to<Rays::Polyline&>(obj));
129
131
 
130
- if (obj.is_kind_of(Rays::polygon_class()))
132
+ if (obj.is_a(Rays::polygon_class()))
131
133
  return value(*THIS + to<Rays::Polygon&>(obj));
132
134
 
133
135
  if (!obj.is_array())
@@ -139,7 +141,7 @@ RUCY_DEF1(op_add, obj)
139
141
  for (const auto& polyline : to<Rays::Polygon&>(self))
140
142
  polylines.emplace_back(polyline);
141
143
 
142
- if (obj[0].is_kind_of(Rays::polyline_class()))
144
+ if (obj[0].is_a(Rays::polyline_class()))
143
145
  {
144
146
  each_poly<Rays::Polyline>(obj, [&](const auto& polyline)
145
147
  {
@@ -400,14 +402,14 @@ namespace Rucy
400
402
  {
401
403
 
402
404
 
403
- template <> Rays::Polygon
405
+ template <> RAYS_EXPORT Rays::Polygon
404
406
  value_to<Rays::Polygon> (int argc, const Value* argv, bool convert)
405
407
  {
406
408
  if (convert)
407
409
  {
408
410
  if (argc <= 0)
409
411
  return Rays::Polygon();
410
- else if (argv->is_kind_of(Rays::polyline_class()))
412
+ else if (argv->is_a(Rays::polyline_class()))
411
413
  {
412
414
  if (argc == 1)
413
415
  return Rays::Polygon(to<Rays::Polyline&>(*argv));
@@ -10,7 +10,7 @@
10
10
  #include "defs.h"
11
11
 
12
12
 
13
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Polyline)
13
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Polyline)
14
14
 
15
15
  #define THIS to<Rays::Polyline*>(self)
16
16
 
@@ -46,7 +46,7 @@ RUCY_DEFN(expand)
46
46
  coord width = to<coord> (argv[0]);
47
47
  Rays::CapType cap = argc >= 2 ? to<Rays::CapType> (argv[1]) : Rays::CAP_DEFAULT;
48
48
  Rays::JoinType join = argc >= 3 ? to<Rays::JoinType>(argv[2]) : Rays::JOIN_DEFAULT;
49
- coord ml = argc >= 4 ? to<coord> (argv[3]) : Rays::JOIN_DEFAULT_MITER_LIMIT;
49
+ coord ml = argc >= 4 ? to<coord> (argv[3]) : (coord) Rays::JOIN_DEFAULT_MITER_LIMIT;
50
50
 
51
51
  Rays::Polygon polygon;
52
52
  THIS->expand(&polygon, width, cap, join, ml);
@@ -111,7 +111,9 @@ RUCY_DEF1(get_at, index)
111
111
  int i = to<int>(index);
112
112
  if (i < 0) i += size;
113
113
 
114
- if (i < 0 || size <= i)
114
+ if (i < 0)
115
+ index_error(__FILE__, __LINE__);
116
+ if (i >= size)
115
117
  index_error(__FILE__, __LINE__);
116
118
 
117
119
  return value((*THIS)[i]);
@@ -222,7 +224,7 @@ namespace Rucy
222
224
  {
223
225
 
224
226
 
225
- template <> Rays::Polyline
227
+ template <> RAYS_EXPORT Rays::Polyline
226
228
  value_to<Rays::Polyline> (int argc, const Value* argv, bool convert)
227
229
  {
228
230
  assert(argc == 0 || (argc > 0 && argv));
data/ext/rays/rays.cpp CHANGED
@@ -6,11 +6,11 @@
6
6
  #include "defs.h"
7
7
 
8
8
 
9
- RUCY_DEFINE_CONVERT_TO(Rays::CapType)
10
- RUCY_DEFINE_CONVERT_TO(Rays::JoinType)
11
- RUCY_DEFINE_CONVERT_TO(Rays::BlendMode)
12
- RUCY_DEFINE_CONVERT_TO(Rays::TexCoordMode)
13
- RUCY_DEFINE_CONVERT_TO(Rays::TexCoordWrap)
9
+ RUCY_DEFINE_CONVERT_TO(RAYS_EXPORT, Rays::CapType)
10
+ RUCY_DEFINE_CONVERT_TO(RAYS_EXPORT, Rays::JoinType)
11
+ RUCY_DEFINE_CONVERT_TO(RAYS_EXPORT, Rays::BlendMode)
12
+ RUCY_DEFINE_CONVERT_TO(RAYS_EXPORT, Rays::TexCoordMode)
13
+ RUCY_DEFINE_CONVERT_TO(RAYS_EXPORT, Rays::TexCoordWrap)
14
14
 
15
15
 
16
16
  template <typename T>
@@ -104,7 +104,7 @@ namespace Rucy
104
104
  {
105
105
 
106
106
 
107
- template <> Rays::CapType
107
+ template <> RAYS_EXPORT Rays::CapType
108
108
  value_to<Rays::CapType> (int argc, const Value* argv, bool convert)
109
109
  {
110
110
  assert(argc > 0 && argv);
@@ -128,14 +128,16 @@ namespace Rucy
128
128
  }
129
129
 
130
130
  int type = value_to<int>(*argv, convert);
131
- if (type < 0 || Rays::CAP_MAX <= type)
131
+ if (type < 0)
132
+ argument_error(__FILE__, __LINE__, "invalid cap type -- %d", type);
133
+ if (type >= Rays::CAP_MAX)
132
134
  argument_error(__FILE__, __LINE__, "invalid cap type -- %d", type);
133
135
 
134
136
  return (Rays::CapType) type;
135
137
  }
136
138
 
137
139
 
138
- template <> Rays::JoinType
140
+ template <> RAYS_EXPORT Rays::JoinType
139
141
  value_to<Rays::JoinType> (int argc, const Value* argv, bool convert)
140
142
  {
141
143
  assert(argc > 0 && argv);
@@ -159,14 +161,16 @@ namespace Rucy
159
161
  }
160
162
 
161
163
  int type = value_to<int>(*argv, convert);
162
- if (type < 0 || Rays::JOIN_MAX <= type)
164
+ if (type < 0)
165
+ argument_error(__FILE__, __LINE__, "invalid join type -- %d", type);
166
+ if (type >= Rays::JOIN_MAX)
163
167
  argument_error(__FILE__, __LINE__, "invalid join type -- %d", type);
164
168
 
165
169
  return (Rays::JoinType) type;
166
170
  }
167
171
 
168
172
 
169
- template <> Rays::BlendMode
173
+ template <> RAYS_EXPORT Rays::BlendMode
170
174
  value_to<Rays::BlendMode> (int argc, const Value* argv, bool convert)
171
175
  {
172
176
  assert(argc > 0 && argv);
@@ -190,14 +194,16 @@ namespace Rucy
190
194
  }
191
195
 
192
196
  int mode = value_to<int>(*argv, convert);
193
- if (mode < 0 || Rays::BLEND_MAX <= mode)
197
+ if (mode < 0)
198
+ argument_error(__FILE__, __LINE__, "invalid blend mode -- %d", mode);
199
+ if (mode >= Rays::BLEND_MAX)
194
200
  argument_error(__FILE__, __LINE__, "invalid blend mode -- %d", mode);
195
201
 
196
202
  return (Rays::BlendMode) mode;
197
203
  }
198
204
 
199
205
 
200
- template <> Rays::TexCoordMode
206
+ template <> RAYS_EXPORT Rays::TexCoordMode
201
207
  value_to<Rays::TexCoordMode> (int argc, const Value* argv, bool convert)
202
208
  {
203
209
  assert(argc > 0 && argv);
@@ -221,14 +227,16 @@ namespace Rucy
221
227
  }
222
228
 
223
229
  int mode = value_to<int>(*argv, convert);
224
- if (mode < 0 || Rays::TEXCOORD_MODE_MAX <= mode)
230
+ if (mode < 0)
231
+ argument_error(__FILE__, __LINE__, "invalid texcoord mode -- %d", mode);
232
+ if (mode >= Rays::TEXCOORD_MODE_MAX)
225
233
  argument_error(__FILE__, __LINE__, "invalid texcoord mode -- %d", mode);
226
234
 
227
235
  return (Rays::TexCoordMode) mode;
228
236
  }
229
237
 
230
238
 
231
- template <> Rays::TexCoordWrap
239
+ template <> RAYS_EXPORT Rays::TexCoordWrap
232
240
  value_to<Rays::TexCoordWrap> (int argc, const Value* argv, bool convert)
233
241
  {
234
242
  assert(argc > 0 && argv);
@@ -252,7 +260,9 @@ namespace Rucy
252
260
  }
253
261
 
254
262
  int wrap = value_to<int>(*argv, convert);
255
- if (wrap < 0 || Rays::TEXCOORD_WRAP_MAX <= wrap)
263
+ if (wrap < 0)
264
+ argument_error(__FILE__, __LINE__, "invalid texcoord wrap -- %d", wrap);
265
+ if (wrap >= Rays::TEXCOORD_WRAP_MAX)
256
266
  argument_error(__FILE__, __LINE__, "invalid texcoord wrap -- %d", wrap);
257
267
 
258
268
  return (Rays::TexCoordWrap) wrap;
data/ext/rays/shader.cpp CHANGED
@@ -6,7 +6,7 @@
6
6
  #include "defs.h"
7
7
 
8
8
 
9
- RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(Rays::Shader)
9
+ RUCY_DEFINE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Shader)
10
10
 
11
11
  #define THIS to<Rays::Shader*>(self)
12
12
 
@@ -141,7 +141,7 @@ RUCY_DEFN(set_uniform)
141
141
  case 4: THIS->set_uniform(name, Af(0), Af(1), Af(2), Af(3)); break;
142
142
  }
143
143
  }
144
- else if (argv[0].is_kind_of(Rays::image_class()))
144
+ else if (argv[0].is_a(Rays::image_class()))
145
145
  THIS->set_uniform(name, to<Rays::Image&>(argv[0]));
146
146
  else
147
147
  argument_error(__FILE__, __LINE__);
@@ -194,7 +194,7 @@ namespace Rucy
194
194
  {
195
195
 
196
196
 
197
- template <> Rays::Shader
197
+ template <> RAYS_EXPORT Rays::Shader
198
198
  value_to<Rays::Shader> (int argc, const Value* argv, bool convert)
199
199
  {
200
200
  if (argc == 1 && argv->is_array())
data/include/rays/defs.h CHANGED
@@ -11,6 +11,13 @@
11
11
  #include <xot/string.h>
12
12
 
13
13
 
14
+ #if defined(WIN32) && defined(GCC) && defined(RAYS)
15
+ #define RAYS_EXPORT __declspec(dllexport)
16
+ #else
17
+ #define RAYS_EXPORT
18
+ #endif
19
+
20
+
14
21
  namespace Rays
15
22
  {
16
23
 
data/include/rays/image.h CHANGED
@@ -27,9 +27,11 @@ namespace Rays
27
27
 
28
28
  Image (
29
29
  int width, int height, const ColorSpace& cs = DEFAULT_COLOR_SPACE,
30
- float pixel_density = 1);
30
+ float pixel_density = 1, bool smooth = false);
31
31
 
32
- Image (const Bitmap& bitmap, float pixel_density = 1);
32
+ Image (
33
+ const Bitmap& bitmap,
34
+ float pixel_density = 1, bool smooth = false);
33
35
 
34
36
  ~Image ();
35
37
 
@@ -45,6 +47,10 @@ namespace Rays
45
47
 
46
48
  float pixel_density () const;
47
49
 
50
+ void set_smooth (bool smooth);
51
+
52
+ bool smooth () const;
53
+
48
54
  Painter painter ();
49
55
 
50
56
  Bitmap& bitmap (bool modify = false);
@@ -9,14 +9,14 @@
9
9
  #include <rays/bitmap.h>
10
10
 
11
11
 
12
- RUCY_DECLARE_VALUE_FROM_TO(Rays::Bitmap)
12
+ RUCY_DECLARE_VALUE_FROM_TO(RAYS_EXPORT, Rays::Bitmap)
13
13
 
14
14
 
15
15
  namespace Rays
16
16
  {
17
17
 
18
18
 
19
- Rucy::Class bitmap_class ();
19
+ RAYS_EXPORT Rucy::Class bitmap_class ();
20
20
  // class Rays::Bitmap
21
21
 
22
22
 
@@ -10,14 +10,14 @@
10
10
  #include <rays/ruby/point.h>
11
11
 
12
12
 
13
- RUCY_DECLARE_VALUE_OR_ARRAY_FROM_TO(Rays::Bounds)
13
+ RUCY_DECLARE_VALUE_OR_ARRAY_FROM_TO(RAYS_EXPORT, Rays::Bounds)
14
14
 
15
15
 
16
16
  namespace Rays
17
17
  {
18
18
 
19
19
 
20
- Rucy::Class bounds_class ();
20
+ RAYS_EXPORT Rucy::Class bounds_class ();
21
21
  // class Rays::Bounds
22
22
 
23
23
 
@@ -9,14 +9,14 @@
9
9
  #include <rays/camera.h>
10
10
 
11
11
 
12
- RUCY_DECLARE_VALUE_FROM_TO(Rays::Camera)
12
+ RUCY_DECLARE_VALUE_FROM_TO(RAYS_EXPORT, Rays::Camera)
13
13
 
14
14
 
15
15
  namespace Rays
16
16
  {
17
17
 
18
18
 
19
- Rucy::Class camera_class ();
19
+ RAYS_EXPORT Rucy::Class camera_class ();
20
20
  // class Rays::Camera
21
21
 
22
22