Brenta Engine 1.2
Loading...
Searching...
No Matches
post_process_pass.cpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
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>
10
11using namespace brenta;
12
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)
17{
18 this->input_fb = input_fb;
19 this->output_fb = output_fb;
20 this->clear = clear;
21 this->set_viewport = set_viewport;
22
23 auto screen_quad_builder =
25 .mesh(Mesh::Builder()
26 .shape(Mesh::Shape::Square))
27 .material(pp_material);
28 this->screen_quad =
29 tenno::make_shared<Model>(screen_quad_builder);
30}
31
32void PostProcessPass::begin()
33{
34 this->output_fb->bind();
35
36 if (this->set_viewport)
37 Gl::set_viewport(0, 0, this->output_fb->width, this->output_fb->height);
38
39 if (this->clear)
40 Gl::clear();
41}
42
43void PostProcessPass::end()
44{
45 this->output_fb->unbind();
46}
47
48void PostProcessPass::execute(const Renderer::RenderData& data)
49{
50 (void) data;
51
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();
57}