From cc1cb134873a1c2b8a168dadea79cfc0e3ef9940 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sun, 25 Oct 2020 15:45:53 +0300 Subject: [PATCH] Use render_target in deferred renderer --- .../include/psemek/gfx/renderer/deferred.hpp | 6 ++---- libs/gfx/source/renderer/deferred.cpp | 18 ++++++------------ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/libs/gfx/include/psemek/gfx/renderer/deferred.hpp b/libs/gfx/include/psemek/gfx/renderer/deferred.hpp index e6f0892f..0155ed33 100644 --- a/libs/gfx/include/psemek/gfx/renderer/deferred.hpp +++ b/libs/gfx/include/psemek/gfx/renderer/deferred.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -75,9 +76,6 @@ namespace psemek::gfx struct options { - gfx::framebuffer const * framebuffer; - GLenum draw_buffer; - geom::box viewport; geom::camera const * camera; std::optional clear_color; @@ -91,7 +89,7 @@ namespace psemek::gfx std::optional min_intensity; }; - void render(std::vector const & objects, options const & opts); + void render(std::vector const & objects, render_target const & target, options const & opts); private: psemek_declare_pimpl diff --git a/libs/gfx/source/renderer/deferred.cpp b/libs/gfx/source/renderer/deferred.cpp index 14e6f8bb..68bd618f 100644 --- a/libs/gfx/source/renderer/deferred.cpp +++ b/libs/gfx/source/renderer/deferred.cpp @@ -407,7 +407,7 @@ void main() return m; } - void deferred_renderer::render(std::vector const & objects, options const & opts) + void deferred_renderer::render(std::vector const & objects, render_target const & target, options const & opts) { // Get camera info @@ -437,7 +437,7 @@ void main() // Resize g-buffer if needed - auto buffer_size = geom::cast(opts.viewport.dimensions()); + auto buffer_size = geom::cast(target.viewport.dimensions()); if (!impl().g_buffer_size || *impl().g_buffer_size != buffer_size) { // TODO: compact normals storage @@ -466,11 +466,10 @@ void main() impl().g_framebuffer.bind(); - gl::Viewport(0, 0, opts.viewport[0].length(), opts.viewport[1].length()); + gl::Viewport(0, 0, target.viewport[0].length(), target.viewport[1].length()); - GLenum draw_buffers[4] { gl::COLOR_ATTACHMENT0, gl::COLOR_ATTACHMENT1, gl::COLOR_ATTACHMENT2, gl::COLOR_ATTACHMENT3 }; - gl::DrawBuffers(4, draw_buffers); - check_error(); + GLenum g_draw_buffers[4] { gl::COLOR_ATTACHMENT0, gl::COLOR_ATTACHMENT1, gl::COLOR_ATTACHMENT2, gl::COLOR_ATTACHMENT3 }; + gl::DrawBuffers(4, g_draw_buffers); float buffer_1_clear[4] { 0.f, 0.f, 0.f, 0.f }; if (opts.clear_color) { @@ -533,12 +532,7 @@ void main() // Setup destination framebuffer - assert(opts.framebuffer); - opts.framebuffer->bind(); - - gl::DrawBuffer(opts.draw_buffer); - - gl::Viewport(opts.viewport[0].min, opts.viewport[1].min, opts.viewport[0].length(), opts.viewport[1].length()); + target.bind(); gl::Disable(gl::DEPTH_TEST); gl::Disable(gl::BLEND);