42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#include "clap/clap.h"
|
|
|
|
#include <vector>
|
|
#include <functional>
|
|
#include <initializer_list>
|
|
|
|
namespace stfx { namespace clap {
|
|
|
|
template<template<class> class EffectSTFX>
|
|
struct Plugin : public clap_plugin {
|
|
template<class ...Args>
|
|
Plugin(const clap_plugin_descriptor *desc, Args ...args) : effect(args...) {
|
|
this->desc = desc;
|
|
this->plugin_data = nullptr;
|
|
}
|
|
private:
|
|
stfx::LibraryEffect<float, EffectSTFX> effect;
|
|
};
|
|
|
|
struct Plugins {
|
|
|
|
template<template<class> class EffectSTFX, class ...Args>
|
|
void add(clap_plugin_descriptor desc, std::initializer_list<const char *> features, Args ...args) {
|
|
size_t index = featureLists.size();
|
|
|
|
featureLists.emplace_back(features);
|
|
featureLists[index].push_back(nullptr);
|
|
desc.features = featureLists[index].data();
|
|
descriptors.push_back(desc);
|
|
|
|
creates.push_back([=](){
|
|
return new Plugin<EffectSTFX>(&descriptors[index], args...);
|
|
});
|
|
}
|
|
private:
|
|
std::vector<std::vector<const char *>> featureLists;
|
|
std::vector<clap_plugin_descriptor> descriptors;
|
|
std::vector<std::function<const clap_plugin_t *()>> creates;
|
|
};
|
|
|
|
}} // namespace
|