Add boilerplate for connecting Vst3PluginProxies

This way we can identify the actual objects and directly connect them on
the Wine side.
This commit is contained in:
Robbert van der Helm
2020-12-18 13:44:55 +01:00
parent f83e526fc6
commit 41a9ca5a36
2 changed files with 24 additions and 3 deletions
@@ -154,6 +154,12 @@ class Vst3PluginProxy : public YaAudioProcessor,
DECLARE_FUNKNOWN_METHODS
/**
* Get this object's instance ID. Used in `IConnectionPoint` to identify and
* connect specific objects.
*/
inline size_t instance_id() const { return arguments.instance_id; }
// We'll define messages for functions that have identical definitions in
// multiple interfaces below. When the Wine plugin host process handles
// these it should check which of the interfaces is supported on the host.
+18 -3
View File
@@ -189,9 +189,24 @@ tresult PLUGIN_API Vst3PluginProxyImpl::getState(Steinberg::IBStream* state) {
}
tresult PLUGIN_API Vst3PluginProxyImpl::connect(IConnectionPoint* other) {
// TODO: Implement
bridge.logger.log("TODO IConnectionPoint::connect()");
return Steinberg::kNotImplemented;
// When the host is trying to connect two plugin proxy objects, we can just
// identify the other object by its instance IDs and then connect the
// objects in the Wine plugin host directly
if (auto other_proxy = dynamic_cast<Vst3PluginProxy*>(other)) {
// TODO: Remove debug
bridge.logger.log("Host is trying to connect us with instance " +
std::to_string(other_proxy->instance_id()));
// TODO: Implement
bridge.logger.log("TODO IConnectionPoint::connect()");
return Steinberg::kNotImplemented;
} else {
// TODO: Add support for `ConnectionProxy` and similar objects
bridge.logger.log(
"WARNING: The host passed a proxy proxy object to "
"'IConnectionPoint::connect()'. This is currently not supported.");
return Steinberg::kNotImplemented;
}
}
tresult PLUGIN_API Vst3PluginProxyImpl::disconnect(IConnectionPoint* other) {