52enum class RenderLayer { Skybox = 0, Opaque = 100, Transparent = 200, UI = 300 };
88 void render(std::shared_ptr<scene::Scene>
scene, std::shared_ptr<scene::Camera> camera);
167 void resize(
int width,
int height);
236 void setup_shadows(std::shared_ptr<scene::Scene>
scene, std::shared_ptr<Shader> shader,
237 bool enable_point =
true,
bool enable_directional =
true);
244 unsigned int m_draw_calls;
247 unsigned int m_triangles_count;
250 bool m_depth_test_enabled;
253 bool m_culling_enabled;
256 bool m_blending_enabled;
259 std::vector<std::shared_ptr<scene::Light>> m_directional_lights;
262 std::vector<std::shared_ptr<scene::Light>> m_point_lights;
265 std::vector<std::shared_ptr<scene::Light>> m_spot_lights;
268 std::shared_ptr<scene::Material> m_default_material;
271 std::shared_ptr<scene::Material> m_last_bound_material;
274 std::unique_ptr<Framebuffer> m_framebuffer;
277 std::unique_ptr<Framebuffer> m_bright_framebuffer;
280 std::unique_ptr<Framebuffer> m_blur_framebuffer[2];
283 std::shared_ptr<Shader> m_postprocess_shader;
286 std::shared_ptr<Shader> m_bright_pass_shader;
289 std::shared_ptr<Shader> m_blur_shader;
292 std::shared_ptr<scene::Mesh> m_screen_quad;
295 int m_tone_map_mode = 2;
298 float m_exposure = 1.0f;
301 float m_gamma = 2.2f;
304 int m_window_width = 1920;
305 int m_window_height = 1080;
308 bool m_bloom_enabled =
true;
311 float m_bloom_threshold = 1.0f;
314 float m_bloom_intensity = 0.5f;
317 std::shared_ptr<ShadowMap> m_shadow_map;
320 std::shared_ptr<CubemapShadowMap> m_cubemap_shadow_map;
323 std::unique_ptr<ShadowRenderer> m_shadow_renderer;
326 bool m_shadow_enabled =
false;
327 glm::vec3 m_shadow_light_pos = glm::vec3(0.0f);
328 float m_shadow_far_plane = 1.0f;
329 glm::mat4 m_light_space_matrix = glm::mat4(1.0f);
340 std::shared_ptr<scene::Mesh> mesh;
346 float distance_to_camera;
356 std::vector<RenderItem> m_render_queue;
371 void build_render_queue(std::shared_ptr<scene::Node> node, std::shared_ptr<scene::Camera> camera,
372 const glm::mat4 &par_transform, std::vector<RenderItem> &out_items);
388 void build_render_queue_culled(std::shared_ptr<scene::Node> node, std::shared_ptr<scene::Camera> camera,
389 const glm::mat4 &par_transform, std::vector<RenderItem> &out_items,
399 void sort_render_queue(std::vector<RenderItem> &items);
412 void render_mesh(std::shared_ptr<scene::Mesh> mesh,
const glm::mat4 &transform,
413 std::shared_ptr<scene::Camera> camera, std::shared_ptr<scene::Scene>
scene);
421 void apply_render_mode();
428 void collect_lights(std::shared_ptr<scene::Scene>
scene);
435 void collect_node_lights(std::shared_ptr<scene::Node> node);
442 void bind_lights(std::shared_ptr<renderer::Shader> shader);
453 void bind_material(std::shared_ptr<scene::Material> material, std::shared_ptr<renderer::Shader> shader);
461 void clear_material_cache();
Declaration of the Camera class for managing viewport and projection.
void resize(int width, int height)
Resizes the framebuffer to specific width and height.
Definition renderer.cpp:417
void set_gamma(float gamma)
Sets the gamma of the tone map.
Definition renderer.hpp:193
unsigned int get_draw_calls() const
Get the number of draw calls made in the last render.
Definition renderer.hpp:149
RenderMode get_render_mode() const
Get the current rendering mode.
Definition renderer.hpp:139
void set_blending(bool enabled)
Enable or disable blending.
Definition renderer.cpp:169
void set_bloom_threshold(float threshold)
Sets the bloom brightness threshold.
Definition renderer.hpp:216
void set_tone_map_mode(int mode)
Sets the tone map mode.
Definition renderer.hpp:179
void set_bloom_intensity(float intensity)
Sets the bloom intensity/strength.
Definition renderer.hpp:223
void setup_shadows(std::shared_ptr< scene::Scene > scene, std::shared_ptr< Shader > shader, bool enable_point=true, bool enable_directional=true)
Configure shadow rendering for the scene.
Definition renderer.cpp:430
~Renderer()=default
Destructor for the Renderer class.
void set_depth_test(bool enabled)
Enable or disable depth testing.
Definition renderer.cpp:150
void render(std::shared_ptr< scene::Scene > scene, std::shared_ptr< scene::Camera > camera)
Render a scene from the perspective of a camera.
Definition renderer.cpp:39
unsigned int get_triangles_count() const
Get the number of triangles rendered in the last render.
Definition renderer.hpp:159
Renderer()
Constructor for the Renderer class.
Definition renderer.cpp:17
void enable_post_processing(bool enabled)
Enables post processing effects based on tone map mode and exposure/gamma.
void set_render_mode(RenderMode mode)
Set the rendering mode.
Definition renderer.cpp:148
void set_exposure(float exposure)
Sets the exposure of the tone map.
Definition renderer.hpp:186
void set_culling(bool enabled)
Enable or disable face culling.
Definition renderer.cpp:159
void set_bloom_enabled(bool enabled)
Enable or disable bloom effect.
Definition renderer.hpp:207
Frustum structure.
Definition frustum.hpp:218
Framebuffer class for off-screen rendering.
Defines the Mesh class for managing 3D mesh data.
Namespace for rendering-related classes and functions.
Definition buffer.cpp:9
RenderMode
Enumerates the different rendering modes.
Definition renderer.hpp:43
RenderLayer
Enumerates the different render layers.
Definition renderer.hpp:52
Namespace for scene-related classes and functions.
Definition camera.cpp:7
Forward declarations for Assimp Material structure.
Definition model_loader.cpp:12
Defines the Node class for managing scene graph nodes in a 3D environment.
Defines the Scene class for managing a 3D scene graph.
This file contains the ShadowMap, CubemapShadowMap, and ShadowRenderer classes for rendering shadows ...