Brenta Engine 1.2
Loading...
Searching...
No Matches
renderer.cpp
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#include <brenta/renderer.hpp>
7#include <brenta/window.hpp>
8#include <brenta/translation.hpp>
9
10using namespace brenta;
11
12//
13// Static variables
14//
15
16std::vector<renderer::item> renderer::render_queue = {};
17glm::mat4 renderer::view;
18glm::mat4 renderer::projection;
19glm::vec3 renderer::cam_position;
20
21//
22// Member functions
23//
24
25void renderer::begin_frame(const camera& cam)
26{
27 renderer::render_queue.clear();
28 renderer::projection =
29 cam.get_projection_matrix(window::get_width(),
30 window::get_height());
31 renderer::view = cam.get_view_matrix();
32 renderer::cam_position = cam.get_position();
33}
34
35void renderer::submit(const renderer::item& it)
36{
37 renderer::render_queue.push_back(it);
38}
39
40void renderer::end_frame()
41{
42 renderer::flush();
43}
44
45void renderer::flush()
46{
47 for (auto i : renderer::render_queue)
48 {
50 t.set_view(renderer::view);
51 t.set_projection(renderer::projection);
52 t.set_model(i.transform);
53 t.set_shader(i.material);
54
55 shader::set_vec3(i.material, "viewPos", renderer::cam_position);
56 shader::set_float(i.material, "material.shininess", 32.0f); // TODO
57 //shader::set_int(i.material, "atlasIndex", 0); // TODO
58
59 i.m->draw(i.material);
60 }
61}
62
63//
64// Item
65//
66
67renderer::item& renderer::item::translate(glm::vec3 translation)
68{
69 this->transform = glm::translate(this->transform, translation);
70 return *this;
71}
72
73// Note: the order of rotations is important
74renderer::item& renderer::item::rotate(glm::vec3 rotation)
75{
76 this->transform = glm::rotate(this->transform, glm::radians(rotation.x),
77 glm::vec3(1.0f, 0.0f, 0.0f));
78 this->transform = glm::rotate(this->transform, glm::radians(rotation.y),
79 glm::vec3(0.0f, 1.0f, 0.0f));
80 this->transform = glm::rotate(this->transform, glm::radians(rotation.z),
81 glm::vec3(0.0f, 0.0f, 1.0f));
82 return *this;
83}
84
85renderer::item& renderer::item::scale(float scale)
86{
87 this->transform = glm::scale(this->transform, glm::vec3(scale));
88 return *this;
89}
The Camera class.
Definition camera.hpp:81
static bool set_float(shader::name_t shader_name, const GLchar *name, float value)
Set a float in the shader.
Definition shader.cpp:89
static bool set_vec3(shader::name_t shader_name, const GLchar *name, float x, float y, float z)
Set a 3D vector in the shader.
Definition shader.cpp:140
Translation util class.
void set_projection(glm::mat4 projection)
Set the projection matrix.
void set_model(glm::mat4 model)
Set the model matrix.
void set_view(glm::mat4 view)
Set the view matrix.
bool set_shader(shader::name_t shader_name)
Set the shader.