Commit Graph

980 Commits

Author SHA1 Message Date
Robbert van der Helm 91a47a466c Create a universal wrapper around tvalue 2020-12-11 23:34:23 +01:00
Robbert van der Helm 699ddfd2ea Implement YaComponentPluginImpl destructor
When the object gets dropped through the reference counting system, the
object should also be dropped in the Wine plugin host.
2020-12-11 22:59:32 +01:00
Robbert van der Helm cdb9dae2df Rename YaComponent::Arguments to CreateArgs 2020-12-11 22:43:12 +01:00
Robbert van der Helm d1d85711f0 Split up the VST3 class implementations 2020-12-11 22:37:20 +01:00
Robbert van der Helm 9439a62d94 Fix formatting 2020-12-11 16:56:46 +01:00
Robbert van der Helm 9554bbc12d Merge branch 'master' into feature/vst3 2020-12-11 16:25:53 +01:00
Robbert van der Helm d0b9f1a602 Bump to version 2.2.0 2.2.0 2020-12-11 14:00:16 +01:00
Robbert van der Helm c4f178aa13 Reword changelog 2020-12-11 13:59:27 +01:00
Robbert van der Helm ced3608e91 Update the tested REAPER version 2020-12-11 13:21:29 +01:00
Robbert van der Helm 3e13eb9e46 Merge branch 'master' into feature/vst3 2020-12-11 13:02:49 +01:00
Robbert van der Helm 29f1754527 Link to the issue instead of listing issue number 2020-12-11 13:01:45 +01:00
Robbert van der Helm c306048988 Fix hanging processes for good #69 2020-12-11 12:40:50 +01:00
Robbert van der Helm 41b79720ca Merge branch 'master' into feature/vst3 2020-12-11 00:50:43 +01:00
Robbert van der Helm aae98d518c Fix the with-winedbg option 2020-12-11 00:35:29 +01:00
Robbert van der Helm 2615da51da Fix the socket waiting fix #69
e07467697a changed the waiting behaviour,
but this meant that there was a very slight window where all secondary
requests would fail when both sides have called connect(), but the other
side has not already called `receive_{events,multi,messages}` to start
listening on the socket.
2020-12-11 00:33:28 +01:00
Robbert van der Helm ac0d83e555 Fix concurrency issue in plugin group shutdown 2020-12-10 21:41:04 +01:00
Robbert van der Helm c05040d98b Link with -mconsole instead of -mwindows
Not sure why it even worked with -mwindows, but this is the correct
linking option for the `main()` entry point.
2020-12-10 18:01:11 +01:00
Robbert van der Helm e3a52bca14 Revert "Get rid of all traces of pthreads in Wine"
This reverts commit e9af76d21e.

Without this the event loop will just not run, not sure why. This needs
some more investigation.
2020-12-10 17:38:09 +01:00
Robbert van der Helm e9af76d21e Get rid of all traces of pthreads in Wine
Since this can only cause issues.
2020-12-10 15:44:37 +01:00
Robbert van der Helm 5c98b74bc2 Remove now unused variable 2020-12-10 15:07:16 +01:00
Robbert van der Helm 5f7c105b6d Use boost::asio::transfer_exactly
Instead of doing assertions.
2020-12-10 15:03:26 +01:00
Robbert van der Helm e07467697a Only wait for sockets during initialization #69 2020-12-10 12:03:51 +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