6#include <brenta/renderer/passes/post_process_pass.hpp>
7#include <brenta/renderer/opengl/gl.hpp>
8#include <brenta/renderer/model.hpp>
9#include <brenta/renderer/opengl/framebuffer.hpp>
11using namespace brenta;
13PostProcessPass::PostProcessPass(tenno::shared_ptr<FrameBuffer> input_fb,
14 tenno::shared_ptr<FrameBuffer> output_fb,
15 tenno::shared_ptr<Material> pp_material,
16 bool clear,
bool set_viewport)
18 this->input_fb = input_fb;
19 this->output_fb = output_fb;
21 this->set_viewport = set_viewport;
23 auto screen_quad_builder =
26 .shape(Mesh::Shape::Square))
27 .material(pp_material);
29 tenno::make_shared<Model>(screen_quad_builder);
32void PostProcessPass::begin()
34 this->output_fb->bind();
36 if (this->set_viewport)
37 Gl::set_viewport(0, 0, this->output_fb->width, this->output_fb->height);
43void PostProcessPass::end()
45 this->output_fb->unbind();
52 glActiveTexture(GL_TEXTURE0);
53 glBindTexture(GL_TEXTURE_2D, input_fb->texture_id);
54 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
55 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
56 this->screen_quad->draw();