Commit Graph

39 Commits

Author SHA1 Message Date
Robbert van der Helm 1ecdc5f270 Add a better list with unimplemented interfaces 2020-12-30 14:43:29 +01:00
Robbert van der Helm 104cdef919 Add a proxy class for IUnitData 2020-12-29 21:48:29 +01:00
Robbert van der Helm c2f1722f14 Add a proxy class for IProgramListData 2020-12-29 15:47:25 +01:00
Robbert van der Helm c1118af21c Update the readmes for merging into master 2020-12-29 15:39:41 +01:00
Robbert van der Helm 4226ab6e43 Pass pointers to IMessage objects around
Instead of serializing the actual `YaMessage`, for the reasons mentioned
in the comments. This was needed to stop iZotope VocalSynth 2 in Ardour
from segfaulting when editing parameters, because that plugin is
apparently being very naughty.
2020-12-29 00:22:42 +01:00
Robbert van der Helm aed369c4be Add stubs for IUnitInfo
This is a big boy.
2020-12-26 21:18:11 +01:00
Robbert van der Helm 5e26d30752 Add a wrapper for IUnitHandler 2020-12-26 14:12:40 +01:00
Robbert van der Helm 0fce9c9eed Add an IConnectionPoint proxy proxy
This is a bit dumb, but this way we can support indirectly connected
objects.
2020-12-25 13:28:03 +01:00
Robbert van der Helm 84b859c499 Implement IMessage 2020-12-25 01:01:13 +01:00
Robbert van der Helm b6304c83b5 Implement IAttributeList 2020-12-25 00:54:08 +01:00
Robbert van der Helm 90de46428c Add an implementation wrapper for IPlugFrame 2020-12-22 13:20:49 +01:00
Robbert van der Helm e391bbccb7 Add Vst3PlugViewProxy 2020-12-19 20:18:45 +01:00
Robbert van der Helm 0522f84f4a Create Vst3HostContextProxy from YaHostApplication
This is quite a huge refactor, but note everything is consistent (and
we're going to need one or two more of these `Vst3*Proxy` objects).
Right now nothing extends `IHostApplication`, but this way it will be
trivial to add support for more host context interfaces.
2020-12-19 17:13:17 +01:00
Robbert van der Helm 54e73d2d19 Split YaEditController into YaEditController{,2}
Since even though the title would make you assume it's a versioned
interface, it's not.
2020-12-19 14:19:37 +01:00
Robbert van der Helm 9bca4796a5 Add boilerplate for Vst3ComponentHandlerProxy 2020-12-19 14:08:41 +01:00
Robbert van der Helm 71493299ec Implement IConnectionPoint::disconnect 2020-12-19 13:07:58 +01:00
Robbert van der Helm d99f880277 Rename YaHostApplication implementation
The context should make it obvious where it's implemented, and with the
current design we only an implementation on one of the two sides.
2020-12-18 21:36:39 +01:00
Robbert van der Helm af1d573712 Add IConnectionPoint to the implemented interfaces 2020-12-18 14:31:26 +01:00
Robbert van der Helm 2155240cca Add stubs for IEditController{,2} 2020-12-17 16:39:50 +01:00
Robbert van der Helm 11bf7532fa Rename the monolitic class to Vst3PluginProxy
Now it's starting to look promising.
2020-12-17 13:07:42 +01:00
Robbert van der Helm d8b2646563 Split off IComponent and create a monolithic class
We can now use implement all VST3 plugin interfaces through this class,
check whether the object from the plugin also supports these classes,
and then conditionally allow casting to the supported classes. This
should give us a one-to-one proxy of the original object.
2020-12-17 12:49:33 +01:00
Robbert van der Helm d6c28f48d9 Split YaAudioProcessor from YaComponent
Now all that's left is splitting YaComponent into the IComponent bits
and separate YaPluginMonlith that implements everything.
2020-12-17 00:31:32 +01:00
Robbert van der Helm 6809e73d6b Split IPluginBase from IComponent
We're also going to need this for `IEditController`. Separating all of
these classes will also keep everything much more maintainable with all
of these associated structs.
2020-12-16 23:46:47 +01:00
Robbert van der Helm 97570a47ba Add a document with all implemented interfaces 2020-12-16 22:07:43 +01:00
Robbert van der Helm 7488d6f482 Move the VST3 design document to docs/ 2020-12-16 21:54:18 +01:00
Robbert van der Helm 026595d99f Implement IParamValueQueue 2020-12-15 14:23:55 +01:00
Robbert van der Helm 096171bb96 Use the known_iids mechanism for IComponent 2020-12-14 12:48:21 +01:00
Robbert van der Helm d9989fe856 Update the VST3 architecture document 2020-12-13 12:32:49 +01:00
Robbert van der Helm 39984ad442 Use the new approach for creating plugin factory
Directly serializing and deserializing into objects was and more
boilerplate heavy (since we now need two implementations even though we
only use one), and also much less flexible because we can't wrap
payloads in structs or provide optional values that way.
2020-12-12 21:53:38 +01:00
Robbert van der Helm 1088483f15 Mention destructors in VST3 implementation docs 2020-12-12 16:18:47 +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 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 5e85517130 Add the base for an IComponent implementation 2020-12-07 23:52: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 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 42f3639e93 Add boilerplate for PluginFactory serialization 2020-12-07 18:28:16 +01:00