diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e75a862..ce85c4f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -814,7 +814,11 @@ jobs: run: | VERSION=$(cat Makefile | awk 'sub("VERSION = ","")') cd bin + sed -i "s/CardinalMini\./CardinalMini-v${VERSION}\./g" *.html *.js sed -i "s/CardinalNative\./CardinalNative-v${VERSION}\./g" *.html *.js + mv CardinalMini.data CardinalMini-v${VERSION}.data + mv CardinalMini.js CardinalMini-v${VERSION}.js + mv CardinalMini.wasm CardinalMini-v${VERSION}.wasm mv CardinalNative.data CardinalNative-v${VERSION}.data mv CardinalNative.js CardinalNative-v${VERSION}.js mv CardinalNative.wasm CardinalNative-v${VERSION}.wasm @@ -844,82 +848,6 @@ jobs: files: | *.zip - wasm-mini: - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Set up cache - id: cache - uses: actions/cache@v3 - with: - path: | - ~/emsdk - src/Rack/dep/bin - src/Rack/dep/include - src/Rack/dep/lib - src/Rack/dep/share - src/Rack/dep/jansson-2.12 - src/Rack/dep/libarchive-3.4.3 - src/Rack/dep/libsamplerate-0.1.9 - src/Rack/dep/speexdsp-SpeexDSP-1.2rc3 - src/Rack/dep/zstd-1.4.5 - key: wasm-mini-v${{ env.CACHE_VERSION }} - - name: Set up dependencies - run: | - sudo apt-get update -qq - sudo apt-get install -yqq brotli - sudo apt-get clean - [ -e ~/emsdk ] || git clone https://github.com/emscripten-core/emsdk.git ~/emsdk - cd ~/emsdk && ./emsdk install ${{ env.EMSCRIPTEN_VERSION }} && ./emsdk activate ${{ env.EMSCRIPTEN_VERSION }} - - name: Build wasm-mini cross-compiled - env: - AR: emar - CC: emcc - CXX: em++ - NM: emnm - RANLIB: emranlib - STRIP: emstrip - WITH_LTO: false - run: | - source ~/emsdk/emsdk_env.sh - make features - make CIBUILD=true NOPLUGINS=true NOOPT=true NOSIMD=true STATIC_BUILD=true USE_GLES2=true -j $(nproc) - - name: Make wasm versioned and compress - run: | - VERSION=$(cat Makefile | awk 'sub("VERSION = ","")') - cd bin - rm -r *.lv2 - sed -i "s/CardinalNative\./CardinalNative-v${VERSION}\./g" *.html *.js - mv CardinalNative.data CardinalNative-v${VERSION}.data - mv CardinalNative.js CardinalNative-v${VERSION}.js - mv CardinalNative.wasm CardinalNative-v${VERSION}.wasm - brotli -k -q 11 *.data *.html *.js *.wasm - - name: Set sha8 (non-release) - if: startsWith(github.ref, 'refs/tags/') != true - run: echo "SHA8=$(echo ${{ github.sha }} | cut -c1-8)" >> $GITHUB_ENV - - name: Set sha8 (release) - if: startsWith(github.ref, 'refs/tags/') - run: echo "SHA8=$(echo ${{ github.ref_name }})" >> $GITHUB_ENV - - name: Pack binaries - run: | - cd bin; zip -r -9 ../${{ github.event.repository.name }}-wasm-mini-${{ github.event.pull_request.number || env.SHA8 }}.zip $(ls *.br *.html *.data *.js *.wasm) - - uses: actions/upload-artifact@v3 - with: - name: ${{ github.event.repository.name }}-wasm-mini-${{ github.event.pull_request.number || env.SHA8 }} - path: | - *.zip - - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/') - with: - tag_name: ${{ github.ref_name }} - name: ${{ github.ref_name }} - draft: false - prerelease: false - files: | - *.zip - win32: runs-on: ubuntu-22.04 steps: diff --git a/src/CardinalMini/CardinalCommon.cpp b/src/CardinalMini/CardinalCommon.cpp deleted file mode 100644 index 24dffcd..0000000 --- a/src/CardinalMini/CardinalCommon.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * DISTRHO Cardinal Plugin - * Copyright (C) 2021-2022 Filipe Coelho - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 3 of - * the License, or any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * For a full copy of the GNU General Public License see the LICENSE file. - */ - -#define CARDINAL_COMMON_DSP_ONLY -#include "../CardinalCommon.cpp" diff --git a/src/CardinalMini/CardinalCommon.cpp b/src/CardinalMini/CardinalCommon.cpp new file mode 120000 index 0000000..76b4b5f --- /dev/null +++ b/src/CardinalMini/CardinalCommon.cpp @@ -0,0 +1 @@ +../CardinalCommon.cpp \ No newline at end of file diff --git a/src/CardinalMini/DistrhoPluginInfo.h b/src/CardinalMini/DistrhoPluginInfo.h index f72f872..c98736a 100644 --- a/src/CardinalMini/DistrhoPluginInfo.h +++ b/src/CardinalMini/DistrhoPluginInfo.h @@ -35,7 +35,7 @@ #define DISTRHO_PLUGIN_LABEL "CardinalMini" #define DISTRHO_PLUGIN_HAS_UI 1 -#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 +#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 1 #define DISTRHO_UI_FILE_BROWSER 1 #define DISTRHO_UI_USE_NANOVG 1 #define DISTRHO_UI_USER_RESIZABLE 1 @@ -52,8 +52,4 @@ #define DISTRHO_PLUGIN_LV2_CATEGORY "mod:ControlVoltagePlugin, lv2:UtilityPlugin" #define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Generator" -// #ifdef __MOD_DEVICES__ -# define DISTRHO_PLUGIN_USES_MODGUI 1 -// #endif - #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED diff --git a/src/CardinalMini/Makefile b/src/CardinalMini/Makefile index a616d22..24e5043 100644 --- a/src/CardinalMini/Makefile +++ b/src/CardinalMini/Makefile @@ -5,5 +5,4 @@ # NAME = CardinalMini -MODGUI_CLASS_NAME = distrho_cardinal_mini include ../Makefile.cardinal.mk diff --git a/src/CardinalMini/CardinalCommon-UI.cpp b/src/CardinalMiniSep/CardinalCommon-UI.cpp similarity index 100% rename from src/CardinalMini/CardinalCommon-UI.cpp rename to src/CardinalMiniSep/CardinalCommon-UI.cpp diff --git a/src/CardinalMiniSep/CardinalCommon.cpp b/src/CardinalMiniSep/CardinalCommon.cpp new file mode 100644 index 0000000..24dffcd --- /dev/null +++ b/src/CardinalMiniSep/CardinalCommon.cpp @@ -0,0 +1,19 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 Filipe Coelho + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#define CARDINAL_COMMON_DSP_ONLY +#include "../CardinalCommon.cpp" diff --git a/src/CardinalMiniSep/CardinalPlugin.cpp b/src/CardinalMiniSep/CardinalPlugin.cpp new file mode 120000 index 0000000..c0c7e71 --- /dev/null +++ b/src/CardinalMiniSep/CardinalPlugin.cpp @@ -0,0 +1 @@ +../CardinalPlugin.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/CardinalRemote.cpp b/src/CardinalMiniSep/CardinalRemote.cpp new file mode 120000 index 0000000..2383823 --- /dev/null +++ b/src/CardinalMiniSep/CardinalRemote.cpp @@ -0,0 +1 @@ +../CardinalRemote.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/CardinalUI.cpp b/src/CardinalMiniSep/CardinalUI.cpp new file mode 120000 index 0000000..5558256 --- /dev/null +++ b/src/CardinalMiniSep/CardinalUI.cpp @@ -0,0 +1 @@ +../CardinalUI.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/DistrhoPluginInfo.h b/src/CardinalMiniSep/DistrhoPluginInfo.h new file mode 100644 index 0000000..5023a18 --- /dev/null +++ b/src/CardinalMiniSep/DistrhoPluginInfo.h @@ -0,0 +1,56 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2022 Filipe Coelho + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of + * the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For a full copy of the GNU General Public License see the LICENSE file. + */ + +#ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED +#define DISTRHO_PLUGIN_INFO_H_INCLUDED + +#define CARDINAL_VARIANT_MAIN 0 +#define CARDINAL_VARIANT_MINI 1 +#define CARDINAL_VARIANT_FX 0 +#define CARDINAL_VARIANT_NATIVE 0 +#define CARDINAL_VARIANT_SYNTH 0 + +#define CARDINAL_NUM_AUDIO_INPUTS 2 +#define CARDINAL_NUM_AUDIO_OUTPUTS 2 + +#define DISTRHO_PLUGIN_BRAND "DISTRHO" +#define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/cardinal#mini" + +#define DISTRHO_PLUGIN_NAME "Cardinal Mini" +#define DISTRHO_PLUGIN_LABEL "CardinalMini" + +#define DISTRHO_PLUGIN_HAS_UI 1 +#define DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 0 +#define DISTRHO_UI_FILE_BROWSER 1 +#define DISTRHO_UI_USE_NANOVG 1 +#define DISTRHO_UI_USER_RESIZABLE 1 +#define DISTRHO_UI_DEFAULT_WIDTH 1000 +#define DISTRHO_UI_DEFAULT_HEIGHT 600 +#define DISTRHO_PLUGIN_IS_SYNTH 0 +#define DISTRHO_PLUGIN_NUM_INPUTS CARDINAL_NUM_AUDIO_INPUTS + 5 +#define DISTRHO_PLUGIN_NUM_OUTPUTS CARDINAL_NUM_AUDIO_OUTPUTS + 5 +#define DISTRHO_PLUGIN_WANT_MIDI_INPUT 1 +#define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1 +#define DISTRHO_PLUGIN_WANT_FULL_STATE 1 +#define DISTRHO_PLUGIN_WANT_STATE 1 +#define DISTRHO_PLUGIN_WANT_TIMEPOS 1 +#define DISTRHO_PLUGIN_LV2_CATEGORY "mod:ControlVoltagePlugin, lv2:UtilityPlugin" + +#define DISTRHO_PLUGIN_USES_MODGUI 1 +#define DISTRHO_PLUGIN_USES_CUSTOM_MODGUI 1 + +#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED diff --git a/src/CardinalMiniSep/Makefile b/src/CardinalMiniSep/Makefile new file mode 100644 index 0000000..1a97ebd --- /dev/null +++ b/src/CardinalMiniSep/Makefile @@ -0,0 +1,11 @@ +#!/usr/bin/make -f +# Makefile for DISTRHO Plugins # +# ---------------------------- # +# Created by falkTX +# + +NAME = CardinalMini +DPF_BUILD_DIR = ../../build/$(NAME)-sep +DSP_UI_SPLIT = true +MODGUI_CLASS_NAME = distrho_cardinal_mini +include ../Makefile.cardinal.mk diff --git a/src/CardinalMiniSep/MenuBar.cpp b/src/CardinalMiniSep/MenuBar.cpp new file mode 120000 index 0000000..8d1a35a --- /dev/null +++ b/src/CardinalMiniSep/MenuBar.cpp @@ -0,0 +1 @@ +../override/MenuBar.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/RemoteNanoVG.cpp b/src/CardinalMiniSep/RemoteNanoVG.cpp new file mode 120000 index 0000000..a6394af --- /dev/null +++ b/src/CardinalMiniSep/RemoteNanoVG.cpp @@ -0,0 +1 @@ +../custom/RemoteNanoVG.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/RemoteWindow.cpp b/src/CardinalMiniSep/RemoteWindow.cpp new file mode 120000 index 0000000..7e00fed --- /dev/null +++ b/src/CardinalMiniSep/RemoteWindow.cpp @@ -0,0 +1 @@ +../custom/RemoteWindow.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/Window.cpp b/src/CardinalMiniSep/Window.cpp new file mode 120000 index 0000000..759f272 --- /dev/null +++ b/src/CardinalMiniSep/Window.cpp @@ -0,0 +1 @@ +../override/Window.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/common.cpp b/src/CardinalMiniSep/common.cpp new file mode 120000 index 0000000..915948e --- /dev/null +++ b/src/CardinalMiniSep/common.cpp @@ -0,0 +1 @@ +../override/common.cpp \ No newline at end of file diff --git a/src/CardinalMiniSep/glfw.cpp b/src/CardinalMiniSep/glfw.cpp new file mode 120000 index 0000000..8c6a6e4 --- /dev/null +++ b/src/CardinalMiniSep/glfw.cpp @@ -0,0 +1 @@ +../custom/glfw.cpp \ No newline at end of file diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index f0bfb9b..3a32d44 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -61,7 +61,7 @@ extern const std::string CARDINAL_VERSION; namespace rack { -#if CARDINAL_VARIANT_MINI || defined(HEADLESS) +#if (CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS) || defined(HEADLESS) namespace app { rack::widget::Widget* createMenuBar() { return new rack::widget::Widget; } } @@ -179,7 +179,7 @@ class CardinalPlugin : public CardinalBasePlugin // real values, not VCV interpreted ones float fWindowParameters[kWindowParameterCount]; #endif - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS float fMiniReportValues[kCardinalParameterCountAtMini - kCardinalParameterStartMini]; #endif @@ -213,7 +213,7 @@ public: fWindowParameters[kWindowParameterInvertZoom] = 0.0f; fWindowParameters[kWindowParameterSqueezeModulePositions] = 1.0f; #endif - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS std::memset(fMiniReportValues, 0, sizeof(fMiniReportValues)); fMiniReportValues[kCardinalParameterMiniTimeBar - kCardinalParameterStartMini] = 1; fMiniReportValues[kCardinalParameterMiniTimeBeat - kCardinalParameterStartMini] = 1; @@ -460,7 +460,7 @@ protected: parameter.name = "Show tooltips"; parameter.symbol = "tooltips"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 1.0f; @@ -472,7 +472,7 @@ protected: parameter.symbol = "cableOpacity"; parameter.unit = "%"; parameter.hints = kParameterIsAutomatable; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 50.0f; @@ -484,7 +484,7 @@ protected: parameter.symbol = "cableTension"; parameter.unit = "%"; parameter.hints = kParameterIsAutomatable; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 75.0f; @@ -496,7 +496,7 @@ protected: parameter.symbol = "rackBrightness"; parameter.unit = "%"; parameter.hints = kParameterIsAutomatable; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 100.0f; @@ -508,7 +508,7 @@ protected: parameter.symbol = "haloBrightness"; parameter.unit = "%"; parameter.hints = kParameterIsAutomatable; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 25.0f; @@ -519,7 +519,7 @@ protected: parameter.name = "Knob mode"; parameter.symbol = "knobMode"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 0.0f; @@ -539,7 +539,7 @@ protected: parameter.name = "Scroll wheel knob control"; parameter.symbol = "knobScroll"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 0.0f; @@ -550,7 +550,7 @@ protected: parameter.name = "Scroll wheel knob sensitivity"; parameter.symbol = "knobScrollSensitivity"; parameter.hints = kParameterIsAutomatable|kParameterIsLogarithmic; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 1.0f; @@ -561,7 +561,7 @@ protected: parameter.name = "Lock module positions"; parameter.symbol = "lockModules"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 0.0f; @@ -572,7 +572,7 @@ protected: parameter.name = "Update rate limit"; parameter.symbol = "rateLimit"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 0.0f; @@ -592,7 +592,7 @@ protected: parameter.name = "Browser sort"; parameter.symbol = "browserSort"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 3.0f; @@ -618,7 +618,7 @@ protected: parameter.name = "Browser zoom"; parameter.symbol = "browserZoom"; parameter.hints = kParameterIsAutomatable; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.unit = "%"; @@ -647,7 +647,7 @@ protected: parameter.name = "Invert zoom"; parameter.symbol = "invertZoom"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 0.0f; @@ -658,7 +658,7 @@ protected: parameter.name = "Auto-squeeze module positions"; parameter.symbol = "squeezeModules"; parameter.hints = kParameterIsAutomatable|kParameterIsInteger|kParameterIsBoolean; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS parameter.hints |= kParameterIsHidden; #endif parameter.ranges.def = 1.0f; @@ -669,7 +669,7 @@ protected: } #endif - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS switch (index) { case kCardinalParameterMiniAudioIn1: @@ -817,7 +817,7 @@ protected: switch (index) { case kCardinalStatePatch: - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS state.hints = kStateIsHostReadable; #else state.hints = kStateIsOnlyForDSP | kStateIsBase64Blob; @@ -833,7 +833,7 @@ protected: if (std::fread(fileContent, fileSize, 1, f) == 1) { fileContent[fileSize] = '\0'; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS state.defaultValue = fileContent; #else state.defaultValue = String::asBase64(fileContent, fileSize); @@ -859,7 +859,7 @@ protected: break; #if CARDINAL_VARIANT_MINI || !defined(HEADLESS) case kCardinalStateModuleInfos: - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS state.hints = kStateIsHostReadable; #else state.hints = kStateIsOnlyForDSP; @@ -875,7 +875,7 @@ protected: state.label = "Window size"; break; #endif - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS case kCardinalStateParamChange: state.hints = kStateIsHostReadable | kStateIsOnlyForDSP; state.key = "param"; @@ -903,7 +903,7 @@ protected: return fWindowParameters[index - kCardinalParameterStartWindow]; #endif - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS if (index < kCardinalParameterCountAtMini) return fMiniReportValues[index - kCardinalParameterStartMini]; #endif @@ -1006,7 +1006,7 @@ protected: context->patch->cleanAutosave(); // context->history->setSaved(); - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS FILE* const f = std::fopen(rack::system::join(context->patch->autosavePath, "patch.json").c_str(), "r"); DISTRHO_SAFE_ASSERT_RETURN(f != nullptr, String()); @@ -1037,7 +1037,7 @@ protected: void setState(const char* const key, const char* const value) override { - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS if (std::strcmp(key, "param") == 0) { long long moduleId = 0; @@ -1115,7 +1115,7 @@ protected: if (fAutosavePath.empty()) return; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS rack::system::removeRecursively(fAutosavePath); rack::system::createDirectories(fAutosavePath); @@ -1228,7 +1228,7 @@ protected: context->ticksPerClock = timePos.bbt.ticksPerBeat / timePos.bbt.beatType; context->ticksPerFrame = 1.0 / samplesPerTick; context->tickClock = std::fmod(timePos.bbt.tick, context->ticksPerClock); - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS fMiniReportValues[kCardinalParameterMiniTimeBar - kCardinalParameterStartMini] = timePos.bbt.bar; fMiniReportValues[kCardinalParameterMiniTimeBeat - kCardinalParameterStartMini] = timePos.bbt.beat; fMiniReportValues[kCardinalParameterMiniTimeBeatsPerBar - kCardinalParameterStartMini] = timePos.bbt.beatsPerBar; @@ -1243,7 +1243,7 @@ protected: context->reset = reset; fNextExpectedFrame = timePos.playing ? timePos.frame + frames : 0; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS const int flags = (timePos.playing ? 0x1 : 0x0) | (timePos.bbt.valid ? 0x2 : 0x0) | (reset ? 0x4 : 0x0); @@ -1286,10 +1286,10 @@ protected: std::memset(outputs[i], 0, sizeof(float)*frames); } - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS for (int i=0; idataIns[i][0]; - #endif + #endif if (bypassed) { diff --git a/src/CardinalRemote.cpp b/src/CardinalRemote.cpp index 9f5e48b..d27f16b 100644 --- a/src/CardinalRemote.cpp +++ b/src/CardinalRemote.cpp @@ -28,11 +28,11 @@ #include "extra/Base64.hpp" #include "extra/ScopedSafeLocale.hpp" -#if defined(STATIC_BUILD) || CARDINAL_VARIANT_MINI +#if defined(STATIC_BUILD) || ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS # undef HAVE_LIBLO #endif -#if (CARDINAL_VARIANT_MINI || defined(HAVE_LIBLO)) && !defined(HEADLESS) +#if (defined(HAVE_LIBLO) || ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS) && !defined(HEADLESS) # define CARDINAL_REMOTE_ENABLED #endif @@ -88,7 +88,7 @@ bool connectToRemote() RemoteDetails* remoteDetails = ui->remoteDetails; - #if CARDINAL_VARIANT_MINI + #if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS if (remoteDetails == nullptr) { ui->remoteDetails = remoteDetails = new RemoteDetails; @@ -148,7 +148,7 @@ void idleRemote(RemoteDetails* const remote) void sendParamChangeToRemote(RemoteDetails* const remote, int64_t moduleId, int paramId, float value) { #ifdef CARDINAL_REMOTE_ENABLED -#if CARDINAL_VARIANT_MINI +#if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS char paramBuf[512] = {}; { const ScopedSafeLocale cssl; @@ -179,7 +179,7 @@ void sendFullPatchToRemote(RemoteDetails* const remote) std::vector data; using namespace rack::system; - #if CARDINAL_VARIANT_MINI + #if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS FILE* const f = std::fopen(join(context->patch->autosavePath, "patch.json").c_str(), "r"); DISTRHO_SAFE_ASSERT_RETURN(f != nullptr,); @@ -221,7 +221,7 @@ void sendFullPatchToRemote(RemoteDetails* const remote) void sendScreenshotToRemote(RemoteDetails*, const char* const screenshot) { -#if defined(HAVE_LIBLO) && ! CARDINAL_VARIANT_MINI +#if defined(HAVE_LIBLO) && DISTRHO_PLUGIN_WANT_DIRECT_ACCESS const lo_address addr = lo_address_new_with_proto(LO_UDP, REMOTE_HOST, CARDINAL_DEFAULT_REMOTE_HOST_PORT); DISTRHO_SAFE_ASSERT_RETURN(addr != nullptr,); diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 87957ee..9e584ec 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -346,7 +346,7 @@ public: { rack::contextSet(context); - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS // create unique temporary path for this instance try { char uidBuf[24]; @@ -490,7 +490,7 @@ public: context->tlw = nullptr; context->ui = nullptr; - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS { const ScopedContext sc(this); context->patch->clear(); @@ -620,7 +620,7 @@ public: filebrowserhandle = nullptr; } - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS { const ScopedContext sc(this); for (uint32_t i=0; iparameters[index] = value; #endif return; @@ -735,7 +735,7 @@ protected: // bypass if (index == kCardinalParameterBypass) { - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS context->bypassed = value > 0.5f; #endif return; @@ -829,7 +829,7 @@ protected: return; } - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS if (index < kCardinalParameterCountAtMiniBuffers) { float* const buffer = *const_cast(&context->dataIns[index - kCardinalParameterStartMiniBuffers]); @@ -886,7 +886,7 @@ protected: void stateChanged(const char* const key, const char* const value) override { - #if CARDINAL_VARIANT_MINI + #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS if (std::strcmp(key, "patch") == 0) { if (fAutosavePath.empty()) diff --git a/src/Makefile b/src/Makefile index d888d60..ff4ba7b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -244,12 +244,14 @@ all: $(TARGETS) ifeq ($(MOD_BUILD),true) $(MAKE) -C Cardinal lv2 $(MAKE) -C CardinalFX lv2 - $(MAKE) -C CardinalMini lv2_sep + $(MAKE) -C CardinalMiniSep lv2_sep else ifeq ($(WASM),true) $(MAKE) -C CardinalNative + $(MAKE) -C CardinalMini else $(MAKE) -C Cardinal $(MAKE) -C CardinalMini + $(MAKE) -C CardinalMiniSep $(MAKE) -C CardinalNative $(MAKE) -C CardinalFX $(CARDINAL_FX_ARGS) $(MAKE) -C CardinalSynth $(CARDINAL_SYNTH_ARGS) @@ -265,7 +267,7 @@ lv2: $(TARGETS) $(MAKE) lv2 -C Cardinal $(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS) $(MAKE) lv2 -C CardinalSynth $(CARDINAL_SYNTH_ARGS) - $(MAKE) lv2_sep -C CardinalMini + $(MAKE) lv2_sep -C CardinalMiniSep vst2: $(TARGETS) $(MAKE) vst2 -C CardinalFX $(CARDINAL_FX_ARGS) diff --git a/src/Makefile.cardinal.mk b/src/Makefile.cardinal.mk index ed782d9..c025dfe 100644 --- a/src/Makefile.cardinal.mk +++ b/src/Makefile.cardinal.mk @@ -67,7 +67,7 @@ WASM_EXCEPTIONS = true ifeq ($(CARDINAL_VARIANT),main) # main variant should not use rtaudio/sdl2 fallback (it has CV ports) SKIP_NATIVE_AUDIO_FALLBACK = true -else +else ifneq ($(CARDINAL_VARIANT),mini) # other variants should only use rtaudio/sdl2 fallbacks FORCE_NATIVE_AUDIO_FALLBACK = true endif @@ -99,7 +99,7 @@ FILES_DSP += CardinalCommon.cpp FILES_DSP += CardinalRemote.cpp FILES_DSP += common.cpp -ifeq ($(CARDINAL_VARIANT),mini) +ifeq ($(DSP_UI_SPLIT),true) FILES_DSP += RemoteNanoVG.cpp FILES_DSP += RemoteWindow.cpp else ifeq ($(HEADLESS),true) @@ -119,18 +119,20 @@ endif # -------------------------------------------------------------- # Rack and plugin libs -ifeq ($(HEADLESS),true) +ifeq ($(DSP_UI_SPLIT),true) +TARGET_SUFFIX = -headless +else ifeq ($(HEADLESS),true) TARGET_SUFFIX = -headless endif ifeq ($(CARDINAL_VARIANT),mini) -RACK_EXTRA_LIBS = ../../plugins/plugins-mini-headless.a +RACK_EXTRA_LIBS = ../../plugins/plugins-mini$(TARGET_SUFFIX).a else RACK_EXTRA_LIBS = ../../plugins/plugins$(TARGET_SUFFIX).a endif ifeq ($(CARDINAL_VARIANT),mini) -RACK_EXTRA_LIBS += ../rack-headless.a +RACK_EXTRA_LIBS += ../rack$(TARGET_SUFFIX).a else RACK_EXTRA_LIBS += ../rack$(TARGET_SUFFIX).a endif @@ -255,7 +257,7 @@ endif # -------------------------------------------------------------- # mini variant UI -ifeq ($(CARDINAL_VARIANT),mini) +ifeq ($(DSP_UI_SPLIT),true) ifneq ($(HEADLESS),true) FILES_UI = CardinalUI.cpp FILES_UI += CardinalCommon-UI.cpp @@ -324,13 +326,10 @@ endif ifeq ($(MOD_BUILD),true) BASE_FLAGS += -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff BASE_FLAGS += -DDISTRHO_PLUGIN_USES_MODGUI=1 -ifeq ($(CARDINAL_VARIANT),mini) -BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=0 -else -BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=1 -endif BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp LINK_FLAGS += -fopenmp +else ifeq ($(CARDINAL_VARIANT),mini) +BUILD_CXX_FLAGS += -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff endif ifneq ($(WASM),true) @@ -362,10 +361,6 @@ BUILD_CXX_FLAGS += -std=gnu++17 endif endif -ifeq ($(CARDINAL_VARIANT),mini) -BUILD_CXX_FLAGS += -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff -endif - # Rack code is not tested for this flag, unset it BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS @@ -504,8 +499,10 @@ BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"' ifeq ($(CARDINAL_VARIANT),main) TARGETS = jack lv2 vst3 clap -else ifeq ($(CARDINAL_VARIANT),mini) +else ifeq ($(DSP_UI_SPLIT),true) TARGETS = lv2_sep +else ifeq ($(CARDINAL_VARIANT),mini) +TARGETS = jack else ifeq ($(CARDINAL_VARIANT),native) TARGETS = jack else diff --git a/src/PluginContext.hpp b/src/PluginContext.hpp index 6a4db83..86d3f53 100644 --- a/src/PluginContext.hpp +++ b/src/PluginContext.hpp @@ -205,7 +205,9 @@ struct CardinalPluginContext : rack::Context { // ----------------------------------------------------------------------------------------------------------- +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS CardinalPluginContext* getRackContextFromPlugin(void* ptr); +#endif class CardinalBasePlugin : public Plugin { public: diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index e73e0d0..7304d62 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -135,7 +135,7 @@ struct FileButton : MenuButton { patchUtils::loadTemplateDialog(); })); -#if ! CARDINAL_VARIANT_MINI +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS #ifndef DISTRHO_OS_WASM menu->addChild(createMenuItem("Open / Import...", RACK_MOD_CTRL_NAME "+O", []() { patchUtils::loadDialog(); @@ -172,7 +172,7 @@ struct FileButton : MenuButton { patchUtils::revertDialog(); }, APP->patch->path.empty())); -#if defined(HAVE_LIBLO) || CARDINAL_VARIANT_MINI +#if defined(HAVE_LIBLO) || ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS #ifdef __MOD_DEVICES__ #define REMOTE_NAME "MOD" #else @@ -201,7 +201,7 @@ struct FileButton : MenuButton { } #endif -#if ! CARDINAL_VARIANT_MINI +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS #ifndef DISTRHO_OS_WASM menu->addChild(new ui::MenuSeparator); @@ -768,7 +768,7 @@ struct MeterLabel : ui::Label { // uiLastTime = time; // } -#if CARDINAL_VARIANT_MINI +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS text = string::f("%.1f fps", 1.0 / frameDurationAvg); #else double meterAverage = APP->engine->getMeterAverage(); @@ -807,7 +807,7 @@ struct MenuBar : widget::OpaqueWidget { viewButton->text = "View"; layout->addChild(viewButton); -#if ! CARDINAL_VARIANT_MINI +#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS EngineButton* engineButton = new EngineButton; engineButton->text = "Engine"; layout->addChild(engineButton); diff --git a/src/override/Scene.cpp b/src/override/Scene.cpp index a6802a9..58dd32e 100644 --- a/src/override/Scene.cpp +++ b/src/override/Scene.cpp @@ -330,8 +330,10 @@ void Scene::onHoverKey(const HoverKeyEvent& e) { } if (e.key == GLFW_KEY_F7 && (e.mods & RACK_MOD_MASK) == 0) { if (remoteUtils::RemoteDetails* const remoteDetails = remoteUtils::getRemote()) + { remoteUtils::sendFullPatchToRemote(remoteDetails); - window::generateScreenshot(); + window::generateScreenshot(); + } e.consume(this); } if (e.key == GLFW_KEY_F9 && (e.mods & RACK_MOD_MASK) == 0) {