1
0
Fork 0
Commit graph

28 commits

Author SHA1 Message Date
Robbert van der Helm
7c5aa9069b Simplify lifetime bounds 2022-04-24 20:03:30 +02:00
Robbert van der Helm
566095802c Decouple state functions from CLAP/VST3 wrapper
This should also be usable with a plain `params` object, since we don't
need hashes in the standalone wrapper.
2022-04-24 19:46:07 +02:00
Robbert van der Helm
9acd312768 Parmaeters are not real, they can't hurt you 2022-04-24 19:46:07 +02:00
Robbert van der Helm
2af3f84416 Rename State to PluginState
Now that it is part of the public API.
2022-04-07 17:39:34 +02:00
Robbert van der Helm
d0064f87d6 Add state saving and restoring through GuiContext
While preventing any possible data races.
2022-04-07 17:19:24 +02:00
Robbert van der Helm
7ca855b3fc Make State cloneable
This is needed for user preset support.
2022-04-07 16:50:02 +02:00
Robbert van der Helm
083885a40c Rework Params trait API with Arc instead of Pin
This is a breaking change requiring a small change to plugin
implementations.

The reason why `Pin<&dyn Params>` was used was more as a hint to
indicate that the object must last for the plugin's lifetime, but `Pin`
doesn't enforce that. It also makes the APIs a lot more awkward.
Requiring the use of `Arc` fixes the following problems:

- When storing the params object in the wrapper, the `ParamPtr`s are
  guaranteed to be stable.
- This makes it possible to access the `Params` object without acquiring
  a lock on the plugin, this is very important for implementing
  plugin-side preset management.
- It enforces immutability on the `Params` object.
- And of course the API is much nicer without a bunch of unsafe code to
  work around Pin's limitations.
2022-04-07 15:31:46 +02:00
Robbert van der Helm
54371fb488 Expose the State object
So we can later allow plugins to save and restore state from their GUI
this way.
2022-04-07 14:12:53 +02:00
Robbert van der Helm
b1c34146ee Get rid of automatically generated bypass params
I thought these were mandatory in VST3, they are not.
2022-04-06 13:34:32 +02:00
Robbert van der Helm
8090d0ae41 Add explicit bypass parameter handling
Plugins can mark a `BoolParam` with `.is_bypass()`. Hosts can then link
use that parameter directly in their own UI.
2022-03-23 17:42:48 +01:00
Robbert van der Helm
b9d79771cc Use String instead of &'static str in Params
This may hurt performance in generic UIs a bit, but it will allow you to
programatically generate custom Params implementations for repeated
Parameters structs.
2022-03-20 02:14:18 +01:00
Robbert van der Helm
4c0b07c578 💥 Move re-exports to a prelude module
So you can import everything at once, because you're likely going to
need at least 90% of it anyways.
2022-03-03 23:23:51 +01:00
Robbert van der Helm
f581294d7b Update rustdoc formatting for links
Apparently it showed this text verbatim, and not in monospace.
2022-03-03 23:05:12 +01:00
Robbert van der Helm
ec452bd41d Also move state deserialization to a function 2022-03-02 16:00:11 +01:00
Robbert van der Helm
7a3d3b8c8e Move state serialization to a helper function
So we can reuse it for the CLAP wrapper.
2022-03-02 15:49:40 +01:00
Robbert van der Helm
4f0e2b70b5 Rework EnumParam to be a whole lot less sketchy
Now it no longer needs to do any unsound type punning. The internal
parameter that the wrapper has access to has been completely type
erased, and only the outer parameter knows about enum T. This also gets
rid of strum and replaces it with a custom trait.
2022-02-14 15:34:46 +01:00
Robbert van der Helm
39e8dfc83c Add somewhat shady enum parameters 2022-02-14 02:04:17 +01:00
Robbert van der Helm
f645b6a92f Relicense under the ISC license 2022-02-12 16:04:46 +01:00
Robbert van der Helm
b901dac012 Disambiguate rustdoc link references 2022-02-05 12:56:03 +01:00
Robbert van der Helm
6494d1ed5f Store persistent fields as plain JSON strings
On second thought, this is much better. The resulting file size will be
much smaller because only double quotes need to be escaped. It's also
easier to read at a glance.
2022-01-30 18:23:13 +01:00
Robbert van der Helm
3111d75b29 Serialize custom persistent fields as base64
This still takes up more space than plain JSON would, but I don't know
if serde_json would allow inlining that JSON. Presumably not. It would
get hairy quickly as a regular embedded JSON string due to the encoding.
2022-01-30 18:15:01 +01:00
Robbert van der Helm
29a0f83163 Add a TODO on packing stored state 2022-01-30 17:29:25 +01:00
Robbert van der Helm
f0ea9e9451 Fix broken rustdoc links 2022-01-30 17:17:34 +01:00
Robbert van der Helm
486fc67a4b Serialize persistent fields for VST3 plugins 2022-01-30 17:09:18 +01:00
Robbert van der Helm
7feb8006ef Persist the bypass parameter 2022-01-30 02:04:35 +01:00
Robbert van der Helm
47d102f2ba Implement restoring parameter values 2022-01-29 16:42:20 +01:00
Robbert van der Helm
ebb74a737c Use plain instead of unnormalized in the APIs
It takes more effort than what should be needed to tell normalized and
unnormalized apart at a glance.
2022-01-29 14:54:48 +01:00
Robbert van der Helm
97a88e0db2 Implement saving parameter state
Restoring is next.
2022-01-29 14:20:14 +01:00