diff options
author | Robin Gareus <robin@gareus.org> | 2014-02-21 18:00:12 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-02-22 03:11:48 +0100 |
commit | dfeb68aeb4cfb23b335e3a171314b78327d832e3 (patch) | |
tree | 0de9636e5cbf283c08e21b0da5eb0c8423ce8015 /libs/ardour/vst_plugin.cc | |
parent | 40aa7e5e9034321f8af0b3067bd5f3005c537d5d (diff) |
Windows VST GUI related rework
Diffstat (limited to 'libs/ardour/vst_plugin.cc')
-rw-r--r-- | libs/ardour/vst_plugin.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 5c9c94bdac..f22ddf525e 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -351,8 +351,30 @@ VSTPlugin::load_plugin_preset (PresetRecord r) #else sscanf (r.uri.c_str(), "VST:%d:%d", &id, &index); #endif + +#ifdef PLATFORM_WINDOWS + int const vst_version = _plugin->dispatcher (_plugin, effGetVstVersion, 0, 0, NULL, 0); + if (vst_version >= 2) { + _plugin->dispatcher (_plugin, effBeginSetProgram, 0, 0, NULL, 0); + } + + _plugin->dispatcher (_plugin, effSetProgram, 0, index, NULL, 0); + + if (vst_version >= 2) { + _plugin->dispatcher (_plugin, effEndSetProgram, 0, 0, NULL, 0); + } + + //unfortunately, we don't get any opcodes back from the plugin when this happens (?!) + //so we have to manually update param values from the plugin to our listeners + for (int n = 0; n < parameter_count(); n++ ) { + float p = get_parameter(n); //ask the plugin what its new setting is + Plugin::set_parameter (which, newval); + } + +#else _state->want_program = index; +#endif return true; } |