rays 0.1.48 → 0.1.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doc/ext/rays/color.cpp +11 -0
- data/.doc/ext/rays/image.cpp +3 -3
- data/.doc/ext/rays/matrix.cpp +65 -7
- data/.doc/ext/rays/painter.cpp +44 -6
- data/.doc/ext/rays/point.cpp +1 -11
- data/.doc/ext/rays/polygon.cpp +6 -4
- data/ChangeLog.md +23 -0
- data/VERSION +1 -1
- data/ext/rays/color.cpp +13 -1
- data/ext/rays/image.cpp +3 -3
- data/ext/rays/matrix.cpp +69 -7
- data/ext/rays/painter.cpp +52 -10
- data/ext/rays/point.cpp +1 -12
- data/ext/rays/polygon.cpp +6 -4
- data/include/rays/color.h +3 -1
- data/include/rays/image.h +1 -1
- data/include/rays/matrix.h +24 -0
- data/include/rays/painter.h +10 -0
- data/include/rays/polygon.h +12 -6
- data/lib/rays/color.rb +6 -0
- data/lib/rays/image.rb +11 -1
- data/lib/rays/matrix.rb +16 -0
- data/lib/rays/painter.rb +8 -8
- data/lib/rays/point.rb +4 -0
- data/lib/rays/polygon.rb +4 -4
- data/rays.gemspec +2 -2
- data/src/color.cpp +11 -2
- data/src/font.cpp +13 -16
- data/src/font.h +0 -6
- data/src/image.cpp +58 -14
- data/src/ios/font.mm +6 -10
- data/src/ios/helper.h +2 -2
- data/src/ios/helper.mm +2 -2
- data/src/matrix.cpp +45 -0
- data/src/osx/font.mm +3 -5
- data/src/painter.cpp +91 -29
- data/src/polygon.cpp +28 -18
- data/src/texture.cpp +21 -2
- data/src/texture.h +2 -0
- data/test/test_color.rb +21 -4
- data/test/test_font.rb +3 -0
- data/test/test_image.rb +26 -0
- data/test/test_matrix.rb +22 -0
- data/test/test_painter.rb +27 -0
- metadata +7 -7
data/include/rays/matrix.h
CHANGED
@@ -57,6 +57,8 @@ namespace Rays
|
|
57
57
|
|
58
58
|
This& reset (const coord* elements, size_t size);
|
59
59
|
|
60
|
+
This& transpose ();
|
61
|
+
|
60
62
|
This& translate (coord x, coord y, coord z = 0);
|
61
63
|
|
62
64
|
This& translate (const Coord3& translate);
|
@@ -92,6 +94,28 @@ namespace Rays
|
|
92
94
|
};// Matrix
|
93
95
|
|
94
96
|
|
97
|
+
Matrix ortho (
|
98
|
+
coord left, coord right,
|
99
|
+
coord top, coord bottom);
|
100
|
+
|
101
|
+
Matrix ortho (
|
102
|
+
coord left, coord right,
|
103
|
+
coord top, coord bottom,
|
104
|
+
coord near, coord far);
|
105
|
+
|
106
|
+
Matrix perspective (float fov_y, float aspect_ratio, coord near, coord far);
|
107
|
+
|
108
|
+
Matrix look_at (
|
109
|
+
coord eye_x, coord eye_y, coord eye_z,
|
110
|
+
coord target_x, coord target_y, coord target_z,
|
111
|
+
coord up_x = 0, coord up_y = 1, coord up_z = 0);
|
112
|
+
|
113
|
+
Matrix look_at (
|
114
|
+
const Point& eye,
|
115
|
+
const Point& target,
|
116
|
+
const Point& up = Point(0, 1, 0));
|
117
|
+
|
118
|
+
|
95
119
|
}// Rays
|
96
120
|
|
97
121
|
|
data/include/rays/painter.h
CHANGED
@@ -77,6 +77,12 @@ namespace Rays
|
|
77
77
|
void polygon (
|
78
78
|
const Polygon& polygon, const Bounds& bounds);
|
79
79
|
|
80
|
+
void point (coord x, coord y);
|
81
|
+
|
82
|
+
void point (const Point& point);
|
83
|
+
|
84
|
+
void points (const Point* points, size_t size);
|
85
|
+
|
80
86
|
void line (coord x1, coord y1, coord x2, coord y2);
|
81
87
|
|
82
88
|
void line (const Point& p1, const Point& p2);
|
@@ -235,6 +241,10 @@ namespace Rays
|
|
235
241
|
|
236
242
|
uint nsegment () const;
|
237
243
|
|
244
|
+
void set_line_height (coord height);
|
245
|
+
|
246
|
+
coord line_height (bool raw = false) const;
|
247
|
+
|
238
248
|
void set_blend_mode (BlendMode mode);
|
239
249
|
|
240
250
|
BlendMode blend_mode () const;
|
data/include/rays/polygon.h
CHANGED
@@ -191,29 +191,35 @@ namespace Rays
|
|
191
191
|
Polygon create_curve (
|
192
192
|
coord x1, coord y1, coord x2, coord y2,
|
193
193
|
coord x3, coord y3, coord x4, coord y4,
|
194
|
-
bool loop
|
194
|
+
bool loop = false,
|
195
|
+
uint nsegment = 0);
|
195
196
|
|
196
197
|
Polygon create_curve (
|
197
198
|
const Point& p1, const Point& p2, const Point& p3, const Point& p4,
|
198
|
-
bool loop
|
199
|
+
bool loop = false,
|
200
|
+
uint nsegment = 0);
|
199
201
|
|
200
202
|
Polygon create_curve (
|
201
203
|
const Point* points, size_t size,
|
202
|
-
bool loop
|
204
|
+
bool loop = false,
|
205
|
+
uint nsegment = 0);
|
203
206
|
|
204
207
|
|
205
208
|
Polygon create_bezier (
|
206
209
|
coord x1, coord y1, coord x2, coord y2,
|
207
210
|
coord x3, coord y3, coord x4, coord y4,
|
208
|
-
bool loop
|
211
|
+
bool loop = false,
|
212
|
+
uint nsegment = 0);
|
209
213
|
|
210
214
|
Polygon create_bezier (
|
211
215
|
const Point& p1, const Point& p2, const Point& p3, const Point& p4,
|
212
|
-
bool loop
|
216
|
+
bool loop = false,
|
217
|
+
uint nsegment = 0);
|
213
218
|
|
214
219
|
Polygon create_bezier (
|
215
220
|
const Point* points, size_t size,
|
216
|
-
bool loop
|
221
|
+
bool loop = false,
|
222
|
+
uint nsegment = 0);
|
217
223
|
|
218
224
|
|
219
225
|
}// Rays
|
data/lib/rays/color.rb
CHANGED
@@ -21,6 +21,8 @@ module Rays
|
|
21
21
|
alias a= alpha=
|
22
22
|
alias a alpha
|
23
23
|
|
24
|
+
alias to_hsb to_hsv
|
25
|
+
|
24
26
|
def opaque?()
|
25
27
|
alpha >= 1
|
26
28
|
end
|
@@ -85,6 +87,10 @@ module Rays
|
|
85
87
|
"#<#{self.class.name} #{to_a.join ' '}>"
|
86
88
|
end
|
87
89
|
|
90
|
+
class << self
|
91
|
+
alias hsb hsv
|
92
|
+
end
|
93
|
+
|
88
94
|
end# Color
|
89
95
|
|
90
96
|
|
data/lib/rays/image.rb
CHANGED
@@ -9,7 +9,9 @@ module Rays
|
|
9
9
|
|
10
10
|
extend Forwardable
|
11
11
|
|
12
|
-
def_delegators :bitmap,
|
12
|
+
def_delegators :bitmap, :pixels, :[]
|
13
|
+
|
14
|
+
def_delegators :bitmap_for_write, :pixels=, :[]=
|
13
15
|
|
14
16
|
def paint(&block)
|
15
17
|
painter.paint self, &block
|
@@ -24,6 +26,14 @@ module Rays
|
|
24
26
|
Bounds.new 0, 0, width, height
|
25
27
|
end
|
26
28
|
|
29
|
+
def bitmap(modify = false)
|
30
|
+
get_bitmap modify
|
31
|
+
end
|
32
|
+
|
33
|
+
private def bitmap_for_write()
|
34
|
+
get_bitmap true
|
35
|
+
end
|
36
|
+
|
27
37
|
end# Image
|
28
38
|
|
29
39
|
|
data/lib/rays/matrix.rb
CHANGED
@@ -9,6 +9,22 @@ module Rays
|
|
9
9
|
include Comparable
|
10
10
|
include Enumerable
|
11
11
|
|
12
|
+
def transpose()
|
13
|
+
dup.transpose!
|
14
|
+
end
|
15
|
+
|
16
|
+
def translate(*args)
|
17
|
+
dup.translate!(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
def scale(*args)
|
21
|
+
dup.scale!(*args)
|
22
|
+
end
|
23
|
+
|
24
|
+
def rotate(*args)
|
25
|
+
dup.rotate!(*args)
|
26
|
+
end
|
27
|
+
|
12
28
|
def each(&block)
|
13
29
|
to_a.each(&block)
|
14
30
|
end
|
data/lib/rays/painter.rb
CHANGED
@@ -57,26 +57,26 @@ module Rays
|
|
57
57
|
|
58
58
|
def line(*args, loop: false)
|
59
59
|
if args.first.kind_of?(Polyline)
|
60
|
-
|
60
|
+
polyline! args.first
|
61
61
|
else
|
62
|
-
|
62
|
+
line! args, loop
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
def rect(*args, round: nil, lt: nil, rt: nil, lb: nil, rb: nil)
|
67
|
-
|
67
|
+
rect! args, round, lt, rt, lb, rb
|
68
68
|
end
|
69
69
|
|
70
70
|
def ellipse(*args, center: nil, radius: nil, hole: nil, from: nil, to: nil)
|
71
|
-
|
71
|
+
ellipse! args, center, radius, hole, from, to
|
72
72
|
end
|
73
73
|
|
74
74
|
def curve(*args, loop: false)
|
75
|
-
|
75
|
+
curve! args, loop
|
76
76
|
end
|
77
77
|
|
78
78
|
def bezier(*args, loop: false)
|
79
|
-
|
79
|
+
bezier! args, loop
|
80
80
|
end
|
81
81
|
|
82
82
|
def color=(fill, stroke = nil)
|
@@ -130,8 +130,8 @@ module Rays
|
|
130
130
|
|
131
131
|
universal_accessor :background, :fill, :stroke, :color,
|
132
132
|
:stroke_width, :stroke_outset, :stroke_cap, :stroke_join, :miter_limit,
|
133
|
-
:nsegment, :
|
134
|
-
:
|
133
|
+
:nsegment, :line_height, :blend_mode, :clip, :font,
|
134
|
+
:texture, :texcoord_mode, :texcoord_wrap, :shader
|
135
135
|
|
136
136
|
private
|
137
137
|
|
data/lib/rays/point.rb
CHANGED
data/lib/rays/polygon.rb
CHANGED
@@ -79,12 +79,12 @@ module Rays
|
|
79
79
|
ellipse! args, center, radius, hole, from, to, nsegment
|
80
80
|
end
|
81
81
|
|
82
|
-
def self.curve(*points, loop: false)
|
83
|
-
curve! points, loop
|
82
|
+
def self.curve(*points, loop: false, nsegment: nil)
|
83
|
+
curve! points, loop, nsegment
|
84
84
|
end
|
85
85
|
|
86
|
-
def self.bezier(*points, loop: false)
|
87
|
-
bezier! points, loop
|
86
|
+
def self.bezier(*points, loop: false, nsegment: nil)
|
87
|
+
bezier! points, loop, nsegment
|
88
88
|
end
|
89
89
|
|
90
90
|
end# Polygon
|
data/rays.gemspec
CHANGED
@@ -25,8 +25,8 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.platform = Gem::Platform::RUBY
|
26
26
|
s.required_ruby_version = '>= 3.0.0'
|
27
27
|
|
28
|
-
s.add_runtime_dependency 'xot', '~> 0.1.
|
29
|
-
s.add_runtime_dependency 'rucy', '~> 0.1.
|
28
|
+
s.add_runtime_dependency 'xot', '~> 0.1.42'
|
29
|
+
s.add_runtime_dependency 'rucy', '~> 0.1.44'
|
30
30
|
|
31
31
|
s.files = `git ls-files`.split $/
|
32
32
|
s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
|
data/src/color.cpp
CHANGED
@@ -47,8 +47,17 @@ namespace Rays
|
|
47
47
|
hue = fmod(hue, 1.f);
|
48
48
|
if (hue < 0) hue += 1.f;
|
49
49
|
|
50
|
-
auto
|
51
|
-
return Color(
|
50
|
+
auto rgb = glm::rgbColor(Vec3(hue * 360.f, saturation, value));
|
51
|
+
return Color(rgb[0], rgb[1], rgb[2], alpha);
|
52
|
+
}
|
53
|
+
|
54
|
+
void
|
55
|
+
get_hsv (float* hue, float* saturation, float* value, const Color& color)
|
56
|
+
{
|
57
|
+
auto hsv = glm::hsvColor(Vec3(color.r, color.g, color.b));
|
58
|
+
if (hue) *hue = hsv[0] / 360.f;
|
59
|
+
if (saturation) *saturation = hsv[1];
|
60
|
+
if (value) *value = hsv[2];
|
52
61
|
}
|
53
62
|
|
54
63
|
|
data/src/font.cpp
CHANGED
@@ -58,21 +58,6 @@ namespace Rays
|
|
58
58
|
return font.self->get_raw(pixel_density);
|
59
59
|
}
|
60
60
|
|
61
|
-
coord
|
62
|
-
Font_get_width (const Font& font, float pixel_density, const char* str)
|
63
|
-
{
|
64
|
-
return Font_get_raw(font, pixel_density).get_width(str);
|
65
|
-
}
|
66
|
-
|
67
|
-
coord
|
68
|
-
Font_get_height (
|
69
|
-
const Font& font, float pixel_density,
|
70
|
-
coord* ascent, coord* descent, coord* leading)
|
71
|
-
{
|
72
|
-
return Font_get_raw(font, pixel_density)
|
73
|
-
.get_height(ascent, descent, leading);
|
74
|
-
}
|
75
|
-
|
76
61
|
|
77
62
|
Font::Font ()
|
78
63
|
{
|
@@ -116,7 +101,19 @@ namespace Rays
|
|
116
101
|
coord
|
117
102
|
Font::get_width (const char* str) const
|
118
103
|
{
|
119
|
-
|
104
|
+
if (!strchr(str, '\n'))
|
105
|
+
return self->rawfont.get_width(str);
|
106
|
+
|
107
|
+
Xot::StringList lines;
|
108
|
+
split(&lines, str);
|
109
|
+
|
110
|
+
coord width = 0;
|
111
|
+
for (const auto& line : lines)
|
112
|
+
{
|
113
|
+
coord w = self->rawfont.get_width(line.c_str());
|
114
|
+
if (w > width) width = w;
|
115
|
+
}
|
116
|
+
return width;
|
120
117
|
}
|
121
118
|
|
122
119
|
coord
|
data/src/font.h
CHANGED
@@ -55,12 +55,6 @@ namespace Rays
|
|
55
55
|
|
56
56
|
const RawFont& Font_get_raw (const Font& font, float pixel_density);
|
57
57
|
|
58
|
-
coord Font_get_width (const Font& font, float pixel_density, const char* str);
|
59
|
-
|
60
|
-
coord Font_get_height (
|
61
|
-
const Font& font, float pixel_density,
|
62
|
-
coord* ascent = NULL, coord* descent = NULL, coord* leading = NULL);
|
63
|
-
|
64
58
|
|
65
59
|
RawFont RawFont_load (const char* path, coord size);
|
66
60
|
|
data/src/image.cpp
CHANGED
@@ -10,6 +10,13 @@
|
|
10
10
|
#include "texture.h"
|
11
11
|
|
12
12
|
|
13
|
+
#if 0
|
14
|
+
#define PRINT_MODIFIED_FLAGS(message) self->print_modified_flags(message)
|
15
|
+
#else
|
16
|
+
#define PRINT_MODIFIED_FLAGS(message)
|
17
|
+
#endif
|
18
|
+
|
19
|
+
|
13
20
|
namespace Rays
|
14
21
|
{
|
15
22
|
|
@@ -27,6 +34,16 @@ namespace Rays
|
|
27
34
|
|
28
35
|
mutable Texture texture;
|
29
36
|
|
37
|
+
void print_modified_flags (const char* message)
|
38
|
+
{
|
39
|
+
printf("%s: %d %d %d %d \n",
|
40
|
+
message,
|
41
|
+
bitmap ? 1 : 0,
|
42
|
+
Bitmap_get_modified(bitmap) ? 1 : 0,
|
43
|
+
texture ? 1 : 0,
|
44
|
+
texture.modified() ? 1 : 0);
|
45
|
+
}
|
46
|
+
|
30
47
|
};// Image::Data
|
31
48
|
|
32
49
|
|
@@ -82,18 +99,30 @@ namespace Rays
|
|
82
99
|
if (!self->bitmap)
|
83
100
|
{
|
84
101
|
if (self->texture)
|
102
|
+
{
|
103
|
+
PRINT_MODIFIED_FLAGS("new bitmap from texture");
|
85
104
|
self->bitmap = Bitmap_from(self->texture);
|
105
|
+
}
|
86
106
|
else
|
107
|
+
{
|
108
|
+
PRINT_MODIFIED_FLAGS("new bitmap");
|
87
109
|
self->bitmap = Bitmap(self->width, self->height, self->color_space);
|
110
|
+
}
|
88
111
|
clear_modified_flags(image);
|
89
112
|
}
|
90
|
-
else if (
|
91
|
-
self->texture &&
|
92
|
-
self->texture.modified() &&
|
93
|
-
!Bitmap_get_modified(self->bitmap))
|
113
|
+
else if (self->texture && self->texture.modified())
|
94
114
|
{
|
95
|
-
|
96
|
-
|
115
|
+
if (Bitmap_get_modified(self->bitmap))
|
116
|
+
{
|
117
|
+
invalid_state_error(
|
118
|
+
__FILE__, __LINE__, "bitmap and texture modifications conflicted");
|
119
|
+
}
|
120
|
+
else
|
121
|
+
{
|
122
|
+
PRINT_MODIFIED_FLAGS("bitmap from texture");
|
123
|
+
self->bitmap = Bitmap_from(self->texture);
|
124
|
+
clear_modified_flags(image);
|
125
|
+
}
|
97
126
|
}
|
98
127
|
|
99
128
|
return self->bitmap;
|
@@ -115,9 +144,13 @@ namespace Rays
|
|
115
144
|
if (!self->texture)
|
116
145
|
{
|
117
146
|
if (self->bitmap)
|
147
|
+
{
|
148
|
+
PRINT_MODIFIED_FLAGS("new texture from bitmap");
|
118
149
|
self->texture = Texture(self->bitmap);
|
150
|
+
}
|
119
151
|
else
|
120
152
|
{
|
153
|
+
PRINT_MODIFIED_FLAGS("new texture");
|
121
154
|
self->texture = Texture(self->width, self->height, self->color_space);
|
122
155
|
|
123
156
|
Painter p = image.painter();
|
@@ -127,13 +160,19 @@ namespace Rays
|
|
127
160
|
}
|
128
161
|
clear_modified_flags(&image);
|
129
162
|
}
|
130
|
-
else if (
|
131
|
-
self->bitmap &&
|
132
|
-
Bitmap_get_modified(self->bitmap) &&
|
133
|
-
!self->texture.modified())
|
163
|
+
else if (self->bitmap && Bitmap_get_modified(self->bitmap))
|
134
164
|
{
|
135
|
-
self->texture
|
136
|
-
|
165
|
+
if (self->texture.modified())
|
166
|
+
{
|
167
|
+
invalid_state_error(
|
168
|
+
__FILE__, __LINE__, "texture and bitmap modifications conflicted");
|
169
|
+
}
|
170
|
+
else
|
171
|
+
{
|
172
|
+
PRINT_MODIFIED_FLAGS("texture from bitmap");
|
173
|
+
self->texture = self->bitmap;
|
174
|
+
clear_modified_flags(&image);
|
175
|
+
}
|
137
176
|
}
|
138
177
|
|
139
178
|
return self->texture;
|
@@ -232,15 +271,20 @@ namespace Rays
|
|
232
271
|
}
|
233
272
|
|
234
273
|
Bitmap&
|
235
|
-
Image::bitmap ()
|
274
|
+
Image::bitmap (bool modify)
|
236
275
|
{
|
276
|
+
if (modify)
|
277
|
+
{
|
278
|
+
if (!self->bitmap) get_bitmap(this);
|
279
|
+
Bitmap_set_modified(&self->bitmap);
|
280
|
+
}
|
237
281
|
return get_bitmap(this);
|
238
282
|
}
|
239
283
|
|
240
284
|
const Bitmap&
|
241
285
|
Image::bitmap () const
|
242
286
|
{
|
243
|
-
return
|
287
|
+
return const_cast<Image*>(this)->bitmap();
|
244
288
|
}
|
245
289
|
|
246
290
|
Image::operator bool () const
|
data/src/ios/font.mm
CHANGED
@@ -78,14 +78,12 @@ namespace Rays
|
|
78
78
|
get_font_families ()
|
79
79
|
{
|
80
80
|
static const FontFamilyMap MAP = []() {
|
81
|
-
NSFontManager* fm = NSFontManager.sharedFontManager;
|
82
|
-
|
83
81
|
FontFamilyMap map;
|
84
|
-
for (NSString* family in
|
82
|
+
for (NSString* family in UIFont.familyNames)
|
85
83
|
{
|
86
84
|
FontFamilyMap::mapped_type array;
|
87
|
-
for (
|
88
|
-
array.emplace_back(
|
85
|
+
for (NSString* name in [UIFont fontNamesForFamilyName: family])
|
86
|
+
array.emplace_back(name.UTF8String);
|
89
87
|
map[family.UTF8String] = array;
|
90
88
|
}
|
91
89
|
return map;
|
@@ -163,11 +161,9 @@ namespace Rays
|
|
163
161
|
if (!line)
|
164
162
|
rays_error(__FILE__, __LINE__, "creating CTLineRef failed.");
|
165
163
|
|
166
|
-
coord width
|
167
|
-
width = get_width(str);
|
168
|
-
height = get_height(&ascent);
|
169
|
-
|
170
|
-
height = ceil(height);
|
164
|
+
coord width, height, ascent = 0;
|
165
|
+
width = ceil(get_width(str));
|
166
|
+
height = ceil(get_height(&ascent));
|
171
167
|
ascent = floor(ascent);
|
172
168
|
|
173
169
|
CGRect rect = CGRectMake(x, context_height - height - y, width, height);
|
data/src/ios/helper.h
CHANGED
@@ -15,9 +15,9 @@ namespace Rays
|
|
15
15
|
void safe_cfrelease (CFTypeRef ref);
|
16
16
|
|
17
17
|
|
18
|
-
typedef std::shared_ptr<const __CFString>
|
18
|
+
typedef std::shared_ptr<const __CFString> CFStringPtr;
|
19
19
|
|
20
|
-
|
20
|
+
CFStringPtr cfstring (const char* str);
|
21
21
|
|
22
22
|
|
23
23
|
}// Rays
|
data/src/ios/helper.mm
CHANGED
@@ -13,12 +13,12 @@ namespace Rays
|
|
13
13
|
}
|
14
14
|
|
15
15
|
|
16
|
-
|
16
|
+
CFStringPtr
|
17
17
|
cfstring (const char* str)
|
18
18
|
{
|
19
19
|
CFStringRef ref = CFStringCreateWithCString(
|
20
20
|
kCFAllocatorDefault, str, kCFStringEncodingUTF8);
|
21
|
-
return
|
21
|
+
return CFStringPtr(ref, safe_cfrelease);
|
22
22
|
}
|
23
23
|
|
24
24
|
|
data/src/matrix.cpp
CHANGED
@@ -13,6 +13,44 @@ namespace Rays
|
|
13
13
|
{
|
14
14
|
|
15
15
|
|
16
|
+
Matrix
|
17
|
+
ortho (coord left, coord right, coord top, coord bottom)
|
18
|
+
{
|
19
|
+
return to_rays(glm::ortho(left, right, bottom, top));
|
20
|
+
}
|
21
|
+
|
22
|
+
Matrix
|
23
|
+
ortho (coord left, coord right, coord top, coord bottom, coord near, coord far)
|
24
|
+
{
|
25
|
+
return to_rays(glm::ortho(left, right, bottom, top, near, far));
|
26
|
+
}
|
27
|
+
|
28
|
+
Matrix
|
29
|
+
perspective (float fov_y, float aspect_ratio, coord near, coord far)
|
30
|
+
{
|
31
|
+
return to_rays(glm::perspective(
|
32
|
+
(float) Xot::deg2rad(fov_y), aspect_ratio, near, far));
|
33
|
+
}
|
34
|
+
|
35
|
+
Matrix
|
36
|
+
look_at (
|
37
|
+
coord eye_x, coord eye_y, coord eye_z,
|
38
|
+
coord target_x, coord target_y, coord target_z,
|
39
|
+
coord up_x, coord up_y, coord up_z)
|
40
|
+
{
|
41
|
+
return to_rays(glm::lookAt(
|
42
|
+
Vec3( eye_x, eye_y, eye_z),
|
43
|
+
Vec3(target_x, target_y, target_z),
|
44
|
+
Vec3( up_x, up_y, up_z)));
|
45
|
+
}
|
46
|
+
|
47
|
+
Matrix
|
48
|
+
look_at (const Point& eye, const Point& target, const Point& up)
|
49
|
+
{
|
50
|
+
return to_rays(glm::lookAt(to_glm(eye), to_glm(target), to_glm(up)));
|
51
|
+
}
|
52
|
+
|
53
|
+
|
16
54
|
Matrix::Matrix (coord value)
|
17
55
|
{
|
18
56
|
reset(value);
|
@@ -84,6 +122,13 @@ namespace Rays
|
|
84
122
|
return *this;
|
85
123
|
}
|
86
124
|
|
125
|
+
Matrix&
|
126
|
+
Matrix::transpose ()
|
127
|
+
{
|
128
|
+
to_glm(*this) = glm::transpose(to_glm(*this));
|
129
|
+
return *this;
|
130
|
+
}
|
131
|
+
|
87
132
|
Matrix&
|
88
133
|
Matrix::translate (coord x, coord y, coord z)
|
89
134
|
{
|
data/src/osx/font.mm
CHANGED
@@ -163,11 +163,9 @@ namespace Rays
|
|
163
163
|
if (!line)
|
164
164
|
rays_error(__FILE__, __LINE__, "creating CTLineRef failed.");
|
165
165
|
|
166
|
-
coord width
|
167
|
-
width = get_width(str);
|
168
|
-
height = get_height(&ascent);
|
169
|
-
|
170
|
-
height = ceil(height);
|
166
|
+
coord width, height, ascent = 0;
|
167
|
+
width = ceil(get_width(str));
|
168
|
+
height = ceil(get_height(&ascent));
|
171
169
|
ascent = floor(ascent);
|
172
170
|
|
173
171
|
CGRect rect = CGRectMake(x, context_height - height - y, width, height);
|