sandbox
Loading...
Searching...
No Matches
draw_list.hpp
1#ifndef LIBSBX_GRAPHICS_DRAW_LIST_HPP_
2#define LIBSBX_GRAPHICS_DRAW_LIST_HPP_
3
4#include <cstddef>
5#include <cstdint>
6
7#include <libsbx/utility/hashed_string.hpp>
8#include <libsbx/utility/logger.hpp>
9
10#include <libsbx/math/uuid.hpp>
11
12#include <libsbx/graphics/buffers/storage_buffer.hpp>
13#include <libsbx/graphics/images/image2d.hpp>
14#include <libsbx/graphics/images/separate_sampler.hpp>
15#include <libsbx/graphics/images/separate_image2d_array.hpp>
16
17namespace sbx::graphics {
18
20 std::uint32_t offset;
21 std::uint32_t count;
22}; // struct draw_command_range
23
24class draw_list {
25
26public:
27
28 using storage_buffer_container = std::unordered_map<std::size_t, storage_buffer_handle>;
29 using draw_command_range_container = std::unordered_map<math::uuid, draw_command_range>;
30
31 draw_list() = default;
32
33 virtual ~draw_list();
34
35 virtual auto update() -> void = 0;
36
37 auto buffers() const noexcept -> const storage_buffer_container&;
38
39 auto buffer(const utility::hashed_string& name) const -> const storage_buffer&;
40
41 auto images() const noexcept -> const separate_image2d_array&;
42
43 auto sampler() const noexcept -> const separate_sampler&;
44
45 auto draw_ranges(const utility::hashed_string& name) const noexcept -> const draw_command_range_container&;
46
47 auto draw_ranges(const std::size_t hash) const noexcept -> const draw_command_range_container&;
48
49 auto clear() -> void;
50
51 auto create_buffer(const utility::hashed_string& name, VkDeviceSize size, VkBufferUsageFlags additional_usage = 0) -> void;
52
53 template<typename Type>
54 auto update_buffer(const std::vector<Type>& buffer, const utility::hashed_string& name) -> void;
55
56protected:
57
58 auto get_buffer(const utility::hashed_string& name) -> storage_buffer&;
59
60 auto get_buffer(const utility::hashed_string& name) const -> const storage_buffer&;
61
62 auto add_image(const image2d_handle& handle) -> std::uint32_t;
63
64 auto push_draw_command_range(const utility::hashed_string& name, const math::uuid& id, const draw_command_range& range) -> void;
65
66 auto push_draw_command_range(const std::size_t hash, const math::uuid& id, const draw_command_range& range) -> void;
67
68private:
69
70 storage_buffer_container _buffers;
72 separate_sampler _sampler;
73 std::unordered_map<std::size_t, draw_command_range_container> _draw_ranges;
74
75}; // class draw_list
76
77} // namespace sbx::graphics
78
79#include <libsbx/graphics/draw_list.ipp>
80
81#endif // LIBSBX_GRAPHICS_DRAW_LIST_HPP_
Definition: buffer.hpp:20
Definition: draw_list.hpp:24
Definition: resource_storage.hpp:17
Definition: separate_image2d_array.hpp:15
Definition: separate_sampler.hpp:8
Definition: storage_buffer.hpp:16
Definition: uuid.hpp:159
Definition: hashed_string.hpp:15
Definition: draw_list.hpp:19