Allow indirect IConnectionPoint connections

This is needed to support Ardour. These extra hops and serialization
steps will probably hurt performance, but outside of some huge hacks (to
connect the components directly anyways) there's not much else we can
do.
This commit is contained in:
Robbert van der Helm
2020-12-25 14:20:37 +01:00
parent fbad4a65ab
commit 70cb6dad89
9 changed files with 175 additions and 95 deletions
+12 -3
View File
@@ -26,9 +26,6 @@
#include "../editor.h"
#include "common.h"
// Forward declarations
class Vst3PlugFrameProxyImpl;
/**
* A holder for plugin object instance created from the factory. This stores all
* relevant interface smart pointers to that object so we can handle control
@@ -57,6 +54,18 @@ struct InstanceInterfaces {
*/
Steinberg::IPtr<Vst3HostContextProxy> host_context_proxy;
/**
* If the host connects two objects indirectly using a connection proxy (as
* allowed by the VST3 specification), then we also can't connect the
* objects directly on the Wine side. In that case we'll have to create this
* proxy object, pass it to the plugin, and if the plugin then calls
* `IConnectionPoint::notify()` on it we'll pass that call through to the
* `IConnectionPoint` instance passed to us by the host (which will then in
* turn call `IConnectionPoint::notify()` on our plugin proxy object).
* Proxies for days.
*/
Steinberg::IPtr<Vst3ConnectionPointProxy> connection_point_proxy;
/**
* After a call to `IEditController::setComponentHandler()`, we'll create a
* proxy of that component handler just like we did for the plugin object.