1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-01 03:10:06 +00:00

VST3: Fixed invalid AudioProcessorParameterGroup unit IDs

This commit is contained in:
Tom Poole 2020-12-18 18:33:55 +00:00
parent d9b2a61454
commit 1fbd6dff9b
3 changed files with 52 additions and 2 deletions

View file

@ -443,6 +443,24 @@ void AudioProcessor::checkForDuplicateParamID (AudioProcessorParameter* param)
#endif
}
void AudioProcessor::checkForDuplicateGroupIDs (const AudioProcessorParameterGroup& newGroup)
{
ignoreUnused (newGroup);
#if JUCE_DEBUG
auto groups = newGroup.getSubgroups (true);
groups.add (&newGroup);
for (auto* group : groups)
{
auto insertResult = groupIDs.insert (group->getID());
// If you hit this assertion then a group ID is not unique
jassert (insertResult.second);
}
#endif
}
const Array<AudioProcessorParameter*>& AudioProcessor::getParameters() const { return flatParameterList; }
const AudioProcessorParameterGroup& AudioProcessor::getParameterTree() const { return parameterTree; }
@ -461,6 +479,7 @@ void AudioProcessor::addParameter (AudioProcessorParameter* param)
void AudioProcessor::addParameterGroup (std::unique_ptr<AudioProcessorParameterGroup> group)
{
jassert (group != nullptr);
checkForDuplicateGroupIDs (*group);
auto oldSize = flatParameterList.size();
flatParameterList.addArray (group->getParameters (true));
@ -481,9 +500,12 @@ void AudioProcessor::setParameterTree (AudioProcessorParameterGroup&& newTree)
{
#if JUCE_DEBUG
paramIDs.clear();
groupIDs.clear();
#endif
parameterTree = std::move (newTree);
checkForDuplicateGroupIDs (parameterTree);
flatParameterList = parameterTree.getParameters (true);
for (int i = 0; i < flatParameterList.size(); ++i)

View file

@ -1487,10 +1487,11 @@ private:
#endif
bool textRecursionCheck = false;
std::unordered_set<String> paramIDs;
std::unordered_set<String> paramIDs, groupIDs;
#endif
void checkForDuplicateParamID (AudioProcessorParameter*);
void checkForDuplicateGroupIDs (const AudioProcessorParameterGroup&);
AudioProcessorListener* getListenerLocked (int) const noexcept;
void updateSpeakerFormatStrings();