Add the Vst3Bridge boilerplate

This commit is contained in:
Robbert van der Helm
2020-12-02 21:19:55 +01:00
parent 6179fddbc8
commit 6e5aa1c1c6
6 changed files with 159 additions and 20 deletions
+62 -1
View File
@@ -18,4 +18,65 @@
#include <string>
void justdewit(const std::string& path);
#include <public.sdk/source/vst/hosting/module.h>
#include "../../common/communication/vst3.h"
#include "../../common/configuration.h"
#include "common.h"
/**
* This hosts a Windows VST3 plugin, forwards messages sent by the Linux VST
* plugin and provides host callback function for the plugin to talk back.
*/
class Vst3Bridge : public HostBridge {
public:
/**
* Initializes the Windows VST3 plugin and set up communication with the
* native Linux VST plugin.
*
* @param main_context The main IO context for this application. Most events
* will be dispatched to this context, and the event handling loop should
* also be run from this context.
* @param plugin_dll_path A (Unix style) path to the VST plugin .dll file to
* load.
* @param endpoint_base_dir The base directory used for the socket
* endpoints. See `Sockets` for more information.
*
* @note The object has to be constructed from the same thread that calls
* `main_context.run()`.
*
* @throw std::runtime_error Thrown when the VST plugin could not be loaded,
* or if communication could not be set up.
*/
Vst3Bridge(MainContext& main_context,
std::string plugin_dll_path,
std::string endpoint_base_dir);
void run() override;
private:
/**
* The IO context used for event handling so that all events and window
* message handling can be performed from a single thread, even when hosting
* multiple plugins.
*/
MainContext& main_context;
/**
* The configuration for this instance of yabridge based on the `.so` file
* that got loaded by the host. This configuration gets loaded on the plugin
* side, and then sent over to the Wine host as part of the startup process.
*/
Configuration config;
std::shared_ptr<VST3::Hosting::Module> module;
/**
* All sockets used for communicating with this specific plugin.
*
* NOTE: This is defined **after** the threads on purpose. This way the
* sockets will be closed first, and we can then safely wait for the
* threads to exit.
*/
Vst3Sockets<Win32Thread> sockets;
};