The docs about this are not entirely clear so here a few questions.
In IPluginCompatibility there is
class PluginCompatibility : public FObject, public IPluginCompatibility
{
public:
//...
tresult PLUGIN_API getCompatibilityJSON (IBStream* stream) override
{
/* write in the stream the JSON compatibility array
[
{
"New": "BD58B550F9E5634E9D2EFF39EA0927B1",
"Old": [
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
],
}
]
*/
return kResultTrue;
}
//...
};
//------------------------------------------------------------------------
static FUnknown* createCompatibilityInstance (void* context)
{
return (IPluginCompatibility*)new PluginCompatibility;
}
//------------------------------------------------------------------------
BEGIN_FACTORY_DEF (stringCompanyName, stringCompanyWeb, stringCompanyEmail)
//...
DEF_CLASS2 (INLINE_UID_FROM_FUID(PluginCompatibilityUID),
PClassInfo::kManyInstances,
kPluginCompatibilityClass,
stringPluginName,
Vst::kDistributable,
"",
FULL_VERSION_STR,
kVstVersionString,
createCompatibilityInstance)
I assume ‘New’ supposed to be the VST3 processor UID , but what about the two ‘old’ ones ?
Perhaps it’s a UID generated from the VST2 four character ID and plugin name as described in How can I update my VST 2 version of my plug-in to a VST 3 version and be sure that Cubase will load it instead of my old one? using convertVST2UID_To_FUID(), but then what about the second 'BBBBBBB … ’ one ?
Then what is the PluginCompatibilityUID supposed to be ?
For Automation compatibility, you have to ensure that VST 3 parameter IDs have the same value than the indexes of their associated parameters in VST 2 . Only with this condition the host can play back the automation. The parameter value has the same meaning in VST 2 and VST 3 .
Does this mean the VST2 and VST3 parameter indexes must match or should the VST3 id’s actually be the samed as VST2 indexes ? I hope it’s the former otherwise that would seriously limit the use case of this feature.
It would be great if there was a fully working sample demonstrating this in the next SDK release.
Thanks,
Lorcan