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

◆ processing_function()

void MayaFlux::Buffers::AggregateBindingsProcessor::processing_function ( std::shared_ptr< Buffer buffer)
overridevirtual

BufferProcessor interface - uploads all aggregates.

Parameters
bufferThe buffer this processor is attached to

Implements MayaFlux::Buffers::BufferProcessor.

Definition at line 136 of file AggregateBindingsProcessor.cpp.

137{
138 if (m_aggregates.empty()) {
139 return;
140 }
141
142 auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer);
143 if (!vk_buffer) {
145 "AggregateBindingsProcessor requires VKBuffer, got different buffer type");
146 return;
147 }
148
149 for (auto& [aggregate_name, aggregate] : m_aggregates) {
150 if (aggregate.nodes.empty()) {
151 continue;
152 }
153
154 for (size_t i = 0; i < aggregate.nodes.size(); i++) {
155 aggregate.staging_data[i] = static_cast<float>(
156 aggregate.nodes[i]->get_last_output());
157 }
158
160 aggregate.staging_data.data(),
161 aggregate.staging_data.size() * sizeof(float),
162 aggregate.target_buffer);
163 }
164
165 bool attached_is_target = false;
166 for (const auto& [name, aggregate] : m_aggregates) {
167 if (aggregate.target_buffer == vk_buffer) {
168 attached_is_target = true;
169 break;
170 }
171 }
172
173 if (!attached_is_target && !m_aggregates.empty()) {
174 auto& first_aggregate = m_aggregates.begin()->second;
175
176 if (!first_aggregate.nodes.empty()) {
178 first_aggregate.staging_data.data(),
179 first_aggregate.staging_data.size() * sizeof(float),
180 vk_buffer);
181 }
182 }
183}
#define MF_RT_ERROR(comp, ctx,...)
std::unordered_map< std::string, AggregateBinding > m_aggregates
void upload_to_gpu(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging)
Upload raw data to GPU buffer (auto-detects host-visible vs device-local)
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, m_aggregates, MF_RT_ERROR, and MayaFlux::Buffers::upload_to_gpu().

+ Here is the call graph for this function: