Browse Source

lv2export: Make sure to keep context valid during RT

tags/22.02
falkTX 4 years ago
parent
commit
6c7f478515
3 changed files with 19 additions and 7 deletions
  1. +7
    -1
      lv2export/Makefile
  2. +8
    -2
      lv2export/lv2plugin.cpp
  3. +4
    -4
      src/override/RemoteNanoVG.cpp

+ 7
- 1
lv2export/Makefile View File

@@ -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)

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

+ 8
- 2
lv2export/lv2plugin.cpp View File

@@ -87,6 +87,7 @@ std::vector<Plugin*> 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,


+ 4
- 4
src/override/RemoteNanoVG.cpp View File

@@ -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


Loading…
Cancel
Save