diff --git a/CHANGELOG.md b/CHANGELOG.md index 3820440b..9683d91d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed +- Fixed preset/state loading in both the VST2 and VST3 versions of _Algonaut + Atlas_ by loading and saving plugin state from the main GUI thread. - Added a workaround for a bug present in every _Bluecat Audio_ VST3 plugin where those plugins don't expose the `IPluginBase` interface through their query interface. diff --git a/src/wine-host/bridges/vst2.cpp b/src/wine-host/bridges/vst2.cpp index 502a6970..c660098c 100644 --- a/src/wine-host/bridges/vst2.cpp +++ b/src/wine-host/bridges/vst2.cpp @@ -39,10 +39,13 @@ Vst2Bridge* current_bridge_instance = nullptr; * NOTE: `effMainsChanged` is the odd one here. EZdrummer interacts with the * Win32 message loop while handling this function. If we don't execute * this from the main GUI thread, then EZdrummer won't produce any sound. + * NOTE: `effSetChunk` and `effGetChunk` should be callable from any thread, but + * Algonaut Atlas doesn't restore chunk data unless `effSetChunk` is run + * from the GUI thread */ -const std::set unsafe_opcodes{effOpen, effClose, effEditGetRect, - effEditOpen, effEditClose, effEditIdle, - effEditTop, effMainsChanged}; +const std::set unsafe_opcodes{ + effOpen, effClose, effEditGetRect, effEditOpen, effEditClose, + effEditIdle, effEditTop, effMainsChanged, effGetChunk, effSetChunk}; intptr_t VST_CALL_CONV host_callback_proxy(AEffect*, int, int, intptr_t, void*, float);