rays 0.1.12 → 0.1.13
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 +5 -5
- data/.doc/ext/rays/bitmap.cpp +22 -76
- data/.doc/ext/rays/bounds.cpp +95 -125
- data/.doc/ext/rays/color.cpp +224 -45
- data/.doc/ext/rays/color_space.cpp +137 -45
- data/.doc/ext/rays/defs.cpp +183 -0
- data/.doc/ext/rays/font.cpp +39 -21
- data/.doc/ext/rays/image.cpp +26 -37
- data/.doc/ext/rays/matrix.cpp +186 -29
- data/.doc/ext/rays/native.cpp +12 -6
- data/.doc/ext/rays/noise.cpp +53 -0
- data/.doc/ext/rays/painter.cpp +120 -308
- data/.doc/ext/rays/point.cpp +82 -77
- data/.doc/ext/rays/polygon.cpp +287 -0
- data/.doc/ext/rays/polygon_line.cpp +96 -0
- data/.doc/ext/rays/polyline.cpp +161 -0
- data/.doc/ext/rays/rays.cpp +0 -13
- data/.doc/ext/rays/shader.cpp +83 -9
- data/README.md +1 -1
- data/Rakefile +21 -9
- data/VERSION +1 -1
- data/ext/rays/bitmap.cpp +22 -80
- data/ext/rays/bounds.cpp +100 -128
- data/ext/rays/color.cpp +232 -51
- data/ext/rays/color_space.cpp +140 -46
- data/ext/rays/defs.cpp +183 -0
- data/ext/rays/defs.h +26 -2
- data/ext/rays/extconf.rb +1 -2
- data/ext/rays/font.cpp +39 -22
- data/ext/rays/image.cpp +27 -39
- data/ext/rays/matrix.cpp +198 -30
- data/ext/rays/native.cpp +12 -6
- data/ext/rays/noise.cpp +55 -0
- data/ext/rays/painter.cpp +129 -315
- data/ext/rays/point.cpp +89 -81
- data/ext/rays/polygon.cpp +301 -0
- data/ext/rays/polygon_line.cpp +99 -0
- data/ext/rays/polyline.cpp +170 -0
- data/ext/rays/rays.cpp +0 -14
- data/ext/rays/shader.cpp +84 -9
- data/include/rays.h +10 -2
- data/include/rays/bitmap.h +14 -26
- data/include/rays/bounds.h +21 -4
- data/include/rays/color.h +25 -14
- data/include/rays/color_space.h +11 -8
- data/include/rays/coord.h +114 -0
- data/include/rays/debug.h +22 -0
- data/include/rays/defs.h +3 -0
- data/include/rays/font.h +4 -4
- data/include/rays/image.h +11 -17
- data/include/rays/matrix.h +50 -24
- data/include/rays/noise.h +42 -0
- data/include/rays/opengl.h +2 -50
- data/include/rays/painter.h +57 -99
- data/include/rays/point.h +44 -51
- data/include/rays/polygon.h +164 -0
- data/include/rays/polyline.h +65 -0
- data/include/rays/rays.h +3 -0
- data/include/rays/ruby.h +7 -1
- data/include/rays/ruby/bounds.h +1 -1
- data/include/rays/ruby/color.h +1 -1
- data/include/rays/ruby/color_space.h +1 -1
- data/include/rays/ruby/font.h +1 -1
- data/include/rays/ruby/matrix.h +1 -1
- data/include/rays/ruby/point.h +1 -1
- data/include/rays/ruby/polygon.h +52 -0
- data/include/rays/ruby/polyline.h +41 -0
- data/include/rays/ruby/shader.h +1 -1
- data/include/rays/shader.h +36 -8
- data/lib/rays.rb +6 -1
- data/lib/rays/bitmap.rb +0 -15
- data/lib/rays/bounds.rb +17 -23
- data/lib/rays/color.rb +20 -47
- data/lib/rays/color_space.rb +13 -13
- data/lib/rays/image.rb +2 -6
- data/lib/rays/matrix.rb +28 -0
- data/lib/rays/module.rb +4 -19
- data/lib/rays/painter.rb +60 -97
- data/lib/rays/point.rb +13 -21
- data/lib/rays/polygon.rb +50 -0
- data/lib/rays/polygon_line.rb +36 -0
- data/lib/rays/polyline.rb +32 -0
- data/lib/rays/shader.rb +20 -1
- data/rays.gemspec +5 -7
- data/src/bitmap.h +36 -0
- data/src/bounds.cpp +74 -11
- data/src/color.cpp +58 -23
- data/src/color_space.cpp +50 -32
- data/src/color_space.h +22 -0
- data/src/coord.cpp +170 -0
- data/src/coord.h +35 -0
- data/src/font.cpp +118 -0
- data/src/font.h +64 -0
- data/src/frame_buffer.cpp +37 -71
- data/src/frame_buffer.h +4 -4
- data/src/image.cpp +171 -97
- data/src/image.h +25 -0
- data/src/ios/bitmap.mm +107 -105
- data/src/ios/font.mm +48 -60
- data/src/ios/helper.h +2 -2
- data/src/ios/opengl.mm +19 -4
- data/src/ios/rays.mm +3 -0
- data/src/matrix.cpp +111 -26
- data/src/matrix.h +30 -0
- data/src/noise.cpp +74 -0
- data/src/opengl.cpp +9 -27
- data/src/opengl.h +37 -0
- data/src/osx/bitmap.mm +111 -106
- data/src/osx/font.mm +48 -61
- data/src/osx/helper.h +2 -2
- data/src/osx/opengl.mm +19 -83
- data/src/osx/rays.mm +3 -0
- data/src/painter.cpp +780 -696
- data/src/painter.h +24 -0
- data/src/point.cpp +140 -119
- data/src/polygon.cpp +1100 -0
- data/src/polygon.h +32 -0
- data/src/polyline.cpp +158 -0
- data/src/polyline.h +67 -0
- data/src/render_buffer.cpp +11 -4
- data/src/render_buffer.h +2 -2
- data/src/shader.cpp +163 -106
- data/src/shader.h +38 -0
- data/src/shader_program.cpp +533 -0
- data/src/{program.h → shader_program.h} +28 -16
- data/src/shader_source.cpp +140 -0
- data/src/shader_source.h +52 -0
- data/src/texture.cpp +136 -160
- data/src/texture.h +65 -0
- data/src/win32/bitmap.cpp +62 -52
- data/src/win32/font.cpp +11 -13
- data/src/win32/font.h +24 -0
- data/src/win32/gdi.h +6 -6
- data/test/helper.rb +0 -3
- data/test/test_bitmap.rb +31 -7
- data/test/test_bounds.rb +36 -0
- data/test/test_color.rb +59 -19
- data/test/test_color_space.rb +95 -0
- data/test/test_image.rb +24 -20
- data/test/test_matrix.rb +106 -0
- data/test/test_painter.rb +92 -46
- data/test/test_painter_shape.rb +57 -0
- data/test/test_point.rb +21 -0
- data/test/test_polygon.rb +234 -0
- data/test/test_polygon_line.rb +167 -0
- data/test/test_polyline.rb +145 -0
- data/test/test_shader.rb +9 -9
- metadata +88 -67
- data/.doc/ext/rays/texture.cpp +0 -138
- data/ext/rays/texture.cpp +0 -149
- data/include/rays/ruby/texture.h +0 -41
- data/include/rays/texture.h +0 -71
- data/lib/rays/texture.rb +0 -24
- data/src/program.cpp +0 -648
- data/test/test_texture.rb +0 -27
data/lib/rays/shader.rb
CHANGED
@@ -1,13 +1,32 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
+
require 'xot/block_util'
|
4
5
|
require 'rays/ext'
|
5
6
|
|
6
7
|
|
7
8
|
module Rays
|
8
9
|
|
9
10
|
|
10
|
-
|
11
|
+
class Shader
|
12
|
+
|
13
|
+
def initialize (source = nil, **uniforms, &block)
|
14
|
+
if source
|
15
|
+
setup source
|
16
|
+
uniform **uniforms unless uniforms.empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
Xot::BlockUtil.instance_eval_or_block_call self, &block if block
|
20
|
+
end
|
21
|
+
|
22
|
+
def uniform (name = nil, *args, **uniforms)
|
23
|
+
set_uniform name, *args if name
|
24
|
+
uniforms.each do |key, value|
|
25
|
+
set_uniform key, value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end# Shader
|
11
30
|
|
12
31
|
|
13
32
|
end# Rays
|
data/rays.gemspec
CHANGED
@@ -21,17 +21,15 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.description = 'This library helps you to develop graphics application with OpenGL.'
|
22
22
|
s.version = mod.version
|
23
23
|
|
24
|
-
s.authors = %w[
|
25
|
-
s.email = '
|
24
|
+
s.authors = %w[xordog]
|
25
|
+
s.email = 'xordog@gmail.com'
|
26
26
|
s.homepage = "https://github.com/xord/rays"
|
27
27
|
|
28
28
|
s.platform = Gem::Platform::RUBY
|
29
|
-
s.required_ruby_version = '
|
29
|
+
s.required_ruby_version = '~> 2'
|
30
30
|
|
31
|
-
s.add_runtime_dependency '
|
32
|
-
s.add_runtime_dependency '
|
33
|
-
s.add_runtime_dependency 'rucy'
|
34
|
-
s.add_development_dependency 'gemcutter'
|
31
|
+
s.add_runtime_dependency 'xot', '~> 0.1'
|
32
|
+
s.add_runtime_dependency 'rucy', '~> 0.1'
|
35
33
|
|
36
34
|
s.files = `git ls-files`.split $/
|
37
35
|
s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
|
data/src/bitmap.h
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __RAYS_SRC_BITMAP_H__
|
4
|
+
#define __RAYS_SRC_BITMAP_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <rays/bitmap.h>
|
8
|
+
|
9
|
+
|
10
|
+
namespace Rays
|
11
|
+
{
|
12
|
+
|
13
|
+
|
14
|
+
class Texture;
|
15
|
+
|
16
|
+
class RawFont;
|
17
|
+
|
18
|
+
|
19
|
+
Bitmap Bitmap_from (const Texture& texture);
|
20
|
+
|
21
|
+
void Bitmap_draw_string (
|
22
|
+
Bitmap* bitmap, const RawFont& font, const char* str, coord x, coord y);
|
23
|
+
|
24
|
+
void Bitmap_set_modified (Bitmap* bitmap, bool modified = true);
|
25
|
+
|
26
|
+
bool Bitmap_get_modified (const Bitmap& bitmap);
|
27
|
+
|
28
|
+
void Bitmap_save (const Bitmap& bitmap, const char* path);
|
29
|
+
|
30
|
+
Bitmap Bitmap_load (const char* path);
|
31
|
+
|
32
|
+
|
33
|
+
}// Rays
|
34
|
+
|
35
|
+
|
36
|
+
#endif//EOH
|
data/src/bounds.cpp
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "rays/bounds.h"
|
2
2
|
|
3
3
|
|
4
|
+
#include <float.h>
|
4
5
|
#include <algorithm>
|
5
6
|
#include "rays/exception.h"
|
6
7
|
|
@@ -293,6 +294,22 @@ namespace Rays
|
|
293
294
|
return z + d - 1;
|
294
295
|
}
|
295
296
|
|
297
|
+
void
|
298
|
+
Bounds::set_position (coord x, coord y, coord z)
|
299
|
+
{
|
300
|
+
this->x = x;
|
301
|
+
this->y = y;
|
302
|
+
this->z = z;
|
303
|
+
}
|
304
|
+
|
305
|
+
void
|
306
|
+
Bounds::set_position (const Point& position)
|
307
|
+
{
|
308
|
+
x = position.x;
|
309
|
+
y = position.y;
|
310
|
+
z = position.z;
|
311
|
+
}
|
312
|
+
|
296
313
|
Point&
|
297
314
|
Bounds::position ()
|
298
315
|
{
|
@@ -305,6 +322,20 @@ namespace Rays
|
|
305
322
|
return const_cast<This*>(this)->position();
|
306
323
|
}
|
307
324
|
|
325
|
+
void
|
326
|
+
Bounds::set_size (coord width, coord height, coord depth)
|
327
|
+
{
|
328
|
+
w = width;
|
329
|
+
h = height;
|
330
|
+
d = depth;
|
331
|
+
}
|
332
|
+
|
333
|
+
void
|
334
|
+
Bounds::set_size (const Point& size)
|
335
|
+
{
|
336
|
+
set_size(size.x, size.y, size.z);
|
337
|
+
}
|
338
|
+
|
308
339
|
Point&
|
309
340
|
Bounds::size ()
|
310
341
|
{
|
@@ -326,9 +357,9 @@ namespace Rays
|
|
326
357
|
}
|
327
358
|
|
328
359
|
void
|
329
|
-
Bounds::set_center (const Point&
|
360
|
+
Bounds::set_center (const Point& center)
|
330
361
|
{
|
331
|
-
set_center(
|
362
|
+
set_center(center.x, center.y, center.z);
|
332
363
|
}
|
333
364
|
|
334
365
|
Point
|
@@ -372,12 +403,15 @@ namespace Rays
|
|
372
403
|
Bounds&
|
373
404
|
Bounds::operator &= (const Bounds& rhs)
|
374
405
|
{
|
375
|
-
if (
|
406
|
+
if (!rhs)
|
376
407
|
argument_error(__FILE__, __LINE__);
|
377
408
|
|
378
|
-
|
379
|
-
|
380
|
-
|
409
|
+
if (!*this)
|
410
|
+
invalid_state_error(__FILE__, __LINE__);
|
411
|
+
|
412
|
+
coord x = std::max(this->x, rhs.x);
|
413
|
+
coord y = std::max(this->y, rhs.y);
|
414
|
+
coord z = std::max(this->z, rhs.z);
|
381
415
|
coord w = std::min(this->x + this->w, rhs.x + rhs.w) - x;
|
382
416
|
coord h = std::min(this->y + this->h, rhs.y + rhs.h) - y;
|
383
417
|
coord d = std::min(this->z + this->d, rhs.z + rhs.d) - z;
|
@@ -392,12 +426,11 @@ namespace Rays
|
|
392
426
|
Bounds&
|
393
427
|
Bounds::operator |= (const Bounds& rhs)
|
394
428
|
{
|
395
|
-
if (
|
396
|
-
argument_error(__FILE__, __LINE__);
|
429
|
+
if (!rhs) return *this;
|
397
430
|
|
398
|
-
coord x = std::min(this->x,
|
399
|
-
coord y = std::min(this->y,
|
400
|
-
coord z = std::min(this->z,
|
431
|
+
coord x = std::min(this->x, rhs.x);
|
432
|
+
coord y = std::min(this->y, rhs.y);
|
433
|
+
coord z = std::min(this->z, rhs.z);
|
401
434
|
coord w = std::max(this->x + this->w, rhs.x + rhs.w) - x;
|
402
435
|
coord h = std::max(this->y + this->h, rhs.y + rhs.h) - y;
|
403
436
|
coord d = std::max(this->z + this->d, rhs.z + rhs.d) - z;
|
@@ -405,6 +438,19 @@ namespace Rays
|
|
405
438
|
return reset(x, y, z, w, h, d);
|
406
439
|
}
|
407
440
|
|
441
|
+
Bounds&
|
442
|
+
Bounds::operator |= (const Point& rhs)
|
443
|
+
{
|
444
|
+
coord x = std::min(this->x, rhs.x);
|
445
|
+
coord y = std::min(this->y, rhs.y);
|
446
|
+
coord z = std::min(this->z, rhs.z);
|
447
|
+
coord w = std::max(this->x + this->w, rhs.x) - x;
|
448
|
+
coord h = std::max(this->y + this->h, rhs.y) - y;
|
449
|
+
coord d = std::max(this->z + this->d, rhs.z) - z;
|
450
|
+
|
451
|
+
return reset(x, y, z, w, h, d);
|
452
|
+
}
|
453
|
+
|
408
454
|
bool
|
409
455
|
operator == (const Bounds& lhs, const Bounds& rhs)
|
410
456
|
{
|
@@ -439,5 +485,22 @@ namespace Rays
|
|
439
485
|
return t;
|
440
486
|
}
|
441
487
|
|
488
|
+
Bounds
|
489
|
+
operator | (const Bounds& lhs, const Point& rhs)
|
490
|
+
{
|
491
|
+
Bounds t = lhs;
|
492
|
+
t |= rhs;
|
493
|
+
return t;
|
494
|
+
}
|
495
|
+
|
496
|
+
|
497
|
+
Bounds
|
498
|
+
invalid_bounds ()
|
499
|
+
{
|
500
|
+
coord max = FLT_MAX / 2;
|
501
|
+
coord size = -FLT_MAX;
|
502
|
+
return Bounds(max, max, max, size, size, size);
|
503
|
+
}
|
504
|
+
|
442
505
|
|
443
506
|
}// Rays
|
data/src/color.cpp
CHANGED
@@ -2,44 +2,69 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
#include <limits.h>
|
5
|
+
#include <glm/gtx/color_space.hpp>
|
5
6
|
#include <xot/util.h>
|
6
7
|
#include "rays/exception.h"
|
7
8
|
#include "rays/color_space.h"
|
9
|
+
#include "coord.h"
|
8
10
|
|
9
11
|
|
10
12
|
namespace Rays
|
11
13
|
{
|
12
14
|
|
13
15
|
|
14
|
-
Color
|
16
|
+
Color
|
17
|
+
gray (float gray, float alpha)
|
15
18
|
{
|
16
|
-
|
19
|
+
return Color(gray, alpha);
|
17
20
|
}
|
18
21
|
|
19
|
-
Color
|
22
|
+
Color
|
23
|
+
gray8 (int gray, int alpha)
|
20
24
|
{
|
21
|
-
|
25
|
+
Color c;
|
26
|
+
c.reset8(gray, alpha);
|
27
|
+
return c;
|
22
28
|
}
|
23
29
|
|
24
|
-
Color
|
30
|
+
Color
|
31
|
+
rgb (float red, float green, float blue, float alpha)
|
25
32
|
{
|
26
|
-
|
33
|
+
return Color(red, green, blue, alpha);
|
27
34
|
}
|
28
35
|
|
29
36
|
Color
|
30
|
-
|
37
|
+
rgb8 (int red, int green, int blue, int alpha)
|
31
38
|
{
|
32
39
|
Color c;
|
33
|
-
c.reset8(
|
40
|
+
c.reset8(red, green, blue, alpha);
|
34
41
|
return c;
|
35
42
|
}
|
36
43
|
|
37
44
|
Color
|
38
|
-
|
45
|
+
hsv (float hue, float saturation, float value, float alpha)
|
39
46
|
{
|
40
|
-
|
41
|
-
|
42
|
-
|
47
|
+
hue = fmod(hue, 1.f);
|
48
|
+
if (hue < 0) hue += 1.f;
|
49
|
+
|
50
|
+
auto c = glm::rgbColor(Vec3(hue * 360.f, saturation, value));
|
51
|
+
return Color(c[0], c[1], c[2], alpha);
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
Color::Color (float gray, float alpha)
|
56
|
+
{
|
57
|
+
reset(gray, alpha);
|
58
|
+
}
|
59
|
+
|
60
|
+
Color::Color (float red, float green, float blue, float alpha)
|
61
|
+
{
|
62
|
+
reset(red, green, blue, alpha);
|
63
|
+
}
|
64
|
+
|
65
|
+
Color::Color (void* pixel, const ColorSpace& cs)
|
66
|
+
{
|
67
|
+
reset(pixel, cs);
|
43
68
|
}
|
44
69
|
|
45
70
|
Color
|
@@ -57,15 +82,12 @@ namespace Rays
|
|
57
82
|
Color&
|
58
83
|
Color::reset (float red, float green, float blue, float alpha)
|
59
84
|
{
|
60
|
-
|
61
|
-
this->green = green;
|
62
|
-
this->blue = blue;
|
63
|
-
this->alpha = alpha;
|
85
|
+
Super::reset(red, green, blue, alpha);
|
64
86
|
return *this;
|
65
87
|
}
|
66
88
|
|
67
89
|
Color&
|
68
|
-
Color::reset8 (
|
90
|
+
Color::reset8 (int gray, int alpha)
|
69
91
|
{
|
70
92
|
float g = uchar2float(gray);
|
71
93
|
float a = uchar2float(alpha);
|
@@ -73,12 +95,13 @@ namespace Rays
|
|
73
95
|
}
|
74
96
|
|
75
97
|
Color&
|
76
|
-
Color::reset8 (
|
98
|
+
Color::reset8 (int red, int green, int blue, int alpha)
|
77
99
|
{
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
100
|
+
Super::reset(
|
101
|
+
uchar2float(red),
|
102
|
+
uchar2float(green),
|
103
|
+
uchar2float(blue),
|
104
|
+
uchar2float(alpha));
|
82
105
|
return *this;
|
83
106
|
}
|
84
107
|
|
@@ -211,7 +234,7 @@ namespace Rays
|
|
211
234
|
|
212
235
|
Color::operator bool () const
|
213
236
|
{
|
214
|
-
return
|
237
|
+
return alpha > 0;
|
215
238
|
}
|
216
239
|
|
217
240
|
bool
|
@@ -220,5 +243,17 @@ namespace Rays
|
|
220
243
|
return !operator bool();
|
221
244
|
}
|
222
245
|
|
246
|
+
bool
|
247
|
+
operator == (const Color& lhs, const Color& rhs)
|
248
|
+
{
|
249
|
+
return lhs.r == rhs.r && lhs.g == rhs.g && lhs.b == rhs.b && lhs.a == rhs.a;
|
250
|
+
}
|
251
|
+
|
252
|
+
bool
|
253
|
+
operator != (const Color& lhs, const Color& rhs)
|
254
|
+
{
|
255
|
+
return !operator==(lhs, rhs);
|
256
|
+
}
|
257
|
+
|
223
258
|
|
224
259
|
}// Rays
|
data/src/color_space.cpp
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#include "
|
1
|
+
#include "color_space.h"
|
2
2
|
|
3
3
|
|
4
4
|
#include <assert.h>
|
@@ -13,13 +13,15 @@ namespace Rays
|
|
13
13
|
enum
|
14
14
|
{
|
15
15
|
|
16
|
-
|
16
|
+
FIRST = GRAY_8, LAST = ABGR_float,
|
17
17
|
|
18
|
-
|
18
|
+
GRAY_FIRST = GRAY_8, GRAY_LAST = GRAY_float,
|
19
19
|
|
20
|
-
|
20
|
+
ALPHA_FIRST = ALPHA_8, ALPHA_LAST = ALPHA_float,
|
21
21
|
|
22
|
-
|
22
|
+
RGB_FIRST = RGB_888, RGB_LAST = ABGR_float,
|
23
|
+
|
24
|
+
RGB_FLOAT_FIRST = RGB_float, RGB_FLOAT_LAST = ABGR_float,
|
23
25
|
|
24
26
|
};
|
25
27
|
|
@@ -45,10 +47,13 @@ namespace Rays
|
|
45
47
|
{
|
46
48
|
static const int BPPS[] =
|
47
49
|
{
|
48
|
-
0,
|
49
|
-
8, 16, 24, 32, 32,
|
50
|
-
8,
|
51
|
-
|
50
|
+
0, // UNKNOWN
|
51
|
+
8, 16, 24, 32, 32, // GRAY
|
52
|
+
8, 16, 24, 32, 32, // ALPHA
|
53
|
+
8, 8, 8, 8, 8, // RGB(A),
|
54
|
+
8, 8, 8, 8, 8, // BGR(A)
|
55
|
+
32, 32, 32, // RGB(A) float
|
56
|
+
32, 32, 32, // BGR(A) float
|
52
57
|
};
|
53
58
|
if (type_ < 0 || COLORSPACE_LAST <= type_) return BPPS[COLORSPACE_UNKNOWN];
|
54
59
|
return BPPS[type_];
|
@@ -67,6 +72,7 @@ namespace Rays
|
|
67
72
|
{
|
68
73
|
0, // UNKNOWN
|
69
74
|
8, 16, 24, 32, 32, // GRAY
|
75
|
+
8, 16, 24, 32, 32, // ALPHA
|
70
76
|
24, 32, 32, 32, 32, // RGB(A)
|
71
77
|
24, 32, 32, 32, 32, // BGR(A)
|
72
78
|
96, 128, 128, // RGB(A) float
|
@@ -91,7 +97,13 @@ namespace Rays
|
|
91
97
|
bool
|
92
98
|
ColorSpace::is_gray () const
|
93
99
|
{
|
94
|
-
return GRAY_FIRST
|
100
|
+
return GRAY_FIRST <= (int) type_ && (int) type_ <= GRAY_LAST;
|
101
|
+
}
|
102
|
+
|
103
|
+
bool
|
104
|
+
ColorSpace::is_alpha () const
|
105
|
+
{
|
106
|
+
return ALPHA_FIRST <= (int) type_ && (int) type_ <= ALPHA_LAST;
|
95
107
|
}
|
96
108
|
|
97
109
|
bool
|
@@ -114,14 +126,15 @@ namespace Rays
|
|
114
126
|
ColorSpace::is_float () const
|
115
127
|
{
|
116
128
|
return
|
117
|
-
type_ == GRAY_float ||
|
118
|
-
(
|
129
|
+
type_ == GRAY_float || type_ == ALPHA_float ||
|
130
|
+
(RGB_FLOAT_FIRST <= (int) type_ && (int) type_ <= RGB_FLOAT_LAST);
|
119
131
|
}
|
120
132
|
|
121
133
|
bool
|
122
134
|
ColorSpace::has_alpha () const
|
123
135
|
{
|
124
136
|
return
|
137
|
+
(ALPHA_FIRST <= type_ && type_ <= ALPHA_LAST) ||
|
125
138
|
type_ == RGBA_8888 || type_ == ARGB_8888 ||
|
126
139
|
type_ == BGRA_8888 || type_ == ABGR_8888 ||
|
127
140
|
type_ == RGBA_float || type_ == ARGB_float ||
|
@@ -170,51 +183,56 @@ namespace Rays
|
|
170
183
|
return premult;
|
171
184
|
}
|
172
185
|
|
186
|
+
ColorSpace::operator bool () const
|
187
|
+
{
|
188
|
+
return FIRST <= (int) type_ && (int) type_ <= LAST;
|
189
|
+
}
|
190
|
+
|
191
|
+
bool
|
192
|
+
ColorSpace::operator ! () const
|
193
|
+
{
|
194
|
+
return !operator bool();
|
195
|
+
}
|
196
|
+
|
197
|
+
|
173
198
|
void
|
174
|
-
|
199
|
+
ColorSpace_get_gl_format_and_type (
|
200
|
+
GLenum* format, GLenum* type, const ColorSpace& cs)
|
175
201
|
{
|
176
202
|
if (!format && !type)
|
177
203
|
argument_error(__FILE__, __LINE__);
|
178
204
|
|
179
|
-
if (
|
205
|
+
if (!cs)
|
180
206
|
invalid_state_error(__FILE__, __LINE__);
|
181
207
|
|
182
208
|
if (format)
|
183
209
|
{
|
184
|
-
if (is_rgb())
|
210
|
+
if (cs.is_rgb()) *format = cs.has_alpha() ? GL_RGBA : GL_RGB;
|
185
211
|
#ifndef IOS
|
186
|
-
else if (is_bgr())
|
212
|
+
else if (cs.is_bgr()) *format = cs.has_alpha() ? GL_BGRA : GL_BGR;
|
187
213
|
#endif
|
188
|
-
else if (is_gray())
|
189
|
-
else
|
214
|
+
else if (cs.is_gray()) *format = GL_LUMINANCE;
|
215
|
+
else if (cs.is_alpha()) *format = GL_ALPHA;
|
216
|
+
else
|
217
|
+
rays_error(__FILE__, __LINE__, "invalid color space.");
|
190
218
|
}
|
191
219
|
|
192
220
|
if (type)
|
193
221
|
{
|
194
|
-
if (is_float())
|
222
|
+
if (cs.is_float())
|
195
223
|
*type = GL_FLOAT;
|
196
|
-
else switch (bpc())
|
224
|
+
else switch (cs.bpc())
|
197
225
|
{
|
198
226
|
case 8: *type = GL_UNSIGNED_BYTE; break;
|
199
227
|
case 16: *type = GL_UNSIGNED_SHORT; break;
|
200
228
|
#ifndef IOS
|
201
229
|
case 32: *type = GL_UNSIGNED_INT; break;
|
202
230
|
#endif
|
203
|
-
default:
|
231
|
+
default:
|
232
|
+
rays_error(__FILE__, __LINE__, "invalid bpc.");
|
204
233
|
}
|
205
234
|
}
|
206
235
|
}
|
207
236
|
|
208
|
-
ColorSpace::operator bool () const
|
209
|
-
{
|
210
|
-
return FIRST <= (int) type_ && (int) type_ <= LAST;
|
211
|
-
}
|
212
|
-
|
213
|
-
bool
|
214
|
-
ColorSpace::operator ! () const
|
215
|
-
{
|
216
|
-
return !operator bool();
|
217
|
-
}
|
218
|
-
|
219
237
|
|
220
238
|
}// Rays
|