Robbert van der Helm
1b804bd5ea
💥 Convert between UID formats for class IDs
...
This is a breaking change. Old projects containing VST3 plugins running
through yabridge will no longer work without modifications. I'll write
some scripts to convert the class IDs stored in those project files soon
a migration path.
The UIDs reported by the plugin were apparently wrong, which meant that
the native Linux VST3 version of plugin X and the normal Windows VST3
version of plugin X used different class ideas than the Windows VST3
version of plugin X running through yabridge. Those things are supposed
to be compatible, so we sadly needed to make this change at some point.
2021-01-22 14:24:40 +01:00
Robbert van der Helm
d3d57a3fe0
Use UID conversion for GetControllerClassId
2021-01-22 14:13:27 +01:00
Robbert van der Helm
74dc8225d1
Back the VST3 plugin factory by an IPtr
...
This prevents REAPER from crashing when removing the last instance of a
plugin and then readding it. REAPER doesn't unload the module even after
it removes its last plugin factory instance. This means that before this
the plugin factory would be freed but we still had a seemingly valid
pointer to it that we would try to access.
2021-01-21 01:51:21 +01:00
Robbert van der Helm
4cc44c3cf7
Make the mutual recursion mechanism safer
...
By directly stopping the IO context there was a chance that a task would
get cancelled outright if all stars aligned in the wrong way. Stopping
the IO context could happen between posting the task to the context and
waiting for it. This approach is much safer as we cannot drop any work
this way.
2021-01-20 12:52:48 +01:00
Robbert van der Helm
5f7f44ce20
Fix potential issue in GUI thread mutual recursion
...
While the assumption that this is always the last element should hold
true, there may be exceptions so better be safe than sorry.
2021-01-20 03:29:25 +01:00
Robbert van der Helm
508d393bbc
Fix event handlers not being unregistered
...
This would cause crashes in Bitwig, as `RunLoopTasks`' destructor would
not be run after the event handler has been unregistered, and we
unregister the event handler in that destructor.
2021-01-20 00:21:18 +01:00
Robbert van der Helm
c08d704dc0
Apply the mutual recursion changes to Vst3Bridge
...
I've never seen this happen, but now this too would support deeply
nested mutual recursion just like we implemented in
`Vst3PlugViewProxyImpl`. Better safe than sorry.
2021-01-19 23:52:00 +01:00
Robbert van der Helm
23d9b7416d
Support deep nested mutual recursion in IPlugView
...
This could cause hangs in Bitwig when very quickly resizing GUIs.
2021-01-19 23:11:08 +01:00
Robbert van der Helm
bb5471f2d9
Run certain GUI tasks from the host's run loop
...
This was a bit of a tricky one because it requires simulating mutual
recursion, but it's needed for REAPER as otherwide calls to
`IPlugFrame::resizeView()` and `IContextMenu::popup()` might cause
REAPER to segfault because its GUI is not thread safe.
2021-01-18 14:19:31 +01:00
Robbert van der Helm
1c6d3f8fd9
Fully implement IParameterFunctionName
...
We now support all VST 3.7.1 interfaces! At least, in theory we do.
2021-01-17 14:17:46 +01:00
Robbert van der Helm
3d8ee1ddf1
Add stubs for IParameterFunctionName
2021-01-17 13:23:17 +01:00
Robbert van der Helm
aa1a7a1588
Fully implement IProgress
...
`IParameterFunctionName` will be the last interface before we _in
theory_ support all VST3 features.
2021-01-17 00:19:48 +01:00
Robbert van der Helm
9ddf4b2ae1
Fully implement IProcessContextRequirements
2021-01-16 16:29:21 +01:00
Robbert van der Helm
a2203cfef7
Add stubs for IProcessContextRequirements
2021-01-16 16:09:31 +01:00
Robbert van der Helm
73fda0b568
Fully implement IPlugInterfaceSupport
...
With this we support all VST 3.6.12 interfaces.
2021-01-16 15:19:10 +01:00
Robbert van der Helm
7fdf646270
Fully implement IMidiLearn
2021-01-16 14:25:00 +01:00
Robbert van der Helm
85c1972c1f
Add stubs for IMidiLearn
2021-01-15 22:36:25 +01:00
Robbert van der Helm
6e8d56923c
Fully implement INoteExpressionPhysicalUIMapping
...
With this we support all VST 3.6.11 features.
2021-01-15 19:33:05 +01:00
Robbert van der Helm
c485677987
Add stubs for INoteExpressionPhysicalUIMapping
2021-01-15 19:08:06 +01:00
Robbert van der Helm
1d9b60b481
Fully implement IComponentHandlerBusActivation
...
We now support all VST 3.6.8 features. (or technically, also all VST
3.6.10 features)
2021-01-14 16:42:19 +01:00
Robbert van der Helm
0bed2b7bc0
Fully implement IPlugViewContentScaleSupport
...
With this we're at VST 3.6.6 level support.
2021-01-14 14:52:39 +01:00
Robbert van der Helm
c57090600e
Add stubs for IPlugViewContentScaleSupport
2021-01-14 14:33:20 +01:00
Robbert van der Helm
631166d0bf
Fully implement IInfoListener
2021-01-12 17:04:07 +01:00
Robbert van der Helm
ccdb121f96
Add stubs for IInfoListener
2021-01-12 16:54:13 +01:00
Robbert van der Helm
87b270273f
Fully implement IPrefetchableSupport
2021-01-12 15:37:58 +01:00
Robbert van der Helm
7c081b458a
Add stubs for IPrefetchableSupport
2021-01-12 15:24:37 +01:00
Robbert van der Helm
5855ffbe85
Fully implement IUnitHandler2
2021-01-10 23:54:43 +01:00
Robbert van der Helm
a2d1a97309
Fully implement IAutomationState
2021-01-10 23:38:40 +01:00
Robbert van der Helm
cfa1aff1bf
Add stubs for IAutomationState
2021-01-10 23:32:55 +01:00
Robbert van der Helm
8971a65825
Pass through host provided IBStream objects
...
So if the host supports IStreamAttributes, we can also provide objects
that support the same itnerface to the plugin.
2021-01-10 16:57:36 +01:00
Robbert van der Helm
07a994089b
Add missing null pointer checks
...
I did double check, and I don't think any of these are supposed to be
nullable.
2021-01-08 18:33:14 +01:00
Robbert van der Helm
2fc7621aee
Fully implement XmlRepresentationController
2021-01-08 18:02:43 +01:00
Robbert van der Helm
2072310b2b
Add stubs for IXmlRepresentationController
2021-01-08 17:43:43 +01:00
Robbert van der Helm
30bb6d3b97
Fully implement IKeyswitchController
2021-01-08 17:12:17 +01:00
Robbert van der Helm
7969ec20fd
Add stubs for IKeyswitchController
2021-01-08 16:53:43 +01:00
Robbert van der Helm
5d5ec63fee
Fully implement IEditControllerHostEditing
2021-01-08 16:33:27 +01:00
Robbert van der Helm
eed068b9f7
Add stubs for IEditControllerHostEditing
2021-01-08 16:18:45 +01:00
Robbert van der Helm
83d45eef27
Implement the plugin side of IContextMenu
2021-01-07 16:19:41 +01:00
Robbert van der Helm
5d0df7febe
Fully implement IContextMenuTarget
2021-01-07 00:17:55 +01:00
Robbert van der Helm
c1576658d6
Split up a ConstructArgs from YaContextMenuTarget
...
So we can send this as a payload when the plugin adds a context menu
item.
2021-01-06 23:23:11 +01:00
Robbert van der Helm
9e3c57476c
Implement the plugin side if IComponentHandler3
2021-01-06 22:25:23 +01:00
Robbert van der Helm
ead1008597
Add stubs for IContextMenuTarget
2021-01-06 19:02:52 +01:00
Robbert van der Helm
0e3b5af94e
Fully implement IAudioPresentationLatency
...
Now we support all VST 3.1.0 interfaces.
2021-01-04 22:33:44 +01:00
Robbert van der Helm
dcfbc34ba1
Add stubs for IAudioPresentationLatency
2021-01-04 22:17:19 +01:00
Robbert van der Helm
9983f81875
Fully implement IComponentHandler2
2021-01-04 21:56:14 +01:00
Robbert van der Helm
8924124abb
Fully implement IParameterFinder
...
With this we're at VST 3.0.2 support.
2021-01-03 23:46:13 +01:00
Robbert van der Helm
fb6e5ab33f
Fully implement IMidiMapping
2021-01-02 23:54:01 +01:00
Robbert van der Helm
e980afddb4
Add stubs for IMidiMapping
2021-01-02 23:49:47 +01:00
Robbert van der Helm
a8a0e325fe
Fully implement INoteExpressionCOntroller
2021-01-02 18:40:34 +01:00
Robbert van der Helm
8a4de7da53
Add stubs for INoteExpressionController
2021-01-02 15:27:55 +01:00