2#ifndef LIBSBX_POST_FILTERS_TONEMAP_FILTER_HPP_
3#define LIBSBX_POST_FILTERS_TONEMAP_FILTER_HPP_
5#include <libsbx/utility/enum.hpp>
7#include <libsbx/math/vector2.hpp>
9#include <libsbx/core/settings.hpp>
11#include <libsbx/graphics/graphics_module.hpp>
12#include <libsbx/graphics/buffers/push_handler.hpp>
14#include <libsbx/post/filter.hpp>
19 std::float_t exposure = 0.0f;
20 std::float_t bloom_mix = 0.1f;
21 std::float_t saturation = 1.0f;
22 std::float_t contrast = 1.0f;
23 std::float_t temperature = 0.0f;
24 std::float_t tint = 0.0f;
38 inline static constexpr auto default_shader_path = std::string_view{
"engine://shaders/tonemap"};
43 :
base{attachments, path, base::default_pipeline_definition},
44 _push_handler{base::pipeline()},
45 _attachment_names{std::move(attachment_names)},
47 core::prototype::settings::set(exposure_key, _tonemap_config.exposure);
48 core::prototype::settings::set(bloom_mix_key, _tonemap_config.bloom_mix);
49 core::prototype::settings::set(saturation_key, _tonemap_config.saturation);
50 core::prototype::settings::set(contrast_key, _tonemap_config.contrast);
51 core::prototype::settings::set(temperature_key, _tonemap_config.temperature);
52 core::prototype::settings::set(tint_key, _tonemap_config.tint);
58 EASY_BLOCK(
"tonemap_filter::render");
60 auto& pipeline = base::pipeline();
61 auto& descriptor_handler = base::descriptor_handler();
63 auto& graphics_module = core::engine::get_module<graphics::graphics_module>();
65 pipeline.bind(command_buffer);
67 _push_handler.push(
"exposure", _tonemap_config.exposure);
68 _push_handler.push(
"bloom_mix", _tonemap_config.bloom_mix);
69 _push_handler.push(
"saturation", _tonemap_config.saturation);
70 _push_handler.push(
"contrast", _tonemap_config.contrast);
71 _push_handler.push(
"temperature", _tonemap_config.temperature);
72 _push_handler.push(
"tint", _tonemap_config.tint);
74 for (
const auto& [name, attachment] : _attachment_names) {
75 descriptor_handler.push(name, graphics_module.attachment(attachment));
78 if (!descriptor_handler.update(pipeline)) {
82 descriptor_handler.bind_descriptors(command_buffer);
83 _push_handler.bind(command_buffer);
85 command_buffer.draw(3, 1, 0, 0);
91 std::vector<std::pair<std::string, std::string>> _attachment_names;
Definition: command_buffer.hpp:15
Definition: push_handler.hpp:18
Definition: filter.hpp:19
Definition: tonemap_filter.hpp:27
Definition: settings.hpp:30
Definition: settings.hpp:24
Definition: tonemap_filter.hpp:18