In addition, it is very difficult to understand how the host → plugin feedback is implemented. Unlike vst2, where there was only one feedback function, here a class is created that inherits the necessary interfaces and methods . Unfortunately, this simple idea about the host_callback class is not described anywhere in a simple and understandable way. There is no simple code example where there would be something like
class vst3_HostCallback //inherit only what is needed
: public FObject
, public IHostApplication
, public IComponentHandler
, public IComponentHandler2
, public IUnitHandler
, public IUnitHandler2
, public IPlugFrame
, public Vst::IPlugInterfaceSupport
{
friend class PlugVST3;
PlugVST3* vst3_owner;
public:
OBJ_METHODS(vst3_HostCallback, FObject)
REFCOUNT_METHODS(FObject)
DEFINE_INTERFACES
DEF_INTERFACE(IHostApplication)
DEF_INTERFACE(IComponentHandler)
DEF_INTERFACE(IComponentHandler2)
DEF_INTERFACE(IUnitHandler)
DEF_INTERFACE(IUnitHandler2)
DEF_INTERFACE(IPlugFrame)
END_DEFINE_INTERFACES(FObject)
//methods of class IHostApplication
//methods of class IComponentHandler
…
}
but this would help a lot. That is, as a result, the real ideas of HOW the plugin works or how the host interacts with it are hidden inside helper wrappers (for example, PlugProvider). In essence, there are ideas behind the VST3 API, but the documentation shifts the focus to studying helpers, i.e. wrappers. And it is difficult to understand how it actually works. Even since the time of VST2, the documentation created by doxygen has caused confusion. A lot of circular HTML links and some complex aspects are not described in detail.
For example, I still haven’t figured out to the end whether it is necessary to call _audio_processor->setBusArrangements() during the initialization process (from the host side)? Or how to read/change the name of the current plugin program on the host side
The SDK directory structure itself is of course also confusing. That is, parts of the SDK are essentially scattered across the base, plugininterface, public .sdk directories and it is not obvious where everything is. Of course, all these are the thoughts of the host developer
I do not claim to be objective - but in some places it is very difficult to understand the essence, although at the moment my DAW seems to scan and correctly work with collections of ~1000 VST3 plugins
I am glad if I gave useful information. Perhaps I will post open sources of a simple but full-fledged test host (with loading, unloading, programs, units, support for one-component, two-component plugins, working with parameters, etc.)