Use render_target in deferred renderer

This commit is contained in:
Nikita Lisitsa 2020-10-25 15:45:53 +03:00
parent 0206ebc2cb
commit cc1cb13487
2 changed files with 8 additions and 16 deletions

View file

@ -4,6 +4,7 @@
#include <psemek/gfx/mesh.hpp>
#include <psemek/gfx/texture.hpp>
#include <psemek/gfx/framebuffer.hpp>
#include <psemek/gfx/render_target.hpp>
#include <psemek/geom/camera.hpp>
#include <psemek/geom/box.hpp>
@ -75,9 +76,6 @@ namespace psemek::gfx
struct options
{
gfx::framebuffer const * framebuffer;
GLenum draw_buffer;
geom::box<int, 2> viewport;
geom::camera const * camera;
std::optional<color_4f> clear_color;
@ -91,7 +89,7 @@ namespace psemek::gfx
std::optional<float> min_intensity;
};
void render(std::vector<object> const & objects, options const & opts);
void render(std::vector<object> const & objects, render_target const & target, options const & opts);
private:
psemek_declare_pimpl

View file

@ -407,7 +407,7 @@ void main()
return m;
}
void deferred_renderer::render(std::vector<object> const & objects, options const & opts)
void deferred_renderer::render(std::vector<object> 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<std::size_t>(opts.viewport.dimensions());
auto buffer_size = geom::cast<std::size_t>(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);