1#ifndef LIBSBX_GRAPHICS_DESCRIPTOR_DESCRIPTOR_HANDLER_HPP_
2#define LIBSBX_GRAPHICS_DESCRIPTOR_DESCRIPTOR_HANDLER_HPP_
9#include <libsbx/memory/observer_ptr.hpp>
11#include <libsbx/graphics/buffers/uniform_handler.hpp>
12#include <libsbx/graphics/buffers/storage_handler.hpp>
13#include <libsbx/graphics/buffers/push_handler.hpp>
15#include <libsbx/graphics/pipeline/pipeline.hpp>
17#include <libsbx/graphics/descriptor/descriptor.hpp>
18#include <libsbx/graphics/descriptor/descriptor_set.hpp>
19#include <libsbx/graphics/graphics_module.hpp>
21namespace sbx::graphics {
31 _descriptor_sets.resize(graphics::swapchain::max_frames_in_flight);
39 _descriptor_sets.clear();
42 template<
typename Descriptor>
43 requires (std::is_base_of_v<descriptor, Descriptor>)
44 auto push(
const std::string& name,
const Descriptor&
descriptor) ->
void {
71 auto&
graphics_module = core::engine::get_module<graphics::graphics_module>();
84 _descriptor_sets.resize(graphics::swapchain::max_frames_in_flight);
93 auto&
graphics_module = core::engine::get_module<graphics::graphics_module>();
99 auto write_descriptor_sets = std::vector<VkWriteDescriptorSet>{};
100 write_descriptor_sets.reserve(_descriptors.size());
102 for (
const auto& [name,
descriptor] : _descriptors) {
111 _descriptors.clear();
118 struct descriptor_entry {
121 std::uint32_t binding;
124 template<
typename Descriptor>
125 requires (std::is_base_of_v<descriptor, Descriptor>)
126 auto _push(
const std::string& name,
const Descriptor&
descriptor) ->
void {
127 auto binding = _pipeline->find_descriptor_binding(name);
130 throw std::runtime_error(fmt::format(
"Failed to find descriptor binding for descriptor '{}'", name));
133 auto descriptor_type = _pipeline->find_descriptor_type_at_binding(*binding);
135 if (!descriptor_type) {
136 throw std::runtime_error(fmt::format(
"Failed to find descriptor type for descriptor '{}'", name));
146 std::vector<std::unique_ptr<descriptor_set>> _descriptor_sets{};
148 std::map<std::string, descriptor_entry> _descriptors{};
Definition: command_buffer.hpp:14
Definition: descriptor_handler.hpp:23
Definition: descriptor_set.hpp:12
Definition: descriptor.hpp:33
Module for managing rendering specific tasks.
Definition: graphics_module.hpp:59
Definition: pipeline.hpp:18
Definition: push_handler.hpp:16
Definition: storage_handler.hpp:18
Definition: descriptor.hpp:12
A non-owning pointer that can be used to observe the value of a pointer.
Definition: observer_ptr.hpp:27