2#ifndef LIBSBX_GRAPHICS_DESCRIPTOR_DESCRIPTOR_HANDLER_HPP_
3#define LIBSBX_GRAPHICS_DESCRIPTOR_DESCRIPTOR_HANDLER_HPP_
10#include <libsbx/memory/observer_ptr.hpp>
12#include <libsbx/graphics/render_pass/swapchain.hpp>
14#include <libsbx/graphics/buffers/uniform_handler.hpp>
15#include <libsbx/graphics/buffers/storage_handler.hpp>
16#include <libsbx/graphics/buffers/push_handler.hpp>
18#include <libsbx/graphics/pipeline/pipeline.hpp>
19#include <libsbx/graphics/pipeline/graphics_pipeline.hpp>
21#include <libsbx/graphics/descriptor/descriptor.hpp>
22#include <libsbx/graphics/descriptor/descriptor_set.hpp>
24namespace sbx::graphics {
30 inline static constexpr auto global_set_id = std::uint32_t{0u};
31 inline static constexpr auto per_draw_call_set_id = std::uint32_t{1u};
49 template<
typename Descriptor>
50 requires (std::is_base_of_v<descriptor, Descriptor>)
51 auto push(
const std::string& name,
const Descriptor&
descriptor) ->
void {
57 template<
typename Descriptor>
58 requires (std::is_base_of_v<descriptor, Descriptor>)
64 auto binding = _pipeline->find_descriptor_binding(name, _set);
67 throw std::runtime_error(fmt::format(
"Failed to find descriptor binding for descriptor '{}'", name));
86 struct descriptor_entry {
89 std::uint32_t binding;
92 template<
typename Descriptor>
93 requires (std::is_base_of_v<descriptor, Descriptor>)
94 auto _push(
const std::string& name,
const Descriptor&
descriptor) ->
void {
95 auto binding = _pipeline->find_descriptor_binding(name, _set);
98 throw std::runtime_error(fmt::format(
"Failed to find descriptor binding for descriptor '{}'", name));
101 auto descriptor_type = _pipeline->find_descriptor_type_at_binding(_set, *binding);
103 if (!descriptor_type) {
105 throw std::runtime_error(fmt::format(
"Failed to find descriptor type for descriptor '{}' set: {} binding {}", name, _set, *binding));
117 auto _recreate_descriptor_sets() -> void;
123 std::array<std::unique_ptr<graphics::descriptor_set>, graphics::swapchain::max_frames_in_flight> _descriptor_sets{};
125 std::map<std::string, descriptor_entry> _descriptors{};
Definition: command_buffer.hpp:15
Definition: descriptor_handler.hpp:26
Definition: descriptor_set.hpp:13
Definition: descriptor.hpp:38
Definition: pipeline.hpp:21
Definition: resource_storage.hpp:18
Definition: storage_handler.hpp:17
Definition: descriptor.hpp:13
A non-owning pointer that can be used to observe the value of a pointer.
Definition: observer_ptr.hpp:28