MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Nodes::Network::AssemblyNetwork Class Reference

Holds hundreds or thousands of independent geometry items with no shared topology, layout, or relation to each other, rendered as one milled draw. More...

#include <AssemblyNetwork.hpp>

+ Inheritance diagram for MayaFlux::Nodes::Network::AssemblyNetwork:
+ Collaboration diagram for MayaFlux::Nodes::Network::AssemblyNetwork:

Classes

struct  VertexInput
 

Public Types

using Source = std::variant< VertexInput, Kakshya::MeshData, std::shared_ptr< GpuSync::GeometryWriterNode > >
 

Public Member Functions

std::shared_ptr< GpuSync::MeshWriterNode > add_geometry (const Kakshya::MeshData &mesh)
 
void add_geometry (const Source &source)
 
std::shared_ptr< GpuSync::GeometryLeafNode > add_geometry (const VertexInput &input)
 
void add_geometry (std::shared_ptr< GpuSync::GeometryWriterNode > node)
 
std::shared_ptr< GpuSync::GeometryLeafNode > add_geometry (std::vector< glm::vec3 > positions, Portal::Graphics::PrimitiveTopology topology=Portal::Graphics::PrimitiveTopology::POINT_LIST)
 
std::shared_ptr< GpuSync::GeometryLeafNode > add_geometry (std::vector< Kakshya::Vertex > vertices, Portal::Graphics::PrimitiveTopology topology=Portal::Graphics::PrimitiveTopology::POINT_LIST)
 
AssemblyOperator * assembly () const
 
 AssemblyNetwork ()
 
size_t get_node_count () const override
 Get the number of nodes in the network.
 
const NetworkOperator * get_operator () const override
 
NetworkOperator * get_operator () override
 
bool has_operator () const override
 
void process_batch (unsigned int num_samples) override
 Process the network for the given number of samples.
 
bool remove_geometry (const std::shared_ptr< GpuSync::GeometryWriterNode > &node)
 
- Public Member Functions inherited from MayaFlux::Nodes::Network::NodeNetwork
void add_channel_usage (uint32_t channel_id)
 Register network usage on a specific channel.
 
void clear_timestep ()
 Return to the frame period.
 
virtual std::optional< std::vector< double > > get_audio_buffer () const
 Get cached audio buffer from last process_batch()
 
uint32_t get_block_size () const
 
uint32_t get_channel_mask () const
 Get channel mask (bitfield of registered channels)
 
uint32_t get_frame_rate () const
 
virtual std::unordered_map< std::string, std::string > get_metadata () const
 Get network metadata for debugging/visualization.
 
virtual std::optional< std::span< const double > > get_node_audio_buffer (size_t) const
 Get output of specific internal node as audio buffer (for ONE_TO_ONE mapping)
 
virtual std::optional< double > get_node_output (size_t index) const
 Get output of specific internal node (for ONE_TO_ONE mapping)
 
std::shared_ptr< OperatorChain > get_operator_chain () const
 Access the secondary operator chain.
 
OutputMode get_output_mode () const
 Get the current output routing mode.
 
double get_output_scale () const
 Get the current output scale factor.
 
std::vector< uint32_t > get_registered_channels () const
 Get all channels this network is registered on.
 
RoutingState & get_routing_state ()
 Retrieves the current routing state of the network (non-const)
 
const RoutingState & get_routing_state () const
 Retrieves the current routing state of the network.
 
uint32_t get_sample_rate () const
 
float get_timestep () const
 Seconds one visual frame advances this network.
 
Topology get_topology () const
 Get the current topology.
 
virtual void initialize ()
 Called once before first process_batch()
 
bool is_enabled () const
 Check if network is enabled.
 
bool is_processed_this_cycle () const
 Check if network has been processed this cycle (lock-free)
 
bool is_processing () const
 Check if network is currently processing (lock-free)
 
bool is_registered_on_channel (uint32_t channel_id) const
 Check if network is registered on a channel.
 
virtual void map_parameter (const std::string &param_name, const std::shared_ptr< Node > &source, MappingMode mode=MappingMode::BROADCAST)
 Map external node output to network parameter.
 
virtual void map_parameter (const std::string &param_name, const std::shared_ptr< NodeNetwork > &source_network)
 Map external node network to network parameters (ONE_TO_ONE)
 
void mark_processed (bool processed)
 Mark network as processed this cycle (lock-free)
 
void mark_processing (bool processing)
 Mark network as processing or not (lock-free)
 
bool needs_channel_routing () const
 Checks if the network is currently in a routing transition phase.
 
void remove_channel_usage (uint32_t channel_id)
 Unregister network from a specific channel.
 
void request_reset_from_channel (uint32_t channel_id)
 Request a reset from a specific channel.
 
virtual void reset ()
 Reset network to initial state.
 
void set_block_size (uint32_t block_size)
 
void set_channel_mask (uint32_t mask)
 Set channel mask directly.
 
void set_enabled (bool enabled)
 Enable/disable the network.
 
void set_frame_rate (uint32_t frame_rate)
 Frame rate the owning manager runs visual processing at.
 
void set_output_mode (OutputMode mode)
 Set the network's output routing mode.
 
void set_output_scale (double scale)
 Set the scalar multiplier applied to the network's output buffer after processing.
 
void set_sample_rate (uint32_t sample_rate)
 
void set_timestep (float dt)
 Advance this network by a fixed number of seconds per frame instead of the frame period.
 
virtual void set_topology (Topology topology)
 Set the network's topology.
 
virtual void unmap_parameter (const std::string &param_name)
 Remove parameter mapping.
 
virtual ~NodeNetwork ()=default
 

Private Attributes

std::unique_ptr< AssemblyOperator > m_operator
 

Additional Inherited Members

- Protected Member Functions inherited from MayaFlux::Nodes::Network::NodeNetwork
void apply_output_scale ()
 Apply m_output_scale to m_last_audio_buffer.
 
void ensure_initialized ()
 Ensure initialize() is called exactly once.
 
- Static Protected Member Functions inherited from MayaFlux::Nodes::Network::NodeNetwork
static std::unordered_map< size_t, std::vector< size_t > > build_chain_neighbors (size_t count)
 Build neighbor map for CHAIN topology.
 
static std::unordered_map< size_t, std::vector< size_t > > build_grid_2d_neighbors (size_t width, size_t height)
 Build neighbor map for GRID_2D topology.
 
static std::unordered_map< size_t, std::vector< size_t > > build_grid_3d_neighbors (size_t width, size_t height, size_t depth)
 Build neighbor map for GRID_3D topology.
 
static std::unordered_map< size_t, std::vector< size_t > > build_ring_neighbors (size_t count)
 Build neighbor map for RING topology.
 
- Protected Attributes inherited from MayaFlux::Nodes::Network::NodeNetwork
std::atomic_flag m_audio_buffer_lock = ATOMIC_FLAG_INIT
 Spinlock guarding m_last_audio_buffer.
 
uint32_t m_block_size { 512 }
 
std::atomic< uint32_t > m_channel_mask { 0 }
 Bitfield of channels this network is registered on.
 
bool m_enabled = true
 
uint32_t m_frame_rate { 60 }
 
bool m_initialized = false
 
std::vector< double > m_last_audio_buffer
 
std::shared_ptr< OperatorChain > m_operator_chain
 
OutputMode m_output_mode = OutputMode::NONE
 
double m_output_scale { 1.0 }
 Post-processing scalar applied to m_last_audio_buffer each batch.
 
std::vector< ParameterMapping > m_parameter_mappings
 
std::atomic< uint32_t > m_pending_reset_mask { 0 }
 
std::atomic< bool > m_processed_this_cycle { false }
 
std::atomic< bool > m_processing_state { false }
 Per-channel processing state (lock-free atomic flags)
 
uint32_t m_sample_rate { 48000 }
 
std::optional< float > m_timestep
 
Topology m_topology = Topology::INDEPENDENT
 

Detailed Description

Holds hundreds or thousands of independent geometry items with no shared topology, layout, or relation to each other, rendered as one milled draw.

Thin wrapper around a single AssemblyOperator, forwarding add_geometry()/ remove_geometry() so the common case doesn't require reaching into create_operator<AssemblyOperator>() manually. Not a specialized operator (PathOperator/TopologyOperator/PhysicsOperator interpolate, connect, or simulate; this does none of that), and not built-in-primitive convenience: callers supply their own geometry from Kinesis generators, input, or procedural code and this just holds and draws it.

Renders through the standard NetworkGeometryBuffer(network)->setup_rendering path with triangulate enabled: milling erases the per-item layout/ topology mismatch, so a heterogeneous, arbitrarily large item count draws through exactly one RenderProcessor pass, the same way a mixed-topology PathOperator does.

Definition at line 28 of file AssemblyNetwork.hpp.


The documentation for this class was generated from the following files: