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/src/color_space.h
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __RAYS_SRC_COLOR_SPACE_H__
|
4
|
+
#define __RAYS_SRC_COLOR_SPACE_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <rays/color_space.h>
|
8
|
+
#include "opengl.h"
|
9
|
+
|
10
|
+
|
11
|
+
namespace Rays
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
void ColorSpace_get_gl_format_and_type (
|
16
|
+
GLenum* format, GLenum* type, const ColorSpace& cs);
|
17
|
+
|
18
|
+
|
19
|
+
}// Rays
|
20
|
+
|
21
|
+
|
22
|
+
#endif//EOH
|
data/src/coord.cpp
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
#include "coord.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <xot/string.h>
|
5
|
+
#include "rays/exception.h"
|
6
|
+
|
7
|
+
|
8
|
+
namespace Rays
|
9
|
+
{
|
10
|
+
|
11
|
+
|
12
|
+
Coord2&
|
13
|
+
Coord2::reset (coord value)
|
14
|
+
{
|
15
|
+
return reset(value, value);
|
16
|
+
}
|
17
|
+
|
18
|
+
Coord2&
|
19
|
+
Coord2::reset (coord x, coord y)
|
20
|
+
{
|
21
|
+
this->x = x;
|
22
|
+
this->y = y;
|
23
|
+
return *this;
|
24
|
+
}
|
25
|
+
|
26
|
+
size_t
|
27
|
+
Coord2::size () const
|
28
|
+
{
|
29
|
+
return SIZE;
|
30
|
+
}
|
31
|
+
|
32
|
+
String
|
33
|
+
Coord2::inspect () const
|
34
|
+
{
|
35
|
+
return Xot::stringf("x=%f y=%f", x, y);
|
36
|
+
}
|
37
|
+
|
38
|
+
coord&
|
39
|
+
Coord2::operator [] (size_t index)
|
40
|
+
{
|
41
|
+
if (index >= 2)
|
42
|
+
argument_error(__FILE__, __LINE__);
|
43
|
+
|
44
|
+
return array[index];
|
45
|
+
}
|
46
|
+
|
47
|
+
const coord&
|
48
|
+
Coord2::operator [] (size_t index) const
|
49
|
+
{
|
50
|
+
return const_cast<Coord2*>(this)->operator[](index);
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
Coord3&
|
55
|
+
Coord3::operator = (const Coord2& rhs)
|
56
|
+
{
|
57
|
+
x = rhs.x;
|
58
|
+
y = rhs.y;
|
59
|
+
z = 0;
|
60
|
+
return *this;
|
61
|
+
}
|
62
|
+
|
63
|
+
Coord3&
|
64
|
+
Coord3::reset (coord value)
|
65
|
+
{
|
66
|
+
return reset(value, value);
|
67
|
+
}
|
68
|
+
|
69
|
+
Coord3&
|
70
|
+
Coord3::reset (coord x, coord y, coord z)
|
71
|
+
{
|
72
|
+
this->x = x;
|
73
|
+
this->y = y;
|
74
|
+
this->z = z;
|
75
|
+
return *this;
|
76
|
+
}
|
77
|
+
|
78
|
+
size_t
|
79
|
+
Coord3::size () const
|
80
|
+
{
|
81
|
+
return SIZE;
|
82
|
+
}
|
83
|
+
|
84
|
+
String
|
85
|
+
Coord3::inspect () const
|
86
|
+
{
|
87
|
+
return Xot::stringf("x=%f y=%f z=%f", x, y, z);
|
88
|
+
}
|
89
|
+
|
90
|
+
coord&
|
91
|
+
Coord3::operator [] (size_t index)
|
92
|
+
{
|
93
|
+
if (index >= 3)
|
94
|
+
argument_error(__FILE__, __LINE__);
|
95
|
+
|
96
|
+
return array[index];
|
97
|
+
}
|
98
|
+
|
99
|
+
const coord&
|
100
|
+
Coord3::operator [] (size_t index) const
|
101
|
+
{
|
102
|
+
return const_cast<Coord3*>(this)->operator[](index);
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
Coord4&
|
107
|
+
Coord4::operator = (const Coord2& rhs)
|
108
|
+
{
|
109
|
+
x = rhs.x;
|
110
|
+
y = rhs.y;
|
111
|
+
z = 0;
|
112
|
+
w = 1;
|
113
|
+
return *this;
|
114
|
+
}
|
115
|
+
|
116
|
+
Coord4&
|
117
|
+
Coord4::operator = (const Coord3& rhs)
|
118
|
+
{
|
119
|
+
x = rhs.x;
|
120
|
+
y = rhs.y;
|
121
|
+
z = rhs.z;
|
122
|
+
w = 1;
|
123
|
+
return *this;
|
124
|
+
}
|
125
|
+
|
126
|
+
Coord4&
|
127
|
+
Coord4::reset (coord value)
|
128
|
+
{
|
129
|
+
return reset(value, value, value);
|
130
|
+
}
|
131
|
+
|
132
|
+
Coord4&
|
133
|
+
Coord4::reset (coord x, coord y, coord z, coord w)
|
134
|
+
{
|
135
|
+
this->x = x;
|
136
|
+
this->y = y;
|
137
|
+
this->z = z;
|
138
|
+
this->w = w;
|
139
|
+
return *this;
|
140
|
+
}
|
141
|
+
|
142
|
+
size_t
|
143
|
+
Coord4::size () const
|
144
|
+
{
|
145
|
+
return SIZE;
|
146
|
+
}
|
147
|
+
|
148
|
+
String
|
149
|
+
Coord4::inspect () const
|
150
|
+
{
|
151
|
+
return Xot::stringf("x=%f y=%f z=%f w=%f", x, y, z, w);
|
152
|
+
}
|
153
|
+
|
154
|
+
coord&
|
155
|
+
Coord4::operator [] (size_t index)
|
156
|
+
{
|
157
|
+
if (index >= 4)
|
158
|
+
argument_error(__FILE__, __LINE__);
|
159
|
+
|
160
|
+
return array[index];
|
161
|
+
}
|
162
|
+
|
163
|
+
const coord&
|
164
|
+
Coord4::operator [] (size_t index) const
|
165
|
+
{
|
166
|
+
return const_cast<Coord4*>(this)->operator[](index);
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
}// Rays
|
data/src/coord.h
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __RAYS_SRC_COORD_H__
|
4
|
+
#define __RAYS_SRC_COORD_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <glm/vec2.hpp>
|
8
|
+
#include <glm/vec3.hpp>
|
9
|
+
#include <rays/coord.h>
|
10
|
+
|
11
|
+
|
12
|
+
namespace Rays
|
13
|
+
{
|
14
|
+
|
15
|
+
|
16
|
+
typedef glm::tvec3<coord, glm::defaultp> Vec3;
|
17
|
+
|
18
|
+
typedef glm::tvec4<coord, glm::defaultp> Vec4;
|
19
|
+
|
20
|
+
|
21
|
+
inline Vec3& to_glm ( Coord3& val) {return *( Vec3*) &val;}
|
22
|
+
|
23
|
+
inline const Vec3& to_glm (const Coord3& val) {return *(const Vec3*) &val;}
|
24
|
+
|
25
|
+
template <typename T>
|
26
|
+
inline T& to_rays ( Vec3& val) {return *( T*) &val;}
|
27
|
+
|
28
|
+
template <typename T>
|
29
|
+
inline const T& to_rays (const Vec3& val) {return *(const T*) &val;}
|
30
|
+
|
31
|
+
|
32
|
+
}// Rays
|
33
|
+
|
34
|
+
|
35
|
+
#endif//EOH
|
data/src/font.cpp
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
#include "font.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <assert.h>
|
5
|
+
|
6
|
+
|
7
|
+
namespace Rays
|
8
|
+
{
|
9
|
+
|
10
|
+
|
11
|
+
struct Font::Data
|
12
|
+
{
|
13
|
+
|
14
|
+
RawFont rawfont;
|
15
|
+
|
16
|
+
mutable RawFont rawfont_for_pixel_density;
|
17
|
+
|
18
|
+
mutable float for_pixel_density = 1;
|
19
|
+
|
20
|
+
const RawFont& get_raw (float pixel_density) const
|
21
|
+
{
|
22
|
+
assert(pixel_density > 0);
|
23
|
+
|
24
|
+
if (!rawfont || pixel_density == 1)
|
25
|
+
return rawfont;
|
26
|
+
|
27
|
+
if (pixel_density != for_pixel_density)
|
28
|
+
{
|
29
|
+
rawfont_for_pixel_density =
|
30
|
+
RawFont(rawfont.name(), rawfont.size() * pixel_density);
|
31
|
+
for_pixel_density = pixel_density;
|
32
|
+
}
|
33
|
+
|
34
|
+
return rawfont_for_pixel_density;
|
35
|
+
}
|
36
|
+
|
37
|
+
};// Font::Data
|
38
|
+
|
39
|
+
|
40
|
+
const Font&
|
41
|
+
default_font ()
|
42
|
+
{
|
43
|
+
static const Font FONT(NULL);
|
44
|
+
return FONT;
|
45
|
+
}
|
46
|
+
|
47
|
+
const RawFont&
|
48
|
+
Font_get_raw (const Font& font, float pixel_density)
|
49
|
+
{
|
50
|
+
return font.self->get_raw(pixel_density);
|
51
|
+
}
|
52
|
+
|
53
|
+
coord
|
54
|
+
Font_get_width (const Font& font, float pixel_density, const char* str)
|
55
|
+
{
|
56
|
+
return Font_get_raw(font, pixel_density).get_width(str);
|
57
|
+
}
|
58
|
+
|
59
|
+
coord
|
60
|
+
Font_get_height (
|
61
|
+
const Font& font, float pixel_density,
|
62
|
+
coord* ascent, coord* descent, coord* leading)
|
63
|
+
{
|
64
|
+
return Font_get_raw(font, pixel_density)
|
65
|
+
.get_height(ascent, descent, leading);
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
Font::Font ()
|
70
|
+
{
|
71
|
+
}
|
72
|
+
|
73
|
+
Font::Font (const char* name, coord size)
|
74
|
+
{
|
75
|
+
self->rawfont = RawFont(name, size);
|
76
|
+
}
|
77
|
+
|
78
|
+
Font::~Font ()
|
79
|
+
{
|
80
|
+
}
|
81
|
+
|
82
|
+
String
|
83
|
+
Font::name () const
|
84
|
+
{
|
85
|
+
return self->rawfont.name();
|
86
|
+
}
|
87
|
+
|
88
|
+
coord
|
89
|
+
Font::size () const
|
90
|
+
{
|
91
|
+
return self->rawfont.size();
|
92
|
+
}
|
93
|
+
|
94
|
+
coord
|
95
|
+
Font::get_width (const char* str) const
|
96
|
+
{
|
97
|
+
return self->rawfont.get_width(str);
|
98
|
+
}
|
99
|
+
|
100
|
+
coord
|
101
|
+
Font::get_height (coord* ascent, coord* descent, coord* leading) const
|
102
|
+
{
|
103
|
+
return self->rawfont.get_height(ascent, descent, leading);
|
104
|
+
}
|
105
|
+
|
106
|
+
Font::operator bool () const
|
107
|
+
{
|
108
|
+
return !!self->rawfont;
|
109
|
+
}
|
110
|
+
|
111
|
+
bool
|
112
|
+
Font::operator ! () const
|
113
|
+
{
|
114
|
+
return !operator bool();
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
}// Rays
|
data/src/font.h
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#pragma once
|
3
|
+
#ifndef __RAYS_SRC_FONT_H__
|
4
|
+
#define __RAYS_SRC_FONT_H__
|
5
|
+
|
6
|
+
|
7
|
+
#include <rays/defs.h>
|
8
|
+
#include <rays/font.h>
|
9
|
+
|
10
|
+
|
11
|
+
namespace Rays
|
12
|
+
{
|
13
|
+
|
14
|
+
|
15
|
+
class RawFont
|
16
|
+
{
|
17
|
+
|
18
|
+
public:
|
19
|
+
|
20
|
+
RawFont ();
|
21
|
+
|
22
|
+
RawFont (const char* name, coord size = 0);
|
23
|
+
|
24
|
+
~RawFont ();
|
25
|
+
|
26
|
+
void draw_string (
|
27
|
+
void* context, coord context_height,
|
28
|
+
const char* str, coord x, coord y) const;
|
29
|
+
|
30
|
+
String name () const;
|
31
|
+
|
32
|
+
coord size () const;
|
33
|
+
|
34
|
+
coord get_width (const char* str) const;
|
35
|
+
|
36
|
+
coord get_height (
|
37
|
+
coord* ascent = NULL,
|
38
|
+
coord* descent = NULL,
|
39
|
+
coord* leading = NULL) const;
|
40
|
+
|
41
|
+
operator bool () const;
|
42
|
+
|
43
|
+
bool operator ! () const;
|
44
|
+
|
45
|
+
struct Data;
|
46
|
+
|
47
|
+
Xot::PSharedImpl<Data> self;
|
48
|
+
|
49
|
+
};// RawFont
|
50
|
+
|
51
|
+
|
52
|
+
const RawFont& Font_get_raw (const Font& font, float pixel_density);
|
53
|
+
|
54
|
+
coord Font_get_width (const Font& font, float pixel_density, const char* str);
|
55
|
+
|
56
|
+
coord Font_get_height (
|
57
|
+
const Font& font, float pixel_density,
|
58
|
+
coord* ascent = NULL, coord* descent = NULL, coord* leading = NULL);
|
59
|
+
|
60
|
+
|
61
|
+
}// Rays
|
62
|
+
|
63
|
+
|
64
|
+
#endif//EOH
|
data/src/frame_buffer.cpp
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
|
4
4
|
#include <vector>
|
5
5
|
#include "rays/exception.h"
|
6
|
-
#include "rays/
|
7
|
-
#include "
|
6
|
+
#include "rays/debug.h"
|
7
|
+
#include "texture.h"
|
8
8
|
#include "render_buffer.h"
|
9
9
|
|
10
10
|
|
@@ -15,17 +15,12 @@ namespace Rays
|
|
15
15
|
struct FrameBuffer::Data
|
16
16
|
{
|
17
17
|
|
18
|
-
int id;
|
18
|
+
int id = -1;
|
19
19
|
|
20
20
|
Texture texture;
|
21
21
|
|
22
22
|
RenderBuffer render_buffer;
|
23
23
|
|
24
|
-
Data ()
|
25
|
-
: id(-1)
|
26
|
-
{
|
27
|
-
}
|
28
|
-
|
29
24
|
~Data ()
|
30
25
|
{
|
31
26
|
clear();
|
@@ -37,7 +32,7 @@ namespace Rays
|
|
37
32
|
|
38
33
|
GLuint id_ = 0;
|
39
34
|
glGenFramebuffers(1, &id_);
|
40
|
-
|
35
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
41
36
|
|
42
37
|
id = id_;
|
43
38
|
}
|
@@ -51,7 +46,7 @@ namespace Rays
|
|
51
46
|
{
|
52
47
|
GLuint id_ = id;
|
53
48
|
glDeleteFramebuffers(1, &id_);
|
54
|
-
|
49
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
55
50
|
}
|
56
51
|
|
57
52
|
id = -1;
|
@@ -83,21 +78,17 @@ namespace Rays
|
|
83
78
|
{
|
84
79
|
switch (status)
|
85
80
|
{
|
81
|
+
case GL_FRAMEBUFFER_UNSUPPORTED: return "GL_FRAMEBUFFER_UNSUPPORTED";
|
82
|
+
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT";
|
83
|
+
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";
|
84
|
+
case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE";
|
86
85
|
#ifdef IOS
|
87
|
-
case
|
88
|
-
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES";
|
89
|
-
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES";
|
90
|
-
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES";
|
91
|
-
case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES: return "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES";
|
86
|
+
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS";
|
92
87
|
#else
|
93
|
-
case GL_FRAMEBUFFER_UNDEFINED:
|
94
|
-
case
|
95
|
-
case
|
96
|
-
case
|
97
|
-
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER";
|
98
|
-
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER";
|
99
|
-
case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE";
|
100
|
-
//case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS";
|
88
|
+
case GL_FRAMEBUFFER_UNDEFINED: return "GL_FRAMEBUFFER_UNDEFINED";
|
89
|
+
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER";
|
90
|
+
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER";
|
91
|
+
//case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS";
|
101
92
|
#endif
|
102
93
|
}
|
103
94
|
return "UNKNOWN STATUS";
|
@@ -114,14 +105,13 @@ namespace Rays
|
|
114
105
|
FrameBufferBinder binder(id());
|
115
106
|
|
116
107
|
glFramebufferTexture2D(
|
117
|
-
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
118
|
-
|
119
|
-
check_error(__FILE__, __LINE__);
|
108
|
+
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id(), 0);
|
109
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
120
110
|
|
121
111
|
self->texture = texture;
|
122
112
|
|
123
113
|
#if 0
|
124
|
-
int w = texture.
|
114
|
+
int w = texture.reserved_width(), h = texture.reserved_height();
|
125
115
|
if (
|
126
116
|
w != self->render_buffer.width() ||
|
127
117
|
h != self->render_buffer.height())
|
@@ -131,7 +121,7 @@ namespace Rays
|
|
131
121
|
glFramebufferRenderbuffer(
|
132
122
|
GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
|
133
123
|
GL_RENDERBUFFER, rb.id());
|
134
|
-
|
124
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
135
125
|
|
136
126
|
self->render_buffer = rb;
|
137
127
|
}
|
@@ -185,7 +175,9 @@ namespace Rays
|
|
185
175
|
return false;
|
186
176
|
|
187
177
|
const RenderBuffer& r = self->render_buffer;
|
188
|
-
|
178
|
+
int w = t.reserved_width();
|
179
|
+
int h = t.reserved_height();
|
180
|
+
if (r && (r.width() != w || r.height() != h))
|
189
181
|
return false;
|
190
182
|
|
191
183
|
return true;
|
@@ -201,12 +193,12 @@ namespace Rays
|
|
201
193
|
FrameBufferBinder::FrameBufferBinder (GLuint id)
|
202
194
|
: id(id)
|
203
195
|
{
|
204
|
-
|
196
|
+
FrameBuffer_bind(id);
|
205
197
|
}
|
206
198
|
|
207
199
|
FrameBufferBinder::~FrameBufferBinder ()
|
208
200
|
{
|
209
|
-
|
201
|
+
FrameBuffer_unbind();
|
210
202
|
}
|
211
203
|
|
212
204
|
GLuint
|
@@ -216,59 +208,33 @@ namespace Rays
|
|
216
208
|
}
|
217
209
|
|
218
210
|
|
219
|
-
|
220
|
-
{
|
221
|
-
|
222
|
-
GLuint draw, read;
|
223
|
-
|
224
|
-
FrameBufferID ()
|
225
|
-
: draw(0), read(0)
|
226
|
-
{
|
227
|
-
}
|
228
|
-
|
229
|
-
FrameBufferID (GLuint draw, GLuint read)
|
230
|
-
: draw(draw), read(read)
|
231
|
-
{
|
232
|
-
}
|
233
|
-
|
234
|
-
};// FrameBufferID
|
211
|
+
static std::vector<GLuint> frame_buffer_bind_stack;
|
235
212
|
|
236
|
-
static std::vector<FrameBufferID> frame_buffer_bind_stack;
|
237
213
|
|
238
|
-
|
239
|
-
|
240
|
-
bind_frame_buffer (GLuint draw, GLuint read)
|
214
|
+
void
|
215
|
+
FrameBuffer_bind (GLuint id)
|
241
216
|
{
|
242
|
-
|
243
|
-
glGetIntegerv(
|
244
|
-
|
245
|
-
check_error(__FILE__, __LINE__);
|
217
|
+
GLuint current = 0;
|
218
|
+
glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) ¤t);
|
219
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
246
220
|
|
247
|
-
frame_buffer_bind_stack.push_back(
|
221
|
+
frame_buffer_bind_stack.push_back(current);
|
248
222
|
|
249
|
-
glBindFramebuffer(
|
250
|
-
|
251
|
-
check_error(__FILE__, __LINE__);
|
252
|
-
}
|
253
|
-
|
254
|
-
void
|
255
|
-
bind_frame_buffer (GLuint id)
|
256
|
-
{
|
257
|
-
bind_frame_buffer(id, id);
|
223
|
+
glBindFramebuffer(GL_FRAMEBUFFER, id);
|
224
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
258
225
|
}
|
259
226
|
|
260
227
|
void
|
261
|
-
|
228
|
+
FrameBuffer_unbind ()
|
262
229
|
{
|
263
230
|
if (frame_buffer_bind_stack.empty())
|
264
|
-
rays_error(__FILE__, __LINE__, "frame_buffer_bind_stack
|
231
|
+
rays_error(__FILE__, __LINE__, "frame_buffer_bind_stack underflow.");
|
265
232
|
|
266
|
-
|
233
|
+
GLuint id = frame_buffer_bind_stack.back();
|
267
234
|
frame_buffer_bind_stack.pop_back();
|
268
235
|
|
269
|
-
glBindFramebuffer(
|
270
|
-
|
271
|
-
check_error(__FILE__, __LINE__);
|
236
|
+
glBindFramebuffer(GL_FRAMEBUFFER, id);
|
237
|
+
OpenGL_check_error(__FILE__, __LINE__);
|
272
238
|
}
|
273
239
|
|
274
240
|
|