From 64c898d0273db7fefeb73fc9340b8aa99bb281ab Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Fri, 30 Nov 2018 12:10:47 +0000 Subject: [PATCH] VST3: Fixed a hosting issue retrieving the parameters of plug-ins that need their IO configured first --- .../format_types/juce_VST3PluginFormat.cpp | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index 5db92a7162..a223217418 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -1774,11 +1774,22 @@ public: editController->setComponentHandler (holder->host); grabInformationObjects(); interconnectComponentAndController(); - addParameters(); - synchroniseStates(); - syncProgramNames(); + + auto configureParameters = [this] + { + addParameters(); + synchroniseStates(); + syncProgramNames(); + }; + configureParameters(); + setupIO(); + // Some plug-ins don't present their parameters until after the IO has been + // configured, so we need to jump though all these hoops again + if (getParameters().isEmpty() && editController->getParameterCount() > 0) + configureParameters(); + return true; } @@ -2799,6 +2810,7 @@ private: { int idx, num = editController->getParameterCount(); + for (idx = 0; idx < num; ++idx) if (editController->getParameterInfo (idx, paramInfo) == kResultOk && (paramInfo.flags & Steinberg::Vst::ParameterInfo::kIsProgramChange) != 0) @@ -2845,8 +2857,7 @@ private: } } - if (editController != nullptr - && paramInfo.stepCount > 0) + if (editController != nullptr && paramInfo.stepCount > 0) { auto numPrograms = paramInfo.stepCount + 1;