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
5ad47c8c68
Get rid of condition variable in mutual recursion
...
We can safely assume that these are mutually recursive calls from the
GUI thread and can thus be handled directly.
2021-01-18 11:22:07 +01:00
Robbert van der Helm
bb2b526003
Optimize away some potential copies
2021-01-17 19:06:56 +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
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
e840fe3114
Add stubs for IProgress
2021-01-16 18:09:39 +01:00
Robbert van der Helm
9ddf4b2ae1
Fully implement IProcessContextRequirements
2021-01-16 16:29:21 +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
6c40cd5ad1
Add stubs for IPlugInterfaceSupport
2021-01-16 14:47:40 +01:00
Robbert van der Helm
7fdf646270
Fully implement IMidiLearn
2021-01-16 14:25:00 +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
5dcedbace5
Add an option to disable VST3 content scaling
...
This might be necessary when using a HiDPI screen as plugin GUIs often
don't scale correctly under Wine.
2021-01-14 17:36:00 +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
bfdbfa9196
Add stubs for IComponentHandlerBusActivation
2021-01-14 16:16:58 +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
561aee4963
Pass channel context data from the GUI thread
...
This fixes Melodyne crashing as it presumably immediately wants to
redraw upon receiving this.
2021-01-12 18:44:43 +01:00
Robbert van der Helm
631166d0bf
Fully implement IInfoListener
2021-01-12 17:04:07 +01:00
Robbert van der Helm
87b270273f
Fully implement IPrefetchableSupport
2021-01-12 15:37:58 +01:00
Robbert van der Helm
bf3a4e7296
Allow changing the event loop tick rate
...
This also changes the refresh rate for most plugins. You can now lower
this setting if your computer is struggling to keep up with rendering a
certain heavy plugin.
2021-01-11 23:38:21 +01:00
Robbert van der Helm
b86df213fb
Change to SCHED_OTHER on IPlugView init/destruct
...
Instead of only on `IPlugView::attached`/`IPlugView::removed` like in
the previous commit. I forgot to also do this when creating and
destroying IPlugViews (since I can assume lots of plugins will then
already start loading resources).
2021-01-11 19:04:46 +01:00
Robbert van der Helm
8f15578d8c
Also disable realtime priority during effEditGetRect
...
Since on some hosts this is called before effEditOpen.
2021-01-11 18:53:36 +01:00
Robbert van der Helm
f015739942
Open and close editors without realtime priority
2021-01-11 18:50:53 +01:00
Robbert van der Helm
3ca7061659
Switch to SCHED_OTHER while handling events
...
GUI drawing should not be able to interrupt the cores that are handling
DSP, but it seems like that was happening for some people with
suboptimal kernel configurations. This will require some more extensive
testing to see if these changes don't actually increase DSP load.
2021-01-11 14:20:03 +01:00
Robbert van der Helm
e3ea1dd2fe
Allow an option set_realtime_priority() to revert
2021-01-11 14:04:54 +01:00
Robbert van der Helm
5855ffbe85
Fully implement IUnitHandler2
2021-01-10 23:54:43 +01:00
Robbert van der Helm
89111d2f5f
Add stubs for IUnitHandler2
2021-01-10 23:49:58 +01:00
Robbert van der Helm
a2d1a97309
Fully implement IAutomationState
2021-01-10 23:38:40 +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
9b62386099
Move VectorStream to a new YaBStream
...
We'll have to extend this with `IStreamAttributes` for VST 3.6.0 preset
meta data.
2021-01-10 15:12:47 +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
30bb6d3b97
Fully implement IKeyswitchController
2021-01-08 17:12:17 +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
c375441971
Handle all IPlugView functions from the GUI thread
...
Melda plugins will freeze if GetSize wasn't called from the GUI thread
before.
2021-01-07 22:42:31 +01:00
Robbert van der Helm
25af73c86e
Update the context menu status
2021-01-07 20:22:32 +01:00
Robbert van der Helm
f944bf4a39
Fully implement IContextMenu
...
Although all of this stuff is completely untested, and since no host on
Linux uses it we'll likely never know whether this implementation is
correct.
2021-01-07 16:47:28 +01:00
Robbert van der Helm
5d0df7febe
Fully implement IContextMenuTarget
2021-01-07 00:17:55 +01:00
Robbert van der Helm
26eb8ac1f3
Store the actual context menu proxy impls
2021-01-07 00:07:48 +01:00
Robbert van der Helm
75284cea0b
Track registered context menus
...
So we can refer to them when the host executes a menu item later.
2021-01-06 23:09:55 +01:00
Robbert van der Helm
5dffba4584
Implement Vst3ContextMenuProxyImpl destructor
2021-01-06 22:52:35 +01:00
Robbert van der Helm
b9d4bd6042
Implement the Wine host side of IComponentHandler3
2021-01-06 22:41:45 +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
abe7085ab5
Add stubs for IComponentHandler3
2021-01-06 20:55:27 +01:00
Robbert van der Helm
0cbcf44e3e
Add stubs for an IContextMenu implementation
2021-01-06 19:02:52 +01:00
Robbert van der Helm
2f5d22ca17
Handle effMainsChanged on the main UI thread #75
...
This fixes EZdrummer not producing any sound, as the plugin presumably
schedules some task on the Win32 message loop to load its resources,
which won't happen if this is run from any other thread.
2021-01-05 23:04:18 +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
9983f81875
Fully implement IComponentHandler2
2021-01-04 21:56:14 +01:00
Robbert van der Helm
a997a7cd20
Add stubs for IComponentHandler2
2021-01-04 21:36:25 +01:00
Robbert van der Helm
5311c9ca6e
Add logging for IHostApplication::createInstance
2021-01-04 16:50:19 +01:00