From 6c7f478515f0693fb46652d4117e4302c072cb26 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 8 Dec 2021 15:22:44 +0000 Subject: [PATCH] lv2export: Make sure to keep context valid during RT --- lv2export/Makefile | 8 +++++++- lv2export/lv2plugin.cpp | 10 ++++++++-- src/override/RemoteNanoVG.cpp | 8 ++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lv2export/Makefile b/lv2export/Makefile index 179b17f..e5a8ff1 100644 --- a/lv2export/Makefile +++ b/lv2export/Makefile @@ -34,7 +34,7 @@ BASE_FLAGS += -DARCH_LIN endif BASE_FLAGS += -fno-finite-math-only -BASE_FLAGS += -I../dpf/dgl +# BASE_FLAGS += -I../dpf/dgl BASE_FLAGS += -I../dpf/dgl/src/nanovg BASE_FLAGS += -I../dpf/distrho BASE_FLAGS += -I../include @@ -189,3 +189,9 @@ $(BUILD_DIR)/plugin/ChowDSP/%.o: ../plugins/ChowDSP/src/% @echo "Compiling $< (ChowDSP Chorus)" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -UPRIVATE -c -o $@ \ -DpluginInstance=pluginInstance__ChowDSP + +# -------------------------------------------------------------- + +-include $(BUILD_OBJS:%.o=%.d) + +# -------------------------------------------------------------- diff --git a/lv2export/lv2plugin.cpp b/lv2export/lv2plugin.cpp index e2872cd..28bdf20 100644 --- a/lv2export/lv2plugin.cpp +++ b/lv2export/lv2plugin.cpp @@ -87,6 +87,7 @@ std::vector plugins; } // namespace rack struct PluginLv2 { + Context* context; Plugin* plugin; engine::Module* module; float sampleRate; @@ -97,7 +98,7 @@ struct PluginLv2 { PluginLv2(double sr) { // FIXME shared instance for these 2 - Context* const context = new Context; + context = new Context; context->engine = new Engine; context->engine->internal->sampleRate = sr; contextSet(context); @@ -126,12 +127,14 @@ struct PluginLv2 { PluginLv2() { + contextSet(context); + delete[] ports; delete module; // FIXME shared instance for this delete plugin; - delete contextGet(); + delete context; } void lv2_connect_port(const uint32_t port, void* const dataLocation) @@ -141,6 +144,7 @@ struct PluginLv2 { void lv2_activate() { + contextSet(context); module->onReset(); } @@ -149,6 +153,8 @@ struct PluginLv2 { if (sampleCount == 0) return; + contextSet(context); + Module::ProcessArgs args = { sampleRate, 1.0f / sampleRate, diff --git a/src/override/RemoteNanoVG.cpp b/src/override/RemoteNanoVG.cpp index 05eb434..e4c9302 100644 --- a/src/override/RemoteNanoVG.cpp +++ b/src/override/RemoteNanoVG.cpp @@ -19,7 +19,7 @@ #include "OpenGL.hpp" #endif -#include "src/nanovg/nanovg.h" +#include "nanovg.h" #ifdef HEADLESS struct NVGLUframebuffer; @@ -29,8 +29,8 @@ void nvgluDeleteFramebuffer(NVGLUframebuffer* fb) {} #else # define NANOVG_GLES2_IMPLEMENTATION # define NANOVG_FBO_VALID 1 -# include "src/nanovg/nanovg_gl.h" -# include "src/nanovg/nanovg_gl_utils.h" +# include "nanovg_gl.h" +# include "nanovg_gl_utils.h" #endif #if defined(__GNUC__) && (__GNUC__ >= 6) @@ -39,7 +39,7 @@ void nvgluDeleteFramebuffer(NVGLUframebuffer* fb) {} # pragma GCC diagnostic ignored "-Wshift-negative-value" #endif -#include "src/nanovg/nanovg.c" +#include "nanovg.c" #if defined(__GNUC__) && (__GNUC__ >= 6) # pragma GCC diagnostic pop