MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ update()

void MayaFlux::Buffers::SliceSet::update ( SliceId  id,
std::span< const uint8_t >  bytes 
)

Replace a block's vertices.

Same size writes in place. A different size shifts every later block.

Definition at line 46 of file SliceSet.cpp.

47{
48 auto it = m_slices.find(id);
49 if (it == m_slices.end() || bytes.size() % m_stride != 0) {
51 "SliceSet::update: unknown slice {} or {} bytes is not a whole number of {} byte vertices",
52 id, bytes.size(), m_stride);
53 return;
54 }
55
56 auto& slice = it->second;
57
58 if (bytes.size() == slice.byte_size) {
59 if (!bytes.empty()) {
60 std::memcpy(m_mirror.data() + slice.byte_offset, bytes.data(), bytes.size());
61 mark_dirty(slice.byte_offset, slice.byte_offset + bytes.size());
62 }
63 return;
64 }
65
66 const auto first = m_mirror.begin() + static_cast<std::ptrdiff_t>(slice.byte_offset);
67 m_mirror.erase(first, first + static_cast<std::ptrdiff_t>(slice.byte_size));
68 m_mirror.insert(m_mirror.begin() + static_cast<std::ptrdiff_t>(slice.byte_offset),
69 bytes.begin(), bytes.end());
70 slice.byte_size = bytes.size();
71
72 const auto position = std::ranges::find(m_memory_order, id);
73 repack_from(static_cast<size_t>(position - m_memory_order.begin()));
74 mark_dirty(slice.byte_offset, m_mirror.size());
75 m_runs_changed = true;
76}
#define MF_ERROR(comp, ctx,...)
std::optional< glm::vec3 > position
Definition Decoder.cpp:93
void mark_dirty(size_t start, size_t end)
Definition SliceSet.cpp:213
std::unordered_map< SliceId, Slice > m_slices
Definition SliceSet.hpp:114
std::vector< SliceId > m_memory_order
Definition SliceSet.hpp:115
void repack_from(size_t memory_index)
Definition SliceSet.cpp:198
std::vector< uint8_t > m_mirror
Definition SliceSet.hpp:117
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Buffers
Buffers, Managers, processors and processing chains.
std::vector< double > slice(std::span< const double > data, double start_ratio, double end_ratio)
Extract a contiguous slice by ratio, returning a new vector.

References MayaFlux::Journal::BufferManagement, MayaFlux::Journal::Buffers, m_memory_order, m_mirror, m_runs_changed, m_slices, m_stride, mark_dirty(), MF_ERROR, position, and repack_from().

Referenced by MayaFlux::Buffers::FormaProcessor::set_bytes(), and MayaFlux::Buffers::FormaProcessor::update_slice().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: