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/renderer.hpp>
7#include <brenta/renderer/pipeline.hpp>
8#include <brenta/window.hpp>
9
10using namespace brenta;
11
12//
13// Static variables
14//
15
16Renderer::RenderData Renderer::data = {};
17
18//
19// Member functions
20//
21
22void Renderer::begin_frame()
23{
24 Renderer::clear();
25 return;
26}
27
28void Renderer::begin_frame(Camera& cam, int width, int height)
29{
30 Renderer::clear();
31 Renderer::set_camera(cam, width, height);
32 return;
33}
34
35void Renderer::set_camera(Camera& cam, int width, int height)
36{
37 Renderer::data.projection =
38 cam.get_projection_matrix(width, height);
39 Renderer::data.view = cam.get_view_matrix();
40 Renderer::data.cam_position = cam.get_transform().get_pos();
41 Renderer::data.width = width;
42 Renderer::data.height = height;
43}
44
45void Renderer::submit(const Renderer::Command& it, bool transparent)
46{
47 if (transparent)
48 Renderer::data.transparent_queue.push_back(it);
49 else
50 Renderer::data.opaque_queue.push_back(it);
51}
52
53void Renderer::submit_point_light(tenno::shared_ptr<PointLight> point_light)
54{
55 Renderer::data.point_lights.push_back(point_light);
56}
57
58void Renderer::submit_point_lights(const tenno::vector<tenno::shared_ptr<PointLight>> &point_lights)
59{
60 Renderer::data.point_lights.reserve(Renderer::data.point_lights.size()
61 + point_lights.size());
62 Renderer::data.point_lights.insert(Renderer::data.point_lights.end(),
63 point_lights.begin(),
64 point_lights.end());
65}
66
67void Renderer::submit_dir_light(tenno::shared_ptr<DirLight> dir_light)
68{
69 Renderer::data.dir_light = dir_light;
70}
71
72void Renderer::submit_text(const Text& text)
73{
74 Renderer::data.ui_queue.push_back(text);
75}
76
77void Renderer::submit_skybox(tenno::shared_ptr<Skybox> skybox)
78{
79 Renderer::data.skybox = skybox;
80}
81
82void Renderer::end_frame(tenno::shared_ptr<RenderPipeline> pipeline)
83{
84 Renderer::flush(pipeline);
85}
86
87void Renderer::clear()
88{
89 Renderer::data.opaque_queue.clear();
90 Renderer::data.transparent_queue.clear();
91 Renderer::data.ui_queue.clear();
92 Renderer::data.point_lights.clear();
93 Renderer::data.dir_light = {};
94 Renderer::data.skybox = {};
95}
96
97void Renderer::flush(tenno::shared_ptr<RenderPipeline> pipeline)
98{
99 pipeline->execute(Renderer::data);
100 Renderer::clear();
101 return;
102}