894{
896 size_t out_idx = 0;
897
898 for (uint64_t layer = start_frame;
899 layer < start_frame + num_frames && layer <
m_data.size() && out_idx <
output.size();
900 ++layer) {
902 const auto* vec = std::get_if<std::vector<T>>(&
m_data[layer]);
903 if (!vec || vec->empty())
904 return;
905 const size_t copy_n = std::min(layer_elems, std::min(vec->size(),
output.size() - out_idx));
906 std::copy_n(vec->begin(),
static_cast<std::ptrdiff_t
>(copy_n),
output.begin() +
static_cast<std::ptrdiff_t
>(out_idx));
907 out_idx += copy_n;
908 });
909 }
910
911 if (out_idx <
output.size()) {
912 std::fill(
output.begin() +
static_cast<std::ptrdiff_t
>(out_idx),
output.end(), T {});
913 }
914}
std::shared_ptr< Core::VKImage > output
Memory::SeqlockArray m_slot_locks
std::vector< DataVariant > m_data
bool seqlock_read_void(const Seqlock &lock, uint32_t max_attempts, Fn &&fn)
Invoke a void read functor under a Seqlock with a bounded retry count.