rays 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.
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