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

◆ compute_frame()

void MayaFlux::Nodes::GpuSync::PathGeneratorNode::compute_frame ( )
overridevirtual

Compute frame - generates interpolated vertices from control points.

Implements MayaFlux::Nodes::GpuSync::GpuSync.

Definition at line 546 of file PathGeneratorNode.cpp.

547{
548 if (m_control_points.empty() && m_draw_vertices.empty() && m_completed_draws.empty()) {
550 return;
551 }
552
553 if (m_geometry_dirty) {
555 m_attributes_dirty = false;
556 } else if (m_attributes_dirty) {
558 m_attributes_dirty = false;
559 m_vertex_data_dirty = true;
560 }
561
562 if (!m_vertex_data_dirty) {
563 return;
564 }
565
566 m_combined_cache.clear();
567 m_combined_cache.reserve(m_vertices.size() + m_completed_draws.size() + m_draw_vertices.size());
568 m_combined_cache.insert(m_combined_cache.end(), m_vertices.begin(), m_vertices.end());
571
572 if (m_combined_cache.empty()) {
574 return;
575 }
576
577#ifdef MAYAFLUX_PLATFORM_MACOS
578 m_expand_cache = expand_lines_to_triangles(m_combined_cache);
579 set_vertices<LineVertex>(std::span { m_expand_cache.data(), m_expand_cache.size() });
580
581 auto layout = get_vertex_layout();
582 layout->vertex_count = static_cast<uint32_t>(m_expand_cache.size());
583 set_vertex_layout(*layout);
584#else
585 set_vertices<LineVertex>(std::span { m_combined_cache.data(), m_combined_cache.size() });
586
587 auto layout = get_vertex_layout();
588 layout->vertex_count = static_cast<uint32_t>(m_combined_cache.size());
589 set_vertex_layout(*layout);
590#endif
591
592 m_vertex_data_dirty = false;
593}
bool m_vertex_data_dirty
Flag: vertex data or layout changed since last GPU upload.
std::optional< Kakshya::VertexLayout > get_vertex_layout() const
Get cached vertex layout.
void set_vertex_layout(const Kakshya::VertexLayout &layout)
Set cached vertex layout.
void resize_vertex_buffer(uint32_t vertex_count, bool preserve_data=false)
Resize vertex buffer to hold specified number of vertices.
void refresh_attributes()
Rewrite colour and thickness over existing geometry, no curve evaluation.
std::vector< LineVertex > m_control_points
Control points, newest first: index 0 is the most recently added.

References MayaFlux::Nodes::GpuSync::GeometryWriterNode::get_vertex_layout(), m_attributes_dirty, m_combined_cache, m_completed_draws, m_control_points, m_draw_vertices, m_geometry_dirty, MayaFlux::Nodes::GpuSync::GeometryWriterNode::m_vertex_data_dirty, m_vertices, refresh_attributes(), regenerate_geometry(), MayaFlux::Nodes::GpuSync::GeometryWriterNode::resize_vertex_buffer(), and MayaFlux::Nodes::GpuSync::GeometryWriterNode::set_vertex_layout().

+ Here is the call graph for this function: