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