diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp index b71252f9b0..e0c798b415 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp @@ -810,19 +810,6 @@ public: updateParameterInfo(); - info.stepCount = (Steinberg::int32) 0; - - #if ! JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE - if (param.isDiscrete()) - #endif - { - const int numSteps = param.getNumSteps(); - info.stepCount = (Steinberg::int32) (numSteps > 0 && numSteps < 0x7fffffff ? numSteps - 1 : 0); - } - - info.defaultNormalizedValue = param.getDefaultValue(); - jassert (info.defaultNormalizedValue >= 0 && info.defaultNormalizedValue <= 1.0f); - // Is this a meter? if ((((unsigned int) param.getCategory() & 0xffff0000) >> 16) == 2) info.flags = Vst::ParameterInfo::kIsReadOnly; @@ -846,9 +833,29 @@ public: return true; }; - auto anyUpdated = updateParamIfChanged (info.title, param.getName (128)); - anyUpdated |= updateParamIfChanged (info.shortTitle, param.getName (8)); - anyUpdated |= updateParamIfChanged (info.units, param.getLabel()); + const auto updateParamIfScalarChanged = [] (auto& toChange, const auto newValue) + { + return ! exactlyEqual (std::exchange (toChange, newValue), newValue); + }; + + const auto newStepCount = [&] + { + #if ! JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE + if (! param.isDiscrete()) + return 0; + #endif + + const auto numSteps = param.getNumSteps(); + return (Steinberg::int32) (0 < numSteps && numSteps < 0x7fffffff ? numSteps - 1 : 0); + }(); + + auto anyUpdated = updateParamIfChanged (info.title, param.getName (128)); + anyUpdated |= updateParamIfChanged (info.shortTitle, param.getName (8)); + anyUpdated |= updateParamIfChanged (info.units, param.getLabel()); + anyUpdated |= updateParamIfScalarChanged (info.stepCount, newStepCount); + anyUpdated |= updateParamIfScalarChanged (info.defaultNormalizedValue, (double) param.getDefaultValue()); + + jassert (0 <= info.defaultNormalizedValue && info.defaultNormalizedValue <= 1.0); return anyUpdated; } @@ -1333,7 +1340,7 @@ public: { for (int32 i = 0; i < parameters.getParameterCount(); ++i) if (auto* param = dynamic_cast (parameters.getParameterByIndex (i))) - if (param->updateParameterInfo() && (flags & Vst::kParamTitlesChanged) == 0) + if (param->updateParameterInfo()) flags |= Vst::kParamTitlesChanged; }