Commit Graph

925 Commits

Author SHA1 Message Date
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
Robbert van der Helm 76ad377522 Don't set __MINGW32__
This took me a few hours of non-stop headaches to figure out. Apparently
deep inside of Wine's headers having __MINGW32__ defined will cause some
GUIDs to be defined slightly differently. This normally wouldn't cause
issues, but when including `shellobj.h` or `objbase.h` this results in
multiple definition linking errors that are basically impossible to
diagnose.
2020-12-07 18:28:16 +01:00
Robbert van der Helm d87afa99e0 Add logging for the VST3 plugin 2020-12-07 18:28:16 +01:00
Robbert van der Helm 426231a22b Avoid potential UB in loggers using composition
This cast would work fine, but any other fields added to those loggers
would be left uninitialized.
2020-12-07 18:28:16 +01:00
Robbert van der Helm c1e7f53cd0 💥 Major refactor of initialization plumbing
To account for the differences in VST2 plugins and VST3 modules we had
to wrap most of our old functions from `src/plugin/utils.h` in a new
`PluginInfo` struct that gathers all of this information while taking
into account the differences between VST2 and VST3 plugins.

With this change things are also a lot more organized. We can just query
the plugin information we need rather than having to store things
separately or having to recalculate things. This also moved the
responsibility of all the weird `WINEPREFIX` behaviour to a single place
instead of having it spread around `utils.pp`, the initialisation
message, and `host-procoess.cpp`.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 0819e9fda9 Request/send config for VST3 plugins
Using the new Vst3MessageHandler.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 70405e8917 Encapsulate our VST3 message handling pattern
Similarly to how how we do it in `EventHandler`.
2020-12-07 18:28:16 +01:00
Robbert van der Helm db1a51af5c Add serialization primitives for VST3 2020-12-07 18:28:16 +01:00
Robbert van der Helm 2e9b100090 Add handlers for control messages and callbacks 2020-12-07 18:28:16 +01:00
Robbert van der Helm e889ad22e2 Only pass Logger reference to AdHocSocketHandler
The boolean flag wasn't used, and it doesn't make any sense in the
context of VST3.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 19eb33a7e2 Add a AdHocSocketHandler::receive_multi overload
With only a single callback.
2020-12-07 18:28:16 +01:00
Robbert van der Helm ab7449a0e0 Add control sockets to Vst3Sockets 2020-12-07 18:28:16 +01:00
Robbert van der Helm 170cd53c27 Add todo about readme changes after merging 2020-12-07 18:28:16 +01:00
Robbert van der Helm b9e63ea335 Move the host guard handler to PluginBridge 2020-12-07 18:28:16 +01:00
Robbert van der Helm c2d2ac8fbf Inherit Vst3PluginBridge init from PluginBridge 2020-12-07 18:28:16 +01:00
Robbert van der Helm 21a8c232a1 Note that debug builds on winegcc fail now 2020-12-07 18:28:16 +01:00
Robbert van der Helm 6b9ae78b27 Factor out all plumbing in Vst2PluginBridge
So we can reuse it in Vst3PluginBridge later.
2020-12-07 18:28:16 +01:00
Robbert van der Helm f845763af0 Print the plugin type during initialisation 2020-12-07 18:28:16 +01:00
Robbert van der Helm c57fd67aa8 Don't store the Wine version as a field
It's only needed for the initialisation message, and it doesn't throw so
doing this later shouldn't make a difference.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 3c72ab31f8 Shut up clang/ccls 2020-12-07 18:28:16 +01:00
Robbert van der Helm ff2807c939 Add all the boilerplate for the Vst3PluginBridge
And now that I also have an idea of what the communication model will
look like, this can server as a base for instantiating plugins.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 6e5aa1c1c6 Add the Vst3Bridge boilerplate 2020-12-07 18:28:16 +01:00
Robbert van der Helm 6179fddbc8 Do some more testing and print some plugin info 2020-12-07 18:28:16 +01:00
Robbert van der Helm ebc7802c08 Patch Win32 module loading to use Boost.Filesystem
C++17's `<filesystem>` header still doesn't seem to work with winegcc.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 0b462c034e Allow loading VST3 modules
Doesn't actually work yet or do anything, but it compiles and it runs.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 211f6156a7 Get rid of the string conversion patch
This solved some compiler errors early on but it ended up not being
needed, and as it turns out this change actually breaks things because
the SDK uses a ton of reinterpret casts to convert between string types
internally.
2020-12-07 18:28:16 +01:00
Robbert van der Helm 8381b4a836 Link to shell32.dll
For some reason this is required on the Ubuntu 18.04 build, but not on
my computer nor on the Ubuntu 20.04 build all using the same version of
Wine and GCC.
2020-12-07 18:28:16 +01:00
Robbert van der Helm a25aea1a76 Use consistent architecture naming for Wine deps 2020-12-07 18:28:16 +01:00
Robbert van der Helm 9291ae7e42 Include the Win32 module loading implementation 2020-12-07 18:28:16 +01:00
Robbert van der Helm a4af1a2535 Fix compiling VST3 module system with winegcc 2020-12-07 18:28:16 +01:00
Robbert van der Helm f3d17b5e99 Also patch string conversion for winelib 2020-12-07 18:28:16 +01:00
Robbert van der Helm 9a57ce0c5e Use non-experimental <filesystem> in VST3 loading 2020-12-07 18:28:16 +01:00
Robbert van der Helm 715a95075b Add required compiler args to the Wine VST3 dep 2020-12-07 18:28:16 +01:00
Robbert van der Helm 06884ebf67 Also fix shlobj.h import casing 2020-12-07 18:28:16 +01:00
Robbert van der Helm f51f920426 Move VST3 dependency defs to the rest of the deps 2020-12-07 18:28:16 +01:00