sandbox
Loading...
Searching...
No Matches
storage_handler.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_GRAPHICS_BUFFERS_STORAGE_HANDLER_HPP_
3#define LIBSBX_GRAPHICS_BUFFERS_STORAGE_HANDLER_HPP_
4
5#include <memory>
6#include <optional>
7#include <span>
8
9#include <libsbx/memory/observer_ptr.hpp>
10
11#include <libsbx/graphics/pipeline/shader.hpp>
12
13#include <libsbx/graphics/buffers/storage_buffer.hpp>
14
15namespace sbx::graphics {
16
18
19public:
20
21 storage_handler(VkBufferUsageFlags additional_usage = 0u, const std::optional<shader::uniform_block>& uniform_block = std::nullopt);
22
23 template<typename Type>
24 auto push(std::span<const Type> buffer) -> void;
25
26 template<typename Type>
27 auto push(const Type& object, std::size_t size, std::size_t offset) -> void;
28
29 template<typename Type>
30 auto push(const std::string& uniform_name, const Type& object, std::size_t size = 0) -> void;
31
32 auto storage_buffer() const noexcept -> const graphics::storage_buffer&;
33
34 auto update(const std::optional<shader::uniform_block>& uniform_block) -> bool;
35
36 auto buffer_address() const noexcept -> std::uint64_t;
37
38private:
39
40 std::optional<shader::uniform_block> _uniform_block;
41 std::unique_ptr<graphics::storage_buffer> _storage_buffer;
42 VkBufferUsageFlags _additional_usage;
43
44}; // class storage_handler
45
46} // namespace sbx::graphics
47
48#include <libsbx/graphics/buffers/storage_handler.ipp>
49
50#endif // LIBSBX_GRAPHICS_BUFFERS_STORAGE_HANDLER_HPP_
Definition: buffer.hpp:21
Definition: storage_buffer.hpp:17
Definition: storage_handler.hpp:17