Robbert van der Helm
7da5ec113c
Reuse buffers in VST3 audio processing
2020-12-25 16:22:53 +01:00
Robbert van der Helm
8a56b67cb3
Add unknown interface logging on the Wine side
2020-12-25 15:25:56 +01:00
Robbert van der Helm
cc2e12c8e4
Allow creating logger instances on the Wine side
...
So we can log filterable messages from the Wine side. Will be used to
warn about failed query interface calls.
2020-12-25 15:15:28 +01:00
Robbert van der Helm
70cb6dad89
Allow indirect IConnectionPoint connections
...
This is needed to support Ardour. These extra hops and serialization
steps will probably hurt performance, but outside of some huge hacks (to
connect the components directly anyways) there's not much else we can
do.
2020-12-25 14:21:18 +01:00
Robbert van der Helm
fbad4a65ab
Add an IConnectionPoint proxy implementation
...
We still have to pass this proxy to the plugin. That's next.
2020-12-25 13:46:03 +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
65694d261c
Implement IConnectionPoint::notify
2020-12-25 13:13:56 +01:00
Robbert van der Helm
3566aa86a2
Fix IAttributeList serialization
2020-12-25 12:58:52 +01:00
Robbert van der Helm
5d2c7e0aea
Replace SDK IMessage implementation with ours
2020-12-25 01:01:13 +01:00
Robbert van der Helm
84b859c499
Implement IMessage
2020-12-25 01:01:13 +01:00
Robbert van der Helm
7cfd1982dd
Fix typos in comment
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
f4c871f07e
Add pointer casts to instance creation
...
I copied this from the SDK implementation and they don't do any pointer
casts there because it's not strictly necessary, but they're relying on
implementation details that may not always hold true.
2020-12-24 14:46:02 +01:00
Robbert van der Helm
b0fc8f2c5f
Remove are_objects_directly_connected check
...
It's not necessary, since all of these objects are simple data objects
that will be passed as arguments to other functions. When we have to
pass through one of those functions we can just serialize the objects at
that point.
2020-12-24 14:45:58 +01:00
Robbert van der Helm
50b50418f4
Fix messages between directly connecting objects
...
iZotope plugins will already send messages when connect() is called on
the first object, so this flag has to be set on both host contexts at
the same time.
2020-12-24 13:58:32 +01:00
Robbert van der Helm
a86c37a21d
Partially implement IHostApplication
...
For now only works for directly connected components.
2020-12-24 13:48:31 +01:00
Robbert van der Helm
1186e7d775
Store whether two objects are connected directly
...
In the host context. So when the plugin wants to create an `IMessage`
object to send a message to the other object, we don't have to go
through the host.
2020-12-24 13:22:54 +01:00
Robbert van der Helm
e19cbca5d1
Actually create the IHostApplication smart pointer
2020-12-24 00:14:58 +01:00
Robbert van der Helm
7a55fc3ec0
Significantly clean up mutual recursion workaround
...
This has much fewer moving parts, and it's probably more understandable.
There was also a race condition in the previous implementation, so
there's that.
2020-12-23 16:11:05 +01:00
Robbert van der Helm
eae77d4dbf
Fix num samples in processing log message
2020-12-23 12:00:31 +01:00
Robbert van der Helm
216f65d2a1
Unify log format further
2020-12-23 11:53:09 +01:00
Robbert van der Helm
3beaaf2312
Always handle IPlugView::onSize() from UI thread
...
This requires a super hacky workaround because the UI thread can be
currently blocked by the plugin calling `IPlugFrame::resizeView()` from
the Win32 message loop.
2020-12-22 17:36:30 +01:00
Robbert van der Helm
9ee7982591
Call IPlugView::on* from the UI thread
...
Since these can trigger a redraw.
2020-12-22 15:47:57 +01:00
Robbert van der Helm
9bb90388c1
Implement IPlugView::checkSizeConstraint()
...
With this the whole of `IPlugView` and thus also `IEditController` is
implemented.
2020-12-22 15:42:41 +01:00
Robbert van der Helm
5ef7e73725
Implement IPlugView::canResize()
2020-12-22 15:37:06 +01:00
Robbert van der Helm
656f6d3f6c
Implement IPlugFrame::resizeView()
...
The base IPlugFrame only contains this single function.
2020-12-22 15:09:33 +01:00
Robbert van der Helm
3bc3409929
Keep track of the last created plugin view
...
For implementing `IPlugView::resizeView()`. This approach is safe
because there's only a single defined view type.
2020-12-22 14:27:56 +01:00
Robbert van der Helm
da6ddccf07
Implement IPlugView::setFrame()
2020-12-22 14:16:00 +01:00
Robbert van der Helm
9288cdcb59
Remove support for null pointers in setHostContext
...
Like the other functions, null pointers are never valid here so we
shouldn't bother passing them as it only increases complexity.
2020-12-22 14:04:42 +01:00
Robbert van der Helm
3b96ffa349
Remove null pointer supported in initialize()
2020-12-22 13:59:47 +01:00
Robbert van der Helm
51876a024c
Remove null pointer support in setComponentHandler
...
This should be an implementation fault.
2020-12-22 13:59:15 +01:00
Robbert van der Helm
37897da2b7
Destroy IPlugFrame proxy together with IPlugView
...
Not that we have implemented `IPlugView::setFrame()` yet, but that
should be trivial at this point.
2020-12-22 13:43:08 +01:00
Robbert van der Helm
91c4b414b0
Add a Vst3PlugFrameProxy implementation with stubs
2020-12-22 13:37:58 +01:00
Robbert van der Helm
f5c75da451
Add Vst3PlugFrameProxy
...
For proxying the `IPlugFrame*` passed to `IPlugView::setFrame()`.
2020-12-22 13:26:54 +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
d4d9746f69
Implement IPlugView::onFocus()
2020-12-22 00:19:23 +01:00
Robbert van der Helm
463557349d
Implement IPlugView::onSize()
2020-12-21 23:46:29 +01:00
Robbert van der Helm
1aa5d5d8b4
Add note to input focus grabbing
...
This shouldn't be necessary for VST3, but it is.
2020-12-21 22:46:59 +01:00
Robbert van der Helm
063b480fd0
Implement IPlugView onKey{Up,Down}
2020-12-21 19:13:14 +01:00
Robbert van der Helm
d49814d21d
Add todo about input focus in VST3
2020-12-21 19:13:14 +01:00
Robbert van der Helm
06c55fcdd8
Implement IPlugView::onWheel()
2020-12-21 18:56:22 +01:00
Robbert van der Helm
f1009f1941
Implement IPlugView::removed()
2020-12-21 18:30:42 +01:00
Robbert van der Helm
7e34cf69fe
Remove Editor::handle_win32_events
...
This apparently isn't needed anymore.
2020-12-21 18:24:07 +01:00
Robbert van der Helm
0f43e21fc0
Remove old todos
2020-12-21 18:22:40 +01:00
Robbert van der Helm
5324e4142b
Clean up proxy object construction/destruction
2020-12-21 17:59:38 +01:00
Robbert van der Helm
51877796fa
Add dedicated IAudioProcessor/IComponent sockets
...
This way every relevant object instance will get its own thread for
handling these calls. The alternative would be creating a full fat
Vst3MessageHandler pair for all object instances, but that would be a
huge waste.
2020-12-21 17:26:30 +01:00
Robbert van der Helm
415c1b5683
Allow disabling ad-hoc socket spawning
...
We'll need this for handling `IAudioProcessor` method calls in VST3. We
basically want a `Vst3MessageHandler` per `IAudioProcessor` instance,
but without the additional socket spawning or extra thread.
2020-12-21 15:45:47 +01:00
Robbert van der Helm
b38f272013
Run all other lifecycle events on main thread
...
This is probably where plugins instantiate timers for their GUI updates.
2020-12-20 12:29:59 +01:00
Robbert van der Helm
f2153148b2
Construct and destruct IPlugView from GUI thread
2020-12-20 12:18:51 +01:00
Robbert van der Helm
703b6d9285
Add functions to schedule tasks in main IO context
2020-12-20 12:18:51 +01:00