Store whether two objects are connected directly

In the host context. So when the plugin wants to create an `IMessage`
object to send a message to the other object, we don't have to go
through the host.
This commit is contained in:
Robbert van der Helm
2020-12-24 13:22:54 +01:00
parent 4f8bfbcda6
commit 1186e7d775
2 changed files with 20 additions and 1 deletions
@@ -97,6 +97,15 @@ class Vst3HostContextProxy : public YaHostApplication {
return arguments.owner_instance_id;
}
/**
* Used to shortcut calls to
* `IHostApplication::createInstance(IMessage::iid, IMessage::iid, &obj)`
* when two objects (a processor and a controller instance, for example) are
* directly connected. This way we don't have to proxy the message created
* by the host, which can save a lot of resoruces.
*/
std::atomic_bool are_objects_directly_connected = false;
private:
ConstructArgs arguments;
};
+11 -1
View File
@@ -170,9 +170,19 @@ void Vst3Bridge::run() {
},
[&](const YaConnectionPoint::Connect& request)
-> YaConnectionPoint::Connect::Response {
// We can directly connect the underlying objects
// We can directly connect the underlying objects. We'll mark
// that we're using a direct connection on our host context
// proxy so that when the plugin wants to create an `IMessage`
// object, we can keep everything local and we Don't have to go
// through the host.
// TODO: Add support for connecting objects through a proxy
// object provided by the host
if (object_instances[request.instance_id].host_context_proxy) {
object_instances[request.instance_id]
.host_context_proxy->are_objects_directly_connected =
true;
}
return object_instances[request.instance_id]
.connection_point->connect(
object_instances[request.other_instance_id]