6#include <brenta/renderer/passes/transparent_pass.hpp>
7#include <brenta/renderer/opengl/gl.hpp>
8#include <brenta/renderer/material.hpp>
9#include <brenta/renderer/model.hpp>
10#include <brenta/renderer/point_light.hpp>
11#include <brenta/renderer/dir_light.hpp>
12#include <brenta/renderer/opengl/framebuffer.hpp>
14using namespace brenta;
16TransparentPass::TransparentPass(tenno::shared_ptr<FrameBuffer> fb,
17 bool clear,
bool set_viewport)
21 this->set_viewport = set_viewport;
24void TransparentPass::begin()
28 if (this->set_viewport)
29 Gl::set_viewport(0, 0, this->fb->width, this->fb->height);
35void TransparentPass::end()
42 for (
auto& command : data.transparent_queue)
44 auto material = command.model->material;
45 material->shader->use();
48 int lights_number = 0;
49 if (data.point_lights.size() > 0)
51 for (
auto& point_light : data.point_lights)
53 point_light->apply(lights_number);
57 material->shader->set_int(
"n_point_lights", lights_number);
60 data.dir_light.value()->apply();
62 material->shader->set_mat4(
"view", data.view);
63 material->shader->set_mat4(
"projection", data.projection);
64 material->shader->set_mat4(
"model",
66 command.world_matrix *
68 command.model->transform.get_model_matrix());
69 material->shader->set_vec3(
"view_pos", data.cam_position);
72 command.model->draw();