Unravel Engine C++ Reference
Loading...
Searching...
No Matches
pipeline.h
Go to the documentation of this file.
1#pragma once
2
3#include <engine/ecs/ecs.h>
9
10
11#include "passes/assao_pass.h"
15#include "passes/blit_pass.h"
16#include "passes/fxaa_pass.h"
17#include "passes/hiz_pass.h"
19#include "passes/ssr_pass.h"
21
22
23#include <base/basetypes.hpp>
24#include <context/context.hpp>
25
26#include <hpp/small_vector.hpp>
27#include <map>
28#include <memory>
29#include <vector>
30
31
32namespace unravel
33{
34namespace rendering
35{
41{
42 std::uint32_t current_lod_index = 0;
43 std::uint32_t target_lod_index = 0;
44 float current_time = 0.0f;
45};
46
47using lod_data_container = std::map<entt::handle, lod_data>;
48using visibility_set_models_t = hpp::small_vector<entt::handle>;
49
51{
52 uint32_t drawn_models = 0;
54 uint32_t drawn_lights = 0;
56 uint32_t drawn_particles = 0;
58
59 // Static mesh batching statistics
61
62 auto anything_drawn() const -> bool
63 {
64 return drawn_models > 0 || drawn_skinned_models > 0 || drawn_lights > 0 ||
66 }
67
72 void add_batch_stats(const batch_stats& stats);
73};
79{
80public:
81 using uptr = std::unique_ptr<pipeline>;
82 using sptr = std::shared_ptr<pipeline>;
83 using wptr = std::weak_ptr<pipeline>;
84
89 enum visibility_query : uint32_t
90 {
91 not_specified = 1 << 0,
92 is_dirty = 1 << 1,
93 is_static = 1 << 2,
96 };
97
98 using visibility_flags = uint32_t;
99
109
110 pipeline() = default;
111 virtual ~pipeline() = default;
112
113 virtual auto init(rtti::context& ctx) -> bool;
114
123 virtual auto gather_visible_models(scene& scn,
124 const math::frustum* frustum,
125 visibility_flags query,
126 const layer_mask& render_mask) -> visibility_set_models_t;
127
138 virtual auto run_pipeline(scene& scn,
139 const camera& camera,
140 gfx::render_view& rview,
141 delta_t dt,
142 const run_params& params,
143 layer_mask render_mask = layer_mask{
145
156 virtual void run_pipeline(const gfx::frame_buffer::ptr& output,
157 scene& scn,
158 const camera& camera,
159 gfx::render_view& rview,
160 delta_t dt,
161 const run_params& params,
163
164 virtual void set_debug_pass(int pass) = 0;
165
166 virtual void ui_pass(scene& scn,
167 const camera& camera,
168 gfx::render_view& rview,
169 const gfx::frame_buffer::ptr& output);
170
171 virtual void particle_pass(scene& scn,
172 const camera& camera,
173 gfx::render_view& rview,
174 const gfx::frame_buffer::ptr& output);
175
176 virtual auto create_run_params(entt::handle camera_ent) const -> rendering::pipeline::run_params;
177
179 {
180 return stats_;
181 }
182
183protected:
194
195 std::unique_ptr<gpu_program> particle_program_{};
196 std::unique_ptr<gpu_program> particle_program_instanced_{};
197
199};
200} // namespace rendering
201} // namespace unravel
Storage for frustum planes / values and wraps up common functionality.
Definition frustum.h:18
Class representing a camera. Contains functionality for manipulating and updating a camera....
Definition camera.h:35
Performs GGX prefiltering on six 2D face textures to produce a filtered cubemap.
auto get_stats() -> pipeline_stats &
Definition pipeline.h:178
virtual void particle_pass(scene &scn, const camera &camera, gfx::render_view &rview, const gfx::frame_buffer::ptr &output)
Definition pipeline.cpp:215
virtual auto init(rtti::context &ctx) -> bool
Definition pipeline.cpp:25
virtual auto gather_visible_models(scene &scn, const math::frustum *frustum, visibility_flags query, const layer_mask &render_mask) -> visibility_set_models_t
Gathers visible models from the scene based on the given query.
Definition pipeline.cpp:55
visibility_query
Flags for visibility queries.
Definition pipeline.h:90
@ not_specified
No specific visibility query.
Definition pipeline.h:91
@ is_dirty
Query for dirty entities.
Definition pipeline.h:92
@ is_reflection_caster
Query for reflection casting entities.
Definition pipeline.h:95
@ is_static
Query for static entities.
Definition pipeline.h:93
@ is_shadow_caster
Query for shadow casting entities.
Definition pipeline.h:94
virtual ~pipeline()=default
atmospheric_pass_skybox atmospheric_pass_skybox_
Definition pipeline.h:188
prefilter_pass prefilter_pass_
Definition pipeline.h:184
virtual void ui_pass(scene &scn, const camera &camera, gfx::render_view &rview, const gfx::frame_buffer::ptr &output)
Definition pipeline.cpp:184
virtual auto run_pipeline(scene &scn, const camera &camera, gfx::render_view &rview, delta_t dt, const run_params &params, layer_mask render_mask=layer_mask{ layer_reserved::everything_layer}) -> gfx::frame_buffer::ptr=0
Renders the entire scene from the camera's perspective.
virtual void run_pipeline(const gfx::frame_buffer::ptr &output, scene &scn, const camera &camera, gfx::render_view &rview, delta_t dt, const run_params &params, layer_mask render_mask=layer_mask{layer_reserved::everything_layer})=0
Renders the entire scene from the camera's perspective to the specified output.
virtual void set_debug_pass(int pass)=0
atmospheric_pass_perez atmospheric_pass_perez_
Definition pipeline.h:187
tonemapping_pass tonemapping_pass_
Definition pipeline.h:191
std::shared_ptr< pipeline > sptr
Definition pipeline.h:82
std::weak_ptr< pipeline > wptr
Definition pipeline.h:83
uint32_t visibility_flags
Type alias for visibility flags.
Definition pipeline.h:98
hiz_pass hiz_pass_
Hi-Z buffer generation pass.
Definition pipeline.h:193
std::unique_ptr< gpu_program > particle_program_instanced_
Definition pipeline.h:196
atmospheric_pass atmospheric_pass_
Definition pipeline.h:186
std::unique_ptr< pipeline > uptr
Definition pipeline.h:81
virtual auto create_run_params(entt::handle camera_ent) const -> rendering::pipeline::run_params
Definition pipeline.cpp:125
std::unique_ptr< gpu_program > particle_program_
Definition pipeline.h:195
std::chrono::duration< float > delta_t
std::map< entt::handle, lod_data > lod_data_container
Definition pipeline.h:47
hpp::small_vector< entt::handle > visibility_set_models_t
Definition pipeline.h:48
@ everything_layer
Definition layer_mask.h:16
Statistics for batch collection and rendering performance.
Contains level of detail (LOD) data for an entity.
Definition pipeline.h:41
float current_time
Current time for LOD transition.
Definition pipeline.h:44
std::uint32_t target_lod_index
Target LOD index.
Definition pipeline.h:43
std::uint32_t current_lod_index
Current LOD index.
Definition pipeline.h:42
std::function< void(assao_pass::run_params &params)> fill_assao_params
Definition pipeline.h:104
std::function< void(ssr_pass::run_params &params)> fill_ssr_params
Definition pipeline.h:107
std::function< void(tonemapping_pass::run_params &params)> fill_hdr_params
Definition pipeline.h:105
std::function< void(fxaa_pass::run_params &params)> fill_fxaa_params
Definition pipeline.h:106
void add_batch_stats(const batch_stats &stats)
Add batch statistics to the pipeline stats.
Definition pipeline.cpp:327
auto anything_drawn() const -> bool
Definition pipeline.h:62
Represents a scene in the ACE framework, managing entities and their relationships.
Definition scene.h:21