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