APVTS Layouts: Groups don't show up in Cubase and Steinberg VST3PluginTestHost

I’m trying to group parameters in a VST3 plugin - but for some reason, all parameters show up in the root level in Cubase 8.5 and the Steinberg VST3PluginTestHost. What am I doing wrong?

void MyPlugin::setupParameters()
{
    AudioProcessorValueTreeState::ParameterLayout layout;
    
    auto globalGroup = std::make_unique<AudioProcessorParameterGroup>("global", "Global", " | ");
    globalGroup->addChild(std::make_unique<AudioParameterFloat>( ... ));
    globalGroup->addChild(std::make_unique<AudioParameterFloat>( ... ));
        
    layout.add(std::move(globalGroup));

    for (int i = 0; i < 4; i++)
        setupGroups(i, layout);

    m_state = std::make_unique<AudioProcessorValueTreeState>(*this, nullptr, "PARAMETERS", std::move(layout));
}

void MyPlugin::setupGroups(int index, AudioProcessorValueTreeState::ParameterLayout& layout)
{
    auto group = std::make_unique<AudioProcessorParameterGroup>("GroupID" + String(index), "Group " + String(index), " | ");
    group->addChild(std::make_unique<AudioParameterFloat>( ... ));
    group->addChild(std::make_unique<AudioParameterFloat>( ... ));
    
    layout.add(std::move(group));
}

I forgot: This is JUCE 5.4.3. Also, the parameters don’t appear with a flattened name.

You’re not doing anything wrong; there was something amiss in our VST3 backend:

1 Like