222 {
225 "evolve: null NodeNetwork");
226 return false;
227 }
228
229 if (!has_target(render)) {
230 return false;
231 }
232
233 if (!
network->has_operator()) {
234 auto particles = std::dynamic_pointer_cast<Nodes::Network::ParticleNetwork>(
network);
235 if (particles && particles->default_operator_enabled()) {
236 particles->create_operator<Nodes::Network::PhysicsOperator>();
237 }
238 }
239
240 const auto* primary =
dynamic_cast<const Nodes::Network::GraphicsOperator*
>(
network->get_operator());
241 if (!primary) {
243 "evolve: network has no primary GraphicsOperator to read a vertex layout from");
244 return false;
245 }
246
248 auto field =
chain->find<Nodes::Network::GpuFieldOperator>();
249 if (!field) {
250 field =
chain->emplace<Nodes::Network::GpuFieldOperator>(primary->get_vertex_layout(), spatial);
251 } else {
253 "evolve: network already carries a GpuFieldOperator, its SpatialFieldConfig is kept");
254 }
255
256 if (bind) {
257 bind(field);
258 }
259
261
262 auto buffer = std::make_shared<Buffers::NetworkGeometryBuffer>(
network);
264 buffer->setup_rendering(render);
265 return true;
266 }
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
Core::GlobalNetworkConfig network
std::shared_ptr< NetworkGeometryBuffer > buffer
BufferProcessingChain * chain
@ Init
Engine/subsystem initialization.
@ API
MayaFlux/API Wrapper and convenience functions.
@ VISUAL_RATE
Nodes that process at the visual frame rate.
void register_node_network(const std::shared_ptr< Nodes::Network::NodeNetwork > &network, const Nodes::ProcessingToken &token)
Registers a node network with the default engine's node graph manager.
void register_graphics_buffer(const std::shared_ptr< Buffers::VKBuffer > &buffer, Buffers::ProcessingToken token)
Registers a VKBuffer with the default engine's buffer manager.