2#ifndef LIBSBX_POST_FILTERS_BLUR_FILTER_HPP_
3#define LIBSBX_POST_FILTERS_BLUR_FILTER_HPP_
5#include <libsbx/utility/enum.hpp>
7#include <libsbx/math/vector2.hpp>
9#include <libsbx/post/filter.hpp>
13enum class blur_type : std::uint32_t {
19template<blur_type Type>
24 static auto _specialization_info(
const std::uint32_t
id,
const std::uint32_t value) ->
const VkSpecializationInfo* {
25 static auto specialization_map_entry = VkSpecializationMapEntry{};
26 specialization_map_entry.constantID = id;
27 specialization_map_entry.offset = 0u;
28 specialization_map_entry.size =
sizeof(std::uint32_t);
30 static auto specialization_data = std::uint32_t{value};
32 static auto specialization_info = VkSpecializationInfo{};
33 specialization_info.mapEntryCount = 1u;
34 specialization_info.pMapEntries = &specialization_map_entry;
35 specialization_info.dataSize =
sizeof(std::uint32_t);
36 specialization_info.pData = &specialization_data;
38 return &specialization_info;
43 inline static constexpr auto type = Type;
45 blur_filter(
const std::vector<graphics::attachment_description>& attachments,
const std::filesystem::path& path,
const std::string& attachment_name,
const math::vector2& direction)
46 :
base{attachments, path, base::default_pipeline_definition, _specialization_info(0u, utility::to_underlying(Type))},
47 _push_handler{base::pipeline()},
48 _attachment_name{attachment_name},
49 _direction{direction} { }
54 EASY_BLOCK(
"blur_filter::render");
56 auto& pipeline = base::pipeline();
57 auto& descriptor_handler = base::descriptor_handler();
59 auto& graphics_module = core::engine::get_module<graphics::graphics_module>();
61 pipeline.bind(command_buffer);
63 _push_handler.push(
"direction", _direction);
66 descriptor_handler.push(
"image", graphics_module.attachment(_attachment_name));
68 if (!descriptor_handler.update(pipeline)) {
72 descriptor_handler.bind_descriptors(command_buffer);
73 _push_handler.bind(command_buffer);
75 command_buffer.draw(3, 1, 0, 0);
82 std::string _attachment_name;
Definition: command_buffer.hpp:15
Definition: push_handler.hpp:18
A vector in two-dimensional space.
Definition: vector2.hpp:28
Definition: blur_filter.hpp:20
Definition: filter.hpp:19