summaryrefslogtreecommitdiffstats
path: root/src/engine/OutputPort.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-20 21:52:36 +0000
committerDavid Robillard <d@drobilla.net>2010-02-20 21:52:36 +0000
commit46e5de590817756b21a7a5d99bd4963df343f455 (patch)
tree7d7b3b63297b24d84e5b42cc8aeb22d4212738b5 /src/engine/OutputPort.cpp
parentb96a4015ae39b5bdd9afbd82898c0168a0a8e613 (diff)
downloadingen-46e5de590817756b21a7a5d99bd4963df343f455.tar.gz
ingen-46e5de590817756b21a7a5d99bd4963df343f455.tar.bz2
ingen-46e5de590817756b21a7a5d99bd4963df343f455.zip
Heavy overhaul of buffer management and polyphony.
* Working polyphony when nodes are instantiated at desired polyphony level (dynamic still doesn't work) * Use shared silent buffer for disconnected audio inputs (save memory) * Eliminate redundant patch compiling on delete and disconnect-all events that have child events * Fix a ton of crash bugs and other issues I've since forgotten git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2468 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/OutputPort.cpp')
-rw-r--r--src/engine/OutputPort.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/engine/OutputPort.cpp b/src/engine/OutputPort.cpp
index c6ad3356..269d6da6 100644
--- a/src/engine/OutputPort.cpp
+++ b/src/engine/OutputPort.cpp
@@ -46,15 +46,24 @@ OutputPort::OutputPort(BufferFactory& bufs,
if (type == PortType::CONTROL)
_broadcast = true;
+
+ setup_buffers(bufs, poly);
+}
+
+
+void
+OutputPort::get_buffers(BufferFactory& bufs, Raul::Array<BufferFactory::Ref>* buffers, uint32_t poly)
+{
+ for (uint32_t v = 0; v < poly; ++v)
+ buffers->at(v) = bufs.get(_type, _buffer_size);
}
void
OutputPort::pre_process(Context& context)
{
- connect_buffers();
for (uint32_t v = 0; v < _poly; ++v)
- buffer(v)->prepare_write(context);
+ _buffers->at(v)->prepare_write(context);
}
@@ -62,7 +71,7 @@ void
OutputPort::post_process(Context& context)
{
for (uint32_t v = 0; v < _poly; ++v)
- buffer(v)->prepare_read(context);
+ _buffers->at(v)->prepare_read(context);
if (_broadcast)
broadcast_value(context, false);