Robbert van der Helm
aae98d518c
Fix the with-winedbg option
2020-12-11 00:35:29 +01:00
Robbert van der Helm
4a056dcd31
Get rid of the VST3 logging boilerplate
2020-12-09 22:11:39 +01:00
Robbert van der Helm
225056bcff
Allow instantiating IComponents
2020-12-08 23:08:07 +01:00
Robbert van der Helm
75ed978a1b
Fix pointer dereference after move
2020-12-08 23:08:07 +01:00
Robbert van der Helm
9b025052d2
Add stubs for an IComponent implementation
2020-12-08 23:02:26 +01:00
Robbert van der Helm
92ea15bcb4
Allow interface implementations to send messages
2020-12-08 23:01:50 +01:00
Robbert van der Helm
2e6184171c
Use std::array for serializing UIDs
...
These are easily assignable and we have to convert between char
pointers, char arrays and UID objects all the time anyways.
2020-12-08 23:00:44 +01:00
Robbert van der Helm
7828fc7bef
Update the VST3 interface instantiation docs
2020-12-08 18:22:44 +01:00
Robbert van der Helm
e099255b92
Generate a unique ID and store the new component
2020-12-08 17:59:59 +01:00
Robbert van der Helm
5eb1fe2de2
Redesign how interface instantiation works
...
Transferring some argument pack is much easier than trying to
deserialize into an existing object when you also have to transfer more
information than just that object.
2020-12-08 17:33:51 +01:00
Robbert van der Helm
f4a5aa91fb
Document the plugin factory approach
2020-12-08 14:21:54 +01:00
Robbert van der Helm
ed743e6f22
Bundle associated messages with their interfaces
...
Once we start implementing all of the control messages/callbacks things
could quickly get out of hand otherwise.
2020-12-08 11:25:58 +01:00
Robbert van der Helm
5e85517130
Add the base for an IComponent implementation
2020-12-07 23:52:17 +01:00
Robbert van der Helm
e5cd777713
Fix the templated visitor in Vst3MessageHandler
...
Now it works as expected, since auto can't be initialized to multiple
different values.
2020-12-07 23:49:25 +01:00
Robbert van der Helm
d59a96b379
Move VST3 serializers to the structs
2020-12-07 22:33:41 +01:00
Robbert van der Helm
f1fe0fa8a4
Log a warning when encountering unknown interfaces
2020-12-07 22:21:01 +01:00
Robbert van der Helm
7b3a6af7d1
Use raw pointers for the plugin factory
...
Since the object cleans up after itself after the smart pointers are
dropped on the host side this would result in a use after free by the
smart pointers.
2020-12-07 18:28:17 +01:00
Robbert van der Helm
d79bc3b936
Don't use STL smart pointers with VST3 interfaces
...
This would cause double frees since those objects are supposed to clean
up after themselves.
2020-12-07 18:28:17 +01:00
Robbert van der Helm
75e8cf9140
Add notes on things that can potentially go wrong
2020-12-07 18:28:17 +01:00
Robbert van der Helm
8e09d50a54
Describe how createInstance() is going to work
2020-12-07 18:28:17 +01:00
Robbert van der Helm
d485aa296a
Fix VST2-only builds
2020-12-07 18:28:17 +01:00
Robbert van der Helm
9954282065
Add manual reference counting to GetPluginFactory
...
Since even though we're passign raw pointers, it's expected that they
are actually `IPtr<T>`s.
2020-12-07 18:28:17 +01:00
Robbert van der Helm
547b11e8ba
Remove interface filtering from the plugin factory
...
This doesn't work that way, and CIDs really are class IDs (good thing
that everything's documented, oh right).
2020-12-07 18:28:17 +01:00
Robbert van der Helm
e20fc8c7e6
Fix Vst{2,3}Logger::log_trace
2020-12-07 18:28:17 +01:00
Robbert van der Helm
8ea40cd9f9
Rework Vst3MessageHandler::receive_messages
...
This now takes a regular overloaded function and the visiting is done in
`receive_messages()` itself. This way we can use templates to ensure
that the return type is correct. Otherwise auto will cause issues in the
future when we want to return multiple concrete types from a function
that takes a single variant. The alternative would be both receiving a
variant as a parameter and then returning another variant as a result,
but that is much less type safe.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
7fb8cf97b1
Request factory after setting up callback handlers
...
Otherwise we'll get a deadlock.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
c2503f8aaa
Send the factory from the Wine host to the plugin
2020-12-07 18:28:16 +01:00
Robbert van der Helm
79c6f02d91
Request and deserialize plugin factory from plugin
2020-12-07 18:28:16 +01:00
Robbert van der Helm
887a856e58
Rename Vst3MessageHandler::send_message overload
...
`receive_into()` looks much clearer in typical usage.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
a16cf3015f
Fix deserializing into existing objects
...
`read_object()` was trying to create copies.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
d5374e4540
💥 Rework Vst3MessageHandler
...
- Now allows direct deserialization into existing objects. This will be
necessary for our VST3 implementations since the interface instances
we'll deserialize into will not be trivially constructable because
they have to be able to do callbacks.
- `ControlResponse` and `CallbackResponse` were dropped. These response
enums are not necessary because of the `T::Response` associated type
and returning the types directly makes the direct deserialization
possible.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
5423950a8a
Allow receiving VST3 messages into existing object
2020-12-07 18:28:16 +01:00
Robbert van der Helm
02dfe93ff0
Allow deserialization into an existing object
...
We're going to need this for VST3 because we're going to have to
explicitly instantiate our interface implementations since they need to
be able to perform complicated callbacks.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
3be5836c07
Log and ignore unsupported interfaces
2020-12-07 18:28:16 +01:00
Robbert van der Helm
5f14958146
Implement IpluginFactory3::getClassInfoUnicode
2020-12-07 18:28:16 +01:00
Robbert van der Helm
ef3f82e00f
Implement IpluginFactory2::getClassInfo2
2020-12-07 18:28:16 +01:00
Robbert van der Helm
d8a4207748
Make the error messages more specific
...
In case this does ever come up.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
049eb257c5
Make YaPluginFactory abstract
...
And add separate implementations for the native plugin and the Wine
plugin host. This way we can easily allow the native host to do
callbacks without having to manage a load of lambdas.
2020-12-07 18:28:16 +01:00
Robbert van der Helm
1db3c0371f
Expand on the VST3 implementation readme
2020-12-07 18:28:16 +01:00
Robbert van der Helm
85f818ab0b
Patch the SDK for winegcc debug builds
2020-12-07 18:28:16 +01:00
Robbert van der Helm
dd48523183
Implement IPluginFactory::getClassInfo
2020-12-07 18:28:16 +01:00
Robbert van der Helm
e6da03ae84
Implement IPluginFactory::countClasses()
2020-12-07 18:28:16 +01:00
Robbert van der Helm
79df8fecc2
Serialize the factory info
2020-12-07 18:28:16 +01:00
Robbert van der Helm
fa10600114
Add more thoughts on how the factory should work
2020-12-07 18:28:16 +01:00
Robbert van der Helm
82c1542b74
Add boilerplate for copying factory interfaces
2020-12-07 18:28:16 +01:00
Robbert van der Helm
8f152c7af5
Clean up the query interface serialization
2020-12-07 18:28:16 +01:00
Robbert van der Helm
42f3639e93
Add boilerplate for PluginFactory serialization
2020-12-07 18:28:16 +01:00
Robbert van der Helm
930ebbf7d1
Add more todos for VST3 handling
2020-12-07 18:28:16 +01:00
Robbert van der Helm
27892d9e40
Get rid of debug prints in Vst3Bridge
2020-12-07 18:28:16 +01:00
Robbert van der Helm
a77e2fbfae
Add Bitsery serialization for FUIDs
2020-12-07 18:28:16 +01:00