15#define POOLSTL_STD_SUPPLEMENT 1
16#include <poolstl/poolstl.hpp>
24 prefilter_pass_.init(ctx);
26 atmospheric_pass_.init(ctx);
27 atmospheric_pass_perez_.init(ctx);
28 atmospheric_pass_skybox_.init(ctx);
30 tonemapping_pass_.init(ctx);
31 assao_pass_.init(ctx);
37 auto load_program = [&](
const std::string& vs,
const std::string&
fs)
39 auto vs_shader = am.get_asset<
gfx::shader>(
"engine:/data/shaders/" + vs +
".sc");
40 auto fs_shadfer = am.get_asset<
gfx::shader>(
"engine:/data/shaders/" +
fs +
".sc");
42 return std::make_unique<gpu_program>(vs_shader, fs_shadfer);
62 std::for_each( view.begin(), view.end(),
65 auto&& [transform_comp, model_comp, layer_comp, active_comp] = view.get(entity);
68 auto entity_layer = layer_comp.layers;
71 if(!model_comp.is_enabled())
75 if((query & visibility_query::is_static) && !model_comp.is_static())
79 if((query & visibility_query::is_reflection_caster) && !model_comp.casts_reflection())
83 if((query & visibility_query::is_shadow_caster) && !model_comp.casts_shadow())
89 if((entity_layer.mask & render_mask.mask) == 0)
94 bool is_visible =
true;
98 const auto& world_transform = transform_comp.get_transform_global();
99 const auto& local_bounds = model_comp.get_local_bounds();
102 is_visible = frustum->test_obb(local_bounds, world_transform);
110 result.emplace_back(scn.create_handle(entity));
128 params.params = assao_comp->settings;
139 params.config = tonemapping_comp->settings;
169 params.settings = ssr_comp->settings;
183 auto& fbo = rview.
fbo_get(
"OBUFFER_DEPTH");
187 pass.
bind(fbo.get());
191 [&](
auto e,
auto&& transform_comp,
auto&& text_comp,
auto&& active)
193 const auto& world_transform = transform_comp.get_transform_global();
194 auto bbox = text_comp.get_bounds();
201 text_comp.submit(pass.
id, world_transform, BGFX_STATE_DEPTH_TEST_LESS);
std::shared_ptr< frame_buffer > ptr
auto fbo_get(const hpp::string_view &id) const -> const frame_buffer::ptr &
Storage for frustum planes / values and wraps up common functionality.
bool enabled
Whether ASSAO is enabled.
Manages assets, including loading, unloading, and storage.
Class representing a camera. Contains functionality for manipulating and updating a camera....
auto test_obb(const math::bbox &bounds, const math::transform &t) const -> bool
Tests if the specified OBB is within the frustum.
auto get_projection() const -> const math::transform &
Retrieves the current projection matrix.
auto get_view() const -> const math::transform &
Retrieves the current view matrix.
bool enabled
Whether FXAA is enabled.
Class that contains core data for meshes.
virtual auto init(rtti::context &ctx) -> bool
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.
uint32_t visibility_flags
Type alias for visibility flags.
bool enabled
Whether SSR is enabled.
bool enabled
Whether tonemapping is enabled.
void discard(uint8_t _flags)
hpp::small_vector< entt::handle > visibility_set_models_t
#define APP_SCOPE_PERF(name)
Create a scoped performance timer that only accepts string literals.
void set_view_proj(const float *v, const float *p)
void bind(const frame_buffer *fb=nullptr) const
Component that provides a layer mask for an entity.
std::function< void(assao_pass::run_params ¶ms)> fill_assao_params
std::function< void(ssr_pass::run_params ¶ms)> fill_ssr_params
std::function< void(tonemapping_pass::run_params ¶ms)> fill_hdr_params
std::function< void(fxaa_pass::run_params ¶ms)> fill_fxaa_params
Represents a scene in the ACE framework, managing entities and their relationships.
std::unique_ptr< entt::registry > registry
The registry that manages all entities in the scene.