A ready-made hot-reloadable plugin shell (DAW integration). More...
#include <pulp/format/processor.hpp>#include <pulp/format/reload/build_fingerprint.hpp>#include <pulp/format/reload/processor_hotswap_slot.hpp>#include <pulp/format/reload/reload_abi.hpp>#include <pulp/format/reload/reload_controller.hpp>#include <pulp/format/reload/reload_trust_policy.hpp>#include <pulp/format/reload/reload_library.hpp>#include <pulp/format/reload/reload_transaction.hpp>#include <pulp/runtime/log.hpp>#include <pulp/state/store.hpp>#include <pulp/view/view.hpp>#include <algorithm>#include <atomic>#include <functional>#include <chrono>#include <cstdint>#include <cstdlib>#include <filesystem>#include <memory>#include <mutex>#include <optional>#include <string>#include <system_error>#include <thread>#include <utility>#include <vector>#include <unistd.h>Go to the source code of this file.
Classes | |
| class | pulp::format::reload::ReloadableShell |
Namespaces | |
| namespace | pulp |
| namespace | pulp::format |
| What the product grants a device: the quota table indexed by capability tier and live thermal state. | |
| namespace | pulp::format::reload |
Macros | |
| #define | PULP_RELOAD_DEV_WATCHER 1 |
A ready-made hot-reloadable plugin shell (DAW integration).
This is the piece that makes DSP hot-reload work inside a real host (REAPER, Logic, a DAW): a Processor the format adapters (VST3 / AU / CLAP / Standalone) wrap exactly like any other, except its DSP lives in a separately-compiled "logic" shared library that can be recompiled and swapped while the host keeps the plugin instance — and the audio stream — alive.
Split of responsibilities:
Threading:
The parameter contract is FIXED at load time: the shell mirrors the initial logic library's parameters into the host's store, and a reload whose contract differs is rejected (the sound keeps playing on the previous DSP). Changing the automatable parameter set still requires a full plugin reload — only the DSP behind a stable contract hot-swaps. This is by design (the host has already cached the parameter list).
Logic path resolution (in order): the explicit constructor argument, else the PULP_RELOAD_LOGIC_PATH environment variable, else the empty path (the shell runs as passthrough with no parameters and logs a clear diagnostic — e.g. the host scanned the plugin before the developer built the logic library).
| #define PULP_RELOAD_DEV_WATCHER 1 |