Route RTT framebuffer binding through renderer GL
This commit is contained in:
52
src/rtt.cpp
52
src/rtt.cpp
@@ -24,26 +24,6 @@ namespace {
|
||||
return static_cast<GLenum>(pp::renderer::gl::framebuffer_target());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum draw_framebuffer_target() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::draw_framebuffer_target());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum read_framebuffer_target() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::read_framebuffer_target());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum draw_framebuffer_binding_query() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::draw_framebuffer_binding_query());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum read_framebuffer_binding_query() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::read_framebuffer_binding_query());
|
||||
}
|
||||
|
||||
void query_opengl_integer(std::uint32_t name, std::int32_t* value) noexcept
|
||||
{
|
||||
glGetIntegerv(static_cast<GLenum>(name), reinterpret_cast<GLint*>(value));
|
||||
@@ -437,10 +417,19 @@ void RTT::bindFramebuffer()
|
||||
#endif
|
||||
}
|
||||
#endif // _DEBUG
|
||||
glGetIntegerv(draw_framebuffer_binding_query(), &oldDFboID);
|
||||
glGetIntegerv(read_framebuffer_binding_query(), &oldRFboID);
|
||||
glBindFramebuffer(draw_framebuffer_target(), fboID);
|
||||
glBindFramebuffer(read_framebuffer_target(), fboID);
|
||||
const auto binding = pp::renderer::gl::bind_opengl_framebuffer_for_draw_read(
|
||||
static_cast<std::uint32_t>(fboID),
|
||||
pp::renderer::gl::OpenGlFramebufferBindDispatch {
|
||||
.get_integer = query_opengl_integer,
|
||||
.bind_framebuffer = bind_opengl_framebuffer,
|
||||
});
|
||||
if (!binding.ok()) {
|
||||
LOG("RTT::bindFramebuffer() failed because: %s", binding.status().message);
|
||||
return;
|
||||
}
|
||||
|
||||
oldDFboID = static_cast<GLint>(binding.value().draw_framebuffer);
|
||||
oldRFboID = static_cast<GLint>(binding.value().read_framebuffer);
|
||||
bound = true;
|
||||
}
|
||||
|
||||
@@ -449,8 +438,19 @@ void RTT::unbindFramebuffer()
|
||||
assert(App::I->is_render_thread());
|
||||
if (!bound)
|
||||
return;
|
||||
glBindFramebuffer(draw_framebuffer_target(), oldDFboID);
|
||||
glBindFramebuffer(read_framebuffer_target(), oldRFboID);
|
||||
const auto status = pp::renderer::gl::restore_opengl_framebuffer_binding(
|
||||
pp::renderer::gl::OpenGlFramebufferBindingState {
|
||||
.draw_framebuffer = oldDFboID,
|
||||
.read_framebuffer = oldRFboID,
|
||||
},
|
||||
pp::renderer::gl::OpenGlFramebufferRestoreDispatch {
|
||||
.bind_framebuffer = bind_opengl_framebuffer,
|
||||
});
|
||||
if (!status.ok()) {
|
||||
LOG("RTT::unbindFramebuffer() failed because: %s", status.message);
|
||||
return;
|
||||
}
|
||||
|
||||
oldRFboID = 0;
|
||||
oldDFboID = 0;
|
||||
bound = false;
|
||||
|
||||
Reference in New Issue
Block a user