Skip to content

Commit c1a6376

Browse files
committed
stuff
1 parent aaffdd7 commit c1a6376

File tree

1 file changed

+43
-39
lines changed

1 file changed

+43
-39
lines changed

src/ruis/render/opengl/frame_buffer.cpp

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -43,55 +43,59 @@ frame_buffer::frame_buffer(
4343
std::move(stencil)
4444
)
4545
{
46-
glGenFramebuffers(1, &this->fbo);
47-
assert_opengl_no_error();
46+
// In OpenGL framebuffer objects are not shared between contexts,
47+
// so make sure the owning context is bound when deleting the framebuffer object.
48+
this->rendering_context.get().apply([this]() {
49+
glGenFramebuffers(1, &this->fbo);
50+
assert_opengl_no_error();
4851

49-
// No need to initialize the variable because it is initialized via
50-
// output argument of glGetIntegerv().
51-
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
52-
GLint old_fb;
53-
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fb);
52+
// No need to initialize the variable because it is initialized via
53+
// output argument of glGetIntegerv().
54+
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
55+
GLint old_fb;
56+
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fb);
5457

55-
glBindFramebuffer(GL_FRAMEBUFFER, this->fbo);
56-
assert_opengl_no_error();
58+
glBindFramebuffer(GL_FRAMEBUFFER, this->fbo);
59+
assert_opengl_no_error();
5760

58-
if (this->color) {
59-
ASSERT(dynamic_cast<texture_2d*>(this->color.get()))
60-
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
61-
auto& tex = static_cast<texture_2d&>(*this->color);
61+
if (this->color) {
62+
ASSERT(dynamic_cast<texture_2d*>(this->color.get()))
63+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
64+
auto& tex = static_cast<texture_2d&>(*this->color);
6265

63-
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex.tex, 0);
64-
assert_opengl_no_error();
65-
} else {
66-
// TODO: glDrawBuffer(GL_NONE) ? See https://gamedev.stackexchange.com/a/152047
67-
}
66+
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex.tex, 0);
67+
assert_opengl_no_error();
68+
} else {
69+
// TODO: glDrawBuffer(GL_NONE) ? See https://gamedev.stackexchange.com/a/152047
70+
}
6871

69-
if (this->depth) {
70-
ASSERT(dynamic_cast<texture_depth*>(this->depth.get()))
71-
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
72-
auto& tex = static_cast<texture_depth&>(*this->depth);
72+
if (this->depth) {
73+
ASSERT(dynamic_cast<texture_depth*>(this->depth.get()))
74+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
75+
auto& tex = static_cast<texture_depth&>(*this->depth);
7376

74-
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, tex.tex, 0);
75-
assert_opengl_no_error();
76-
}
77+
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, tex.tex, 0);
78+
assert_opengl_no_error();
79+
}
7780

78-
if (this->stencil) {
79-
throw std::logic_error("frame_buffer(): OpenGL stencil texture support is not implemented");
80-
}
81+
if (this->stencil) {
82+
throw std::logic_error("frame_buffer(): OpenGL stencil texture support is not implemented");
83+
}
8184

82-
// check for completeness
83-
{
84-
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
85-
assert_opengl_no_error();
86-
if (status != GL_FRAMEBUFFER_COMPLETE) {
87-
throw std::runtime_error(
88-
utki::cat("frame_buffer(): OpenGL framebuffer is incomplete: status = ", unsigned(status))
89-
);
85+
// check for completeness
86+
{
87+
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
88+
assert_opengl_no_error();
89+
if (status != GL_FRAMEBUFFER_COMPLETE) {
90+
throw std::runtime_error(
91+
utki::cat("frame_buffer(): OpenGL framebuffer is incomplete: status = ", unsigned(status))
92+
);
93+
}
9094
}
91-
}
9295

93-
glBindFramebuffer(GL_FRAMEBUFFER, old_fb);
94-
assert_opengl_no_error();
96+
glBindFramebuffer(GL_FRAMEBUFFER, old_fb);
97+
assert_opengl_no_error();
98+
});
9599
}
96100

97101
frame_buffer::~frame_buffer()

0 commit comments

Comments
 (0)