Browse Source

Update to latest carla and dpf, experiment with wasm things

Signed-off-by: falkTX <falktx@falktx.com>
tags/v1.1
falkTX 2 years ago
parent
commit
f5548388ed
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
5 changed files with 216 additions and 123 deletions
  1. +2
    -4
      Makefile
  2. +1
    -1
      carla
  3. +1
    -1
      dpf
  4. +203
    -117
      plugins/Common/IldaeilUI.cpp
  5. +9
    -0
      plugins/Common/Makefile.mk

+ 2
- 4
Makefile View File

@@ -23,8 +23,6 @@ DESTDIR ?=
CARLA_EXTRA_ARGS = CARLA_BACKEND_NAMESPACE=Ildaeil \ CARLA_EXTRA_ARGS = CARLA_BACKEND_NAMESPACE=Ildaeil \
CAN_GENERATE_LV2_TTL=false \ CAN_GENERATE_LV2_TTL=false \
STATIC_PLUGIN_TARGET=true \ STATIC_PLUGIN_TARGET=true \
USING_CUSTOM_DPF=true \
CUSTOM_DPF_PATH=$(CURDIR)/dpf \
HAVE_FFMPEG=false \ HAVE_FFMPEG=false \
HAVE_FLUIDSYNTH=false \ HAVE_FLUIDSYNTH=false \
HAVE_PROJECTM=false \ HAVE_PROJECTM=false \
@@ -60,8 +58,8 @@ endif


# -------------------------------------------------------------- # --------------------------------------------------------------


carla:
$(MAKE) bridges-plugin bridges-ui static-plugin -C carla $(CARLA_EXTRA_ARGS)
carla: dgl
$(MAKE) bridges-ui static-plugin -C carla $(CARLA_EXTRA_ARGS)


dgl: dgl:
$(MAKE) -C dpf/dgl opengl $(MAKE) -C dpf/dgl opengl


+ 1
- 1
carla

@@ -1 +1 @@
Subproject commit 71cbec159f57a6a7296e56b9f4b4d15c799a429f
Subproject commit 06d6981732236c6bfcb5fcf324277407d6dd194e

+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit 3aa2e83debdc096fe247829ecdebf11d57ab57e6
Subproject commit 48531699de1019d2035145be317d5005cba1a5c3

+ 203
- 117
plugins/Common/IldaeilUI.cpp View File

@@ -20,7 +20,7 @@


#include "CarlaBackendUtils.hpp" #include "CarlaBackendUtils.hpp"
#include "PluginHostWindow.hpp" #include "PluginHostWindow.hpp"
#include "extra/Thread.hpp"
#include "extra/Runner.hpp"


// IDE helper // IDE helper
#include "DearImGui.hpp" #include "DearImGui.hpp"
@@ -50,11 +50,15 @@ START_NAMESPACE_DISTRHO
using namespace CARLA_BACKEND_NAMESPACE; using namespace CARLA_BACKEND_NAMESPACE;


class IldaeilUI : public UI, class IldaeilUI : public UI,
public Thread,
public Runner,
public PluginHostWindow::Callbacks public PluginHostWindow::Callbacks
{ {
static constexpr const uint kInitialWidth = 520; static constexpr const uint kInitialWidth = 520;
#ifdef DISTRHO_OS_WASM
static constexpr const uint kInitialHeight = 350;
#else
static constexpr const uint kInitialHeight = 520; static constexpr const uint kInitialHeight = 520;
#endif
static constexpr const uint kGenericWidth = 380; static constexpr const uint kGenericWidth = 380;
static constexpr const uint kGenericHeight = 400; static constexpr const uint kGenericHeight = 400;
static constexpr const uint kButtonHeight = 20; static constexpr const uint kButtonHeight = 20;
@@ -144,6 +148,7 @@ class IldaeilUI : public UI,
PluginType fPluginType; PluginType fPluginType;
PluginType fNextPluginType; PluginType fNextPluginType;
uint fPluginCount; uint fPluginCount;
uint fPluginId;
int fPluginSelected; int fPluginSelected;
bool fPluginScanningFinished; bool fPluginScanningFinished;
bool fPluginHasCustomUI; bool fPluginHasCustomUI;
@@ -159,20 +164,42 @@ class IldaeilUI : public UI,
char fPluginSearchString[0xff]; char fPluginSearchString[0xff];


String fPopupError; String fPopupError;

Size<uint> fNextSize; Size<uint> fNextSize;


struct RunnerData {
bool needsReinit;
uint pluginCount;
uint pluginIndex;

RunnerData()
: needsReinit(true),
pluginCount(0),
pluginIndex(0) {}
void init()
{
needsReinit = true;
pluginCount = 0;
pluginIndex = 0;
}
} fRunnerData;

public: public:
IldaeilUI() IldaeilUI()
: UI(kInitialWidth, kInitialHeight), : UI(kInitialWidth, kInitialHeight),
Thread("IldaeilScanner"),
Runner("IldaeilScanner"),
fDrawingState(kDrawingLoading), fDrawingState(kDrawingLoading),
fIdleState(kIdleInit), fIdleState(kIdleInit),
fPlugin((IldaeilBasePlugin*)getPluginInstancePointer()), fPlugin((IldaeilBasePlugin*)getPluginInstancePointer()),
fPluginHostWindow(getWindow(), this), fPluginHostWindow(getWindow(), this),
#ifdef DISTRHO_OS_WASM
fPluginType(PLUGIN_INTERNAL),
#else
fPluginType(PLUGIN_LV2), fPluginType(PLUGIN_LV2),
#endif
fNextPluginType(fPluginType), fNextPluginType(fPluginType),
fPluginCount(0), fPluginCount(0),
fPluginId(0),
fPluginSelected(-1), fPluginSelected(-1),
fPluginScanningFinished(false), fPluginScanningFinished(false),
fPluginHasCustomUI(false), fPluginHasCustomUI(false),
@@ -182,7 +209,8 @@ public:
fPluginWillRunInBridgeMode(false), fPluginWillRunInBridgeMode(false),
fPlugins(nullptr), fPlugins(nullptr),
fPluginSearchActive(false), fPluginSearchActive(false),
fPluginSearchFirstShow(false)
fPluginSearchFirstShow(false),
fRunnerData()
{ {
const double scaleFactor = getScaleFactor(); const double scaleFactor = getScaleFactor();


@@ -226,6 +254,18 @@ public:
fIdleState = kIdleInitPluginAlreadyLoaded; fIdleState = kIdleInitPluginAlreadyLoaded;


fPlugin->fUI = this; fPlugin->fUI = this;

/* TESTING
if (carla_add_plugin(handle, BINARY_NATIVE, fPluginType, nullptr, nullptr,
"midifile", 0, 0x0, PLUGIN_OPTIONS_NULL))
{
d_stdout("Special hack for MIDI file playback activated");
carla_set_custom_data(handle, 0, CUSTOM_DATA_TYPE_PATH, "file", "/furelise.mid");
carla_set_parameter_value(handle, 0, 0, 1.0f);
carla_set_parameter_value(handle, 0, 1, 0.0f);
fPluginId = 1;
}
*/
} }


~IldaeilUI() override ~IldaeilUI() override
@@ -240,9 +280,7 @@ public:
carla_set_engine_option(fPlugin->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0"); carla_set_engine_option(fPlugin->fCarlaHostHandle, ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0");
} }


if (isThreadRunning())
stopThread(-1);

stopRunner();
fPluginGenericUI = nullptr; fPluginGenericUI = nullptr;


delete[] fPlugins; delete[] fPlugins;
@@ -254,9 +292,12 @@ public:


if (carla_get_current_plugin_count(handle) != 0) if (carla_get_current_plugin_count(handle) != 0)
{ {
const uint hints = carla_get_plugin_info(handle, 0)->hints;
#ifndef DISTRHO_OS_WASM
// FIXME
const uint hints = carla_get_plugin_info(handle, fPluginId)->hints;
fPluginHasCustomUI = hints & PLUGIN_HAS_CUSTOM_UI; fPluginHasCustomUI = hints & PLUGIN_HAS_CUSTOM_UI;
fPluginHasEmbedUI = hints & PLUGIN_HAS_CUSTOM_EMBED_UI; fPluginHasEmbedUI = hints & PLUGIN_HAS_CUSTOM_EMBED_UI;
#endif
fPluginRunning = true; fPluginRunning = true;
return true; return true;
} }
@@ -303,8 +344,10 @@ public:


void showPluginUI(const CarlaHostHandle handle, const bool showIfNotEmbed) void showPluginUI(const CarlaHostHandle handle, const bool showIfNotEmbed)
{ {
const CarlaPluginInfo* const info = carla_get_plugin_info(handle, 0);
#ifndef DISTRHO_OS_WASM
const CarlaPluginInfo* const info = carla_get_plugin_info(handle, fPluginId);


// FIXME
if (info->hints & PLUGIN_HAS_CUSTOM_EMBED_UI) if (info->hints & PLUGIN_HAS_CUSTOM_EMBED_UI)
{ {
fDrawingState = kDrawingPluginEmbedUI; fDrawingState = kDrawingPluginEmbedUI;
@@ -312,16 +355,17 @@ public:
fPluginHasCustomUI = true; fPluginHasCustomUI = true;
fPluginHasEmbedUI = true; fPluginHasEmbedUI = true;


carla_embed_custom_ui(handle, 0, fPluginHostWindow.attachAndGetWindowHandle());
carla_embed_custom_ui(handle, fPluginId, fPluginHostWindow.attachAndGetWindowHandle());
} }
else else
#endif
{ {
createOrUpdatePluginGenericUI(handle); createOrUpdatePluginGenericUI(handle);


if (showIfNotEmbed && fPluginHasCustomUI) if (showIfNotEmbed && fPluginHasCustomUI)
{ {
fIdleState = kIdleGiveIdleToUI; fIdleState = kIdleGiveIdleToUI;
carla_show_custom_ui(handle, 0, true);
carla_show_custom_ui(handle, fPluginId, true);
} }
} }


@@ -333,26 +377,31 @@ public:
DISTRHO_SAFE_ASSERT_RETURN(fPluginRunning,); DISTRHO_SAFE_ASSERT_RETURN(fPluginRunning,);


fPluginHostWindow.hide(); fPluginHostWindow.hide();
carla_show_custom_ui(handle, 0, false);
carla_show_custom_ui(handle, fPluginId, false);
} }


void createOrUpdatePluginGenericUI(const CarlaHostHandle handle, const CarlaPluginInfo* info = nullptr) void createOrUpdatePluginGenericUI(const CarlaHostHandle handle, const CarlaPluginInfo* info = nullptr)
{ {
if (info == nullptr) if (info == nullptr)
info = carla_get_plugin_info(handle, 0);
info = carla_get_plugin_info(handle, fPluginId);


fDrawingState = kDrawingPluginGenericUI; fDrawingState = kDrawingPluginGenericUI;
#ifndef DISTRHO_OS_WASM
// FIXME
fPluginHasCustomUI = info->hints & PLUGIN_HAS_CUSTOM_UI; fPluginHasCustomUI = info->hints & PLUGIN_HAS_CUSTOM_UI;
fPluginHasEmbedUI = info->hints & PLUGIN_HAS_CUSTOM_EMBED_UI; fPluginHasEmbedUI = info->hints & PLUGIN_HAS_CUSTOM_EMBED_UI;
#endif


if (fPluginGenericUI == nullptr) if (fPluginGenericUI == nullptr)
createPluginGenericUI(handle, info); createPluginGenericUI(handle, info);
else else
updatePluginGenericUI(handle); updatePluginGenericUI(handle);


#ifndef DISTRHO_OS_WASM
ImGuiStyle& style(ImGui::GetStyle()); ImGuiStyle& style(ImGui::GetStyle());
const double scaleFactor = getScaleFactor(); const double scaleFactor = getScaleFactor();
fNextSize = Size<uint>(kGenericWidth * scaleFactor, (kGenericHeight + style.FramePadding.x) * scaleFactor); fNextSize = Size<uint>(kGenericWidth * scaleFactor, (kGenericHeight + style.FramePadding.x) * scaleFactor);
#endif
} }


void createPluginGenericUI(const CarlaHostHandle handle, const CarlaPluginInfo* const info) void createPluginGenericUI(const CarlaHostHandle handle, const CarlaPluginInfo* const info)
@@ -364,12 +413,12 @@ public:
title += info->maker; title += info->maker;
ui->title = title.getAndReleaseBuffer(); ui->title = title.getAndReleaseBuffer();


const uint32_t pcount = ui->parameterCount = carla_get_parameter_count(handle, 0);
const uint32_t pcount = ui->parameterCount = carla_get_parameter_count(handle, fPluginId);


// make count of valid parameters // make count of valid parameters
for (uint32_t i=0; i < pcount; ++i) for (uint32_t i=0; i < pcount; ++i)
{ {
const ParameterData* const pdata = carla_get_parameter_data(handle, 0, i);
const ParameterData* const pdata = carla_get_parameter_data(handle, fPluginId, i);


if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0) if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0)
{ {
@@ -387,13 +436,13 @@ public:
// now safely fill in details // now safely fill in details
for (uint32_t i=0, j=0; i < pcount; ++i) for (uint32_t i=0, j=0; i < pcount; ++i)
{ {
const ParameterData* const pdata = carla_get_parameter_data(handle, 0, i);
const ParameterData* const pdata = carla_get_parameter_data(handle, fPluginId, i);


if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0) if ((pdata->hints & PARAMETER_IS_ENABLED) == 0x0)
continue; continue;


const CarlaParameterInfo* const pinfo = carla_get_parameter_info(handle, 0, i);
const ::ParameterRanges* const pranges = carla_get_parameter_ranges(handle, 0, i);
const CarlaParameterInfo* const pinfo = carla_get_parameter_info(handle, fPluginId, i);
const ::ParameterRanges* const pranges = carla_get_parameter_ranges(handle, fPluginId, i);


String printformat; String printformat;


@@ -414,7 +463,7 @@ public:
param.min = pranges->min; param.min = pranges->min;
param.max = pranges->max; param.max = pranges->max;


ui->values[j] = carla_get_current_parameter_value(handle, 0, i);
ui->values[j] = carla_get_current_parameter_value(handle, fPluginId, i);


if (param.boolean) if (param.boolean)
param.bvalue = ui->values[j] > param.min; param.bvalue = ui->values[j] > param.min;
@@ -434,7 +483,7 @@ public:


for (uint32_t i=0; i < ui->parameterCount; ++i) for (uint32_t i=0; i < ui->parameterCount; ++i)
{ {
ui->values[i] = carla_get_current_parameter_value(handle, 0, ui->parameters[i].rindex);
ui->values[i] = carla_get_current_parameter_value(handle, fPluginId, ui->parameters[i].rindex);


if (ui->parameters[i].boolean) if (ui->parameters[i].boolean)
ui->parameters[i].bvalue = ui->values[i] > ui->parameters[i].min; ui->parameters[i].bvalue = ui->values[i] > ui->parameters[i].min;
@@ -446,7 +495,7 @@ public:
if (fPluginRunning) if (fPluginRunning)
{ {
hidePluginUI(handle); hidePluginUI(handle);
carla_replace_plugin(handle, 0);
carla_replace_plugin(handle, fPluginId);
} }


carla_set_engine_option(handle, ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, fPluginWillRunInBridgeMode, nullptr); carla_set_engine_option(handle, ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, fPluginWillRunInBridgeMode, nullptr);
@@ -459,6 +508,18 @@ public:
fPluginRunning = true; fPluginRunning = true;
fPluginGenericUI = nullptr; fPluginGenericUI = nullptr;
showPluginUI(handle, false); showPluginUI(handle, false);

/* TESTING
d_stdout("loaded a plugin with label '%s'", label);

if (std::strcmp(label, "audiofile") == 0)
{
d_stdout("Loading mp3 file into audiofile plugin");
carla_set_custom_data(handle, fPluginId, CUSTOM_DATA_TYPE_PATH, "file", "/foolme.mp3");
carla_set_parameter_value(handle, fPluginId, 1, 0.0f);
fPluginGenericUI->values[1] = 0.0f;
}
*/
} }
else else
{ {
@@ -501,13 +562,13 @@ protected:
{ {
case kIdleInit: case kIdleInit:
fIdleState = kIdleNothing; fIdleState = kIdleNothing;
startThread();
startRunner();
break; break;


case kIdleInitPluginAlreadyLoaded: case kIdleInitPluginAlreadyLoaded:
fIdleState = kIdleNothing; fIdleState = kIdleNothing;
showPluginUI(handle, false); showPluginUI(handle, false);
startThread();
startRunner();
break; break;


case kIdlePluginLoadedFromDSP: case kIdlePluginLoadedFromDSP:
@@ -522,7 +583,7 @@ protected:


case kIdleResetPlugin: case kIdleResetPlugin:
fIdleState = kIdleNothing; fIdleState = kIdleNothing;
loadPlugin(handle, carla_get_plugin_info(handle, 0)->label);
loadPlugin(handle, carla_get_plugin_info(handle, fPluginId)->label);
break; break;


case kIdleShowCustomUI: case kIdleShowCustomUI:
@@ -538,7 +599,7 @@ protected:


case kIdleHidePluginUI: case kIdleHidePluginUI:
fIdleState = kIdleNothing; fIdleState = kIdleNothing;
carla_show_custom_ui(handle, 0, false);
carla_show_custom_ui(handle, fPluginId, false);
break; break;


case kIdleGiveIdleToUI: case kIdleGiveIdleToUI:
@@ -551,10 +612,9 @@ protected:
if (fPluginRunning) if (fPluginRunning)
hidePluginUI(handle); hidePluginUI(handle);
fPluginSelected = -1; fPluginSelected = -1;
if (isThreadRunning())
stopThread(-1);
stopRunner();
fPluginType = fNextPluginType; fPluginType = fNextPluginType;
startThread();
startRunner();
break; break;


case kIdleNothing: case kIdleNothing:
@@ -597,109 +657,133 @@ protected:
void uiFileBrowserSelected(const char* const filename) override void uiFileBrowserSelected(const char* const filename) override
{ {
if (fPlugin != nullptr && fPlugin->fCarlaHostHandle != nullptr && filename != nullptr) if (fPlugin != nullptr && fPlugin->fCarlaHostHandle != nullptr && filename != nullptr)
carla_set_custom_data(fPlugin->fCarlaHostHandle, 0, CUSTOM_DATA_TYPE_STRING, "file", filename);
carla_set_custom_data(fPlugin->fCarlaHostHandle, fPluginId, CUSTOM_DATA_TYPE_STRING, "file", filename);
} }


void run() override
bool startRunner()
{ {
const char* path;
switch (fPluginType)
{
case PLUGIN_LV2:
path = std::getenv("LV2_PATH");
break;
default:
path = nullptr;
break;
}

if (path != nullptr)
carla_set_engine_option(fPlugin->fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, fPluginType, path);

fPluginCount = 0;
delete[] fPlugins;
if (isRunnerActive())
stopRunner();


uint count;
fRunnerData.needsReinit = true;
return Runner::startRunner();
}


bool run() override
{
if (fRunnerData.needsReinit)
{ {
const MutexLocker cml(fPlugin->sPluginInfoLoadMutex);
fRunnerData.needsReinit = false;


d_stdout("Will scan plugins now...");
count = carla_get_cached_plugin_count(fPluginType, path);
d_stdout("Scanning found %u plugins", count);
}
const char* path;
switch (fPluginType)
{
case PLUGIN_LV2:
path = std::getenv("LV2_PATH");
break;
default:
path = nullptr;
break;
}


if (fDrawingState == kDrawingLoading)
{
fDrawingState = kDrawingPluginList;
fPluginSearchFirstShow = true;
}
if (path != nullptr)
carla_set_engine_option(fPlugin->fCarlaHostHandle, ENGINE_OPTION_PLUGIN_PATH, fPluginType, path);


if (count != 0)
{
fPlugins = new PluginInfoCache[count];
fPluginCount = 0;
delete[] fPlugins;


for (uint i=0, j; i < count && ! shouldThreadExit(); ++i)
{ {
const MutexLocker cml(fPlugin->sPluginInfoLoadMutex); const MutexLocker cml(fPlugin->sPluginInfoLoadMutex);


const CarlaCachedPluginInfo* const info = carla_get_cached_plugin_info(fPluginType, i);
DISTRHO_SAFE_ASSERT_CONTINUE(info != nullptr);
d_stdout("Will scan plugins now...");
fRunnerData.pluginCount = carla_get_cached_plugin_count(fPluginType, path);
d_stdout("Scanning found %u plugins", fRunnerData.pluginCount);
}


if (! info->valid)
continue;
if (fDrawingState == kDrawingLoading)
{
fDrawingState = kDrawingPluginList;
fPluginSearchFirstShow = true;
}


if (info->cvIns != 0 || info->cvOuts != 0)
continue;
if (fRunnerData.pluginCount != 0)
{
fPlugins = new PluginInfoCache[fRunnerData.pluginCount];
fPluginScanningFinished = false;
return true;
}
else
{
fPlugins = nullptr;
fPluginScanningFinished = true;
return false;
}
}


#if DISTRHO_PLUGIN_IS_SYNTH
if (info->midiIns != 1 && info->audioIns != 0)
continue;
if ((info->hints & PLUGIN_IS_SYNTH) == 0x0 && info->audioIns != 0)
continue;
if (info->audioOuts != 1 && info->audioOuts != 2)
continue;
#elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
if ((info->midiIns != 1 && info->audioIns != 0 && info->audioOuts != 0) || info->midiOuts != 1)
continue;
if (info->audioIns != 0 || info->audioOuts != 0)
continue;
#else
if (info->audioIns != 1 && info->audioIns != 2)
continue;
if (info->audioOuts != 1 && info->audioOuts != 2)
continue;
#endif
const uint index = fRunnerData.pluginIndex++;
DISTRHO_SAFE_ASSERT_UINT2_RETURN(index < fRunnerData.pluginCount,
index, fRunnerData.pluginCount, false);


if (fPluginType == PLUGIN_INTERNAL)
{
if (std::strcmp(info->label, "audiogain_s") == 0)
continue;
if (std::strcmp(info->label, "cv2audio") == 0)
continue;
if (std::strcmp(info->label, "lfo") == 0)
continue;
if (std::strcmp(info->label, "midi2cv") == 0)
continue;
if (std::strcmp(info->label, "midithrough") == 0)
continue;
if (std::strcmp(info->label, "3bandsplitter") == 0)
continue;
}
do {
const MutexLocker cml(fPlugin->sPluginInfoLoadMutex);

const CarlaCachedPluginInfo* const info = carla_get_cached_plugin_info(fPluginType, index);
DISTRHO_SAFE_ASSERT_RETURN(info != nullptr, true);


j = fPluginCount;
fPlugins[j].name = strdup(info->name);
fPlugins[j].label = strdup(info->label);
++fPluginCount;
if (! info->valid)
break;

if (info->cvIns != 0 || info->cvOuts != 0)
break;

#if DISTRHO_PLUGIN_IS_SYNTH
if (info->midiIns != 1 && info->audioIns != 0)
break;
if ((info->hints & PLUGIN_IS_SYNTH) == 0x0 && info->audioIns != 0)
break;
if (info->audioOuts != 1 && info->audioOuts != 2)
break;
#elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
if ((info->midiIns != 1 && info->audioIns != 0 && info->audioOuts != 0) || info->midiOuts != 1)
break;
if (info->audioIns != 0 || info->audioOuts != 0)
break;
#else
if (info->audioIns != 1 && info->audioIns != 2)
break;
if (info->audioOuts != 1 && info->audioOuts != 2)
break;
#endif

if (fPluginType == PLUGIN_INTERNAL)
{
if (std::strcmp(info->label, "audiogain_s") == 0)
break;
if (std::strcmp(info->label, "cv2audio") == 0)
break;
if (std::strcmp(info->label, "lfo") == 0)
break;
if (std::strcmp(info->label, "midi2cv") == 0)
break;
if (std::strcmp(info->label, "midithrough") == 0)
break;
if (std::strcmp(info->label, "3bandsplitter") == 0)
break;
} }
}
else
{
fPlugins = nullptr;
}


if (! shouldThreadExit())
fPluginScanningFinished = true;
const uint pindex = fPluginCount;
fPlugins[pindex].name = strdup(info->name);
fPlugins[pindex].label = strdup(info->label);
++fPluginCount;
} while (false);

// run again
if (fRunnerData.pluginIndex != fRunnerData.pluginCount)
return true;

// stop here
fPluginScanningFinished = true;
return false;
} }


void onImGuiDisplay() override void onImGuiDisplay() override
@@ -791,8 +875,10 @@ protected:
fIdleState = kIdleHidePluginUI; fIdleState = kIdleHidePluginUI;
fDrawingState = kDrawingPluginList; fDrawingState = kDrawingPluginList;


#ifndef DISTRHO_OS_WASM
const double scaleFactor = getScaleFactor(); const double scaleFactor = getScaleFactor();
fNextSize = Size<uint>(kInitialWidth * scaleFactor, kInitialHeight * scaleFactor); fNextSize = Size<uint>(kInitialWidth * scaleFactor, kInitialHeight * scaleFactor);
#endif
} }


ImGui::SameLine(); ImGui::SameLine();
@@ -871,12 +957,12 @@ protected:
{ {
if (ImGui::IsItemActivated()) if (ImGui::IsItemActivated())
{ {
carla_set_parameter_touch(handle, 0, param.rindex, true);
carla_set_parameter_touch(handle, fPluginId, param.rindex, true);
// editParameter(0, true); // editParameter(0, true);
} }


ui->values[i] = ui->parameters[i].bvalue ? ui->parameters[i].max : ui->parameters[i].min; ui->values[i] = ui->parameters[i].bvalue ? ui->parameters[i].max : ui->parameters[i].min;
carla_set_parameter_value(handle, 0, param.rindex, ui->values[i]);
carla_set_parameter_value(handle, fPluginId, param.rindex, ui->values[i]);
// setParameterValue(0, ui->values[i]); // setParameterValue(0, ui->values[i]);
} }
} }
@@ -889,18 +975,18 @@ protected:
{ {
if (ImGui::IsItemActivated()) if (ImGui::IsItemActivated())
{ {
carla_set_parameter_touch(handle, 0, param.rindex, true);
carla_set_parameter_touch(handle, fPluginId, param.rindex, true);
// editParameter(0, true); // editParameter(0, true);
} }


carla_set_parameter_value(handle, 0, param.rindex, ui->values[i]);
carla_set_parameter_value(handle, fPluginId, param.rindex, ui->values[i]);
// setParameterValue(0, ui->values[i]); // setParameterValue(0, ui->values[i]);
} }
} }


if (ImGui::IsItemDeactivated()) if (ImGui::IsItemDeactivated())
{ {
carla_set_parameter_touch(handle, 0, param.rindex, false);
carla_set_parameter_touch(handle, fPluginId, param.rindex, false);
// editParameter(0, false); // editParameter(0, false);
} }
} }


+ 9
- 0
plugins/Common/Makefile.mk View File

@@ -39,7 +39,10 @@ CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a
ifneq ($(WASM),true)
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/dgl.a
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a
endif
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a
CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a
@@ -56,7 +59,13 @@ EXTRA_LIBS = $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS)
USE_VST2_BUNDLE = true USE_VST2_BUNDLE = true
include ../../dpf/Makefile.plugins.mk include ../../dpf/Makefile.plugins.mk


ifeq ($(WASM),true)
BUILD_CXX_FLAGS += -pthread BUILD_CXX_FLAGS += -pthread
endif

# used for testing
# LINK_FLAGS += --preload-file=foolme.mp3 --preload-file=furelise.mid -sALLOW_MEMORY_GROWTH

BUILD_CXX_FLAGS += -I../Common BUILD_CXX_FLAGS += -I../Common
BUILD_CXX_FLAGS += -I../../dpf-widgets/generic BUILD_CXX_FLAGS += -I../../dpf-widgets/generic
BUILD_CXX_FLAGS += -I../../dpf-widgets/opengl BUILD_CXX_FLAGS += -I../../dpf-widgets/opengl


Loading…
Cancel
Save