50 SliceId add(std::span<const uint8_t> bytes,
51 std::optional<Portal::Graphics::PrimitiveTopology>
topology = std::nullopt);
58 void update(
SliceId id, std::span<const uint8_t> bytes);
64 void set_visible(
SliceId id,
bool visible);
67 void bring_to_front(
SliceId id);
73 [[nodiscard]] uint32_t vertex_count() const noexcept;
76 [[nodiscard]]
size_t size_bytes() const noexcept {
return m_mirror.size(); }
79 [[nodiscard]]
size_t size() const noexcept {
return m_slices.size(); }
82 [[nodiscard]]
bool contains(
SliceId id)
const noexcept {
return m_slices.contains(
id); }
88 [[nodiscard]] std::optional<std::vector<Portal::Graphics::DrawRun>> take_runs();
97 void flush(
const std::shared_ptr<VKBuffer>& target, std::shared_ptr<VKBuffer>& staging);
101 size_t byte_offset {};
104 bool visible {
true };
107 void repack_from(
size_t memory_index);
108 void mark_dirty(
size_t start,
size_t end);
118 std::vector<std::pair<size_t, size_t>>
m_dirty;
119 bool m_runs_changed {
true };
120 bool m_all_dirty {
false };