6#include <brenta/renderer/passes/opaque_pass.hpp>
7#include <brenta/renderer/opengl/gl.hpp>
8#include <brenta/renderer/model.hpp>
9#include <brenta/renderer/point_light.hpp>
10#include <brenta/renderer/dir_light.hpp>
11#include <brenta/renderer/opengl/framebuffer.hpp>
13using namespace brenta;
15OpaquePass::OpaquePass(tenno::shared_ptr<FrameBuffer> fb,
16 bool clear,
bool set_viewport)
20 this->set_viewport = set_viewport;
23void OpaquePass::begin()
27 if (this->set_viewport)
28 Gl::set_viewport(0, 0, this->fb->width, this->fb->height);
41 for (
auto& command : data.opaque_queue)
43 auto material = command.model->material;
44 material->shader->use();
47 int lights_number = 0;
48 if (data.point_lights.size() > 0)
50 for (
auto& point_light : data.point_lights)
52 point_light->apply(lights_number);
56 material->shader->set_int(
"n_point_lights", lights_number);
59 data.dir_light.value()->apply();
61 material->shader->set_mat4(
"view", data.view);
62 material->shader->set_mat4(
"projection", data.projection);
63 material->shader->set_mat4(
"model",
65 command.world_matrix *
67 command.model->transform.get_model_matrix());
68 material->shader->set_vec3(
"view_pos", data.cam_position);
71 command.model->draw();