bool PatchImpl::apply_internal_poly(ProcessContext& context, BufferFactory& bufs, Raul::Maid& maid, uint32_t poly) { ThreadManager::assert_thread(THREAD_PROCESS); // TODO: Subpatch dynamic polyphony (i.e. changing port polyphony) for (List<NodeImpl*>::iterator i = _nodes.begin(); i != _nodes.end(); ++i) (*i)->apply_poly(maid, poly); for (List<NodeImpl*>::iterator i = _nodes.begin(); i != _nodes.end(); ++i) { for (uint32_t j = 0; j < (*i)->num_ports(); ++j) { PortImpl* const port = (*i)->port_impl(j); if (port->is_input() && dynamic_cast<InputPort*>(port)->direct_connect()) port->setup_buffers(bufs, port->poly()); port->connect_buffers(context.offset()); } } const bool polyphonic = parent_patch() && (poly == parent_patch()->internal_poly()); for (List<PortImpl*>::iterator i = _output_ports.begin(); i != _output_ports.end(); ++i) (*i)->setup_buffers(bufs, polyphonic ? poly : 1); _internal_poly = poly; return true; }