Update the VST3 interface instantiation docs

This commit is contained in:
Robbert van der Helm
2020-12-08 18:22:44 +01:00
parent e099255b92
commit 7828fc7bef
+11 -15
View File
@@ -54,7 +54,7 @@ instantiated and managed by the host. The model works as follows:
that implements those functions through yabridge's `Vst3MessageHandler` that implements those functions through yabridge's `Vst3MessageHandler`
callback interface. callback interface.
## Plugin Factory ## Interface Instantiation
Creating a new instance of an interface using the plugin factory wroks as Creating a new instance of an interface using the plugin factory wroks as
follows: follows:
@@ -72,20 +72,16 @@ follows:
this operation fails and returns a null pointer, we'll send an `std::nullopt` this operation fails and returns a null pointer, we'll send an `std::nullopt`
back to indicate that the instantiation was not successful and we relay this back to indicate that the instantiation was not successful and we relay this
on the plugin side. on the plugin side.
5. Using the newly created instance (which will be returned by the factory as an 5. We will generate a unique instance identifier for the newly generated object
`IPtr<IFoo>`), we will instantiate a `YaFoo` object using `YaFooHostImpl`. so we can refer to it later. We then serialize that identifier along with
This will read all simple data members from the `IFoo` smart pointer just what other static data is available in `IFoo` in a `YaFoo::Arguments` object.
like described in the above section. The `YaFoo` object will also gen a 6. We then move `IPtr<IFoo>` to an `std::map<size_t, IPtr<IFoo>>` with that
unique identifier which we generate on the Wine side using an atomic unique identifier we generated earlier as a key so we can refer to it later
fetch-and-add on a counter. This way we can refer to this specific isntance in later function calls.
when doing callbacks. 7. On the plugin side we can now use the `YaFoo::Arguments` object we received
6. Still on the Wine side of things, the `IPtr<IFoo>` will be moved to an to create a `YaFooPluginImpl` object that can send control messages to the
`std::map<size_t, IPtr<IFoo>>` with that unique identifier we generated Wine plugin host.
earlier as a key so we can refer to it later. 8. Finally a pointer to this `YaFooPluginImpl` gets returned as the last step of
7. Finally on the plugin side we will create an `YaFooPluginImpl` object that
can send control messages to the Wine plugin host, and then we'll deserialize
the `YaFoo` object we receive into that.
8. A pointer to this `YaFooPluginImpl` then gets returned as the final step of
the initialization process. the initialization process.
## Safety notes ## Safety notes