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

◆ topology_runs()

std::vector< DrawRun > MayaFlux::Nodes::Network::AssemblyOperator::topology_runs ( ) const
overridevirtual

Coalesces adjacent items sharing a concatenable topology into one run; strip/fan items are always reported separately.

Reimplemented from MayaFlux::Nodes::Network::GraphicsOperator.

Definition at line 180 of file AssemblyOperator.cpp.

181{
182 std::vector<DrawRun> runs;
183 uint32_t offset = 0;
184
185 for (const auto& item : m_items) {
186 const auto count = static_cast<uint32_t>(item->get_vertex_count());
187 const auto topo = item->get_primitive_topology();
188
189 if (!runs.empty() && runs.back().topology == topo && is_concatenable_topology(topo)) {
190 runs.back().vertex_count += count;
191 } else {
192 runs.push_back(DrawRun { .topology = topo, .vertex_offset = offset, .vertex_count = count });
193 }
194
195 offset += count;
196 }
197
198 return runs;
199}
size_t count
float offset
std::vector< std::shared_ptr< GpuSync::GeometryWriterNode > > m_items
Portal::Graphics::DrawRun DrawRun
constexpr bool is_concatenable_topology(PrimitiveTopology topology) noexcept
Whether two adjacent spans of this topology can be concatenated without altering the primitives they ...

References count, m_items, offset, and MayaFlux::Portal::Graphics::DrawRun::topology.