Store host pointer in the plugin proxy

This commit is contained in:
Robbert van der Helm
2022-09-09 14:54:13 +02:00
parent c98ca66838
commit 82e552098a
3 changed files with 12 additions and 3 deletions
@@ -85,7 +85,7 @@ clap_plugin_factory_proxy::plugin_factory_create_plugin(
// correct plugin instance, and callbacks made from the plugin to the // correct plugin instance, and callbacks made from the plugin to the
// correct host instance. // correct host instance.
self->bridge_.register_plugin_proxy(std::make_unique<clap_plugin_proxy>( self->bridge_.register_plugin_proxy(std::make_unique<clap_plugin_proxy>(
self->bridge_, *response.instance_id, *descriptor)); self->bridge_, *response.instance_id, *descriptor, host));
const auto& [plugin_proxy, _] = const auto& [plugin_proxy, _] =
self->bridge_.get_proxy(*response.instance_id); self->bridge_.get_proxy(*response.instance_id);
@@ -20,10 +20,12 @@
clap_plugin_proxy::clap_plugin_proxy(ClapPluginBridge& bridge, clap_plugin_proxy::clap_plugin_proxy(ClapPluginBridge& bridge,
size_t instance_id, size_t instance_id,
clap::plugin::Descriptor descriptor) clap::plugin::Descriptor descriptor,
const clap_host_t* host)
: bridge_(bridge), : bridge_(bridge),
instance_id_(instance_id), instance_id_(instance_id),
descriptor_(std::move(descriptor)), descriptor_(std::move(descriptor)),
host_(host),
plugin_vtable_(clap_plugin_t{ plugin_vtable_(clap_plugin_t{
.desc = descriptor_.get(), .desc = descriptor_.get(),
.plugin_data = this, .plugin_data = this,
+8 -1
View File
@@ -38,7 +38,8 @@ class clap_plugin_proxy {
*/ */
clap_plugin_proxy(ClapPluginBridge& bridge, clap_plugin_proxy(ClapPluginBridge& bridge,
size_t instance_id, size_t instance_id,
clap::plugin::Descriptor descriptor); clap::plugin::Descriptor descriptor,
const clap_host_t* host);
clap_plugin_proxy(const clap_plugin_proxy&) = delete; clap_plugin_proxy(const clap_plugin_proxy&) = delete;
clap_plugin_proxy& operator=(const clap_plugin_proxy&) = delete; clap_plugin_proxy& operator=(const clap_plugin_proxy&) = delete;
@@ -82,6 +83,12 @@ class clap_plugin_proxy {
size_t instance_id_; size_t instance_id_;
clap::plugin::Descriptor descriptor_; clap::plugin::Descriptor descriptor_;
/**
* The `clap_host_t*` passed when creating the instance. Any callbacks made
* by the proxied plugin instance must go through ere.
*/
const clap_host_t* host_;
/** /**
* The vtable for `clap_plugin`, requires that this object is never moved or * The vtable for `clap_plugin`, requires that this object is never moved or
* copied. We'll use the host data pointer instead of placing this vtable at * copied. We'll use the host data pointer instead of placing this vtable at