From 8206f25fa9fa0731cb72e286cfc0fee00a0798cb Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Thu, 15 Apr 2021 23:27:59 -0400 Subject: [PATCH] Update last month of manual changes. --- Building.md | 2 +- FAQ.md | 4 ++-- KeyCommands.md | 1 + Manifest.md | 15 ++++++++------- Migrate2.md | 35 ++++++++++++++++++++++++++--------- PluginDevelopmentTutorial.md | 2 +- 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/Building.md b/Building.md index 95e89c5..45d0cbf 100644 --- a/Building.md +++ b/Building.md @@ -31,7 +31,7 @@ brew install git wget cmake autoconf automake libtool jq python On Ubuntu 16.04+: ```bash -sudo apt install git gdb curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev jq +sudo apt install unzip git gdb curl cmake libx11-dev libglu1-mesa-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libasound2-dev libgtk2.0-dev libjack-jackd2-dev jq ``` On Arch Linux: diff --git a/FAQ.md b/FAQ.md index 39906c3..c7fed9a 100644 --- a/FAQ.md +++ b/FAQ.md @@ -3,9 +3,9 @@ ## What does "VCV" stand for? -There is no official meaning of the name "VCV", but users have suggested "Virtual Control Voltage" or "Voltage Controlled Virtualization". +There is no official meaning of the name "VCV", but some users have suggested "Virtual Control Voltage" or "Voltage Controlled Virtualization". These are good guesses, but "VCV" was chosen simply because it is easy to remember and type. -"VCV Rack" is the full name of our flagship software product. +[VCV Rack](https://vcvrack.com/Rack) is the full name of our flagship software product. diff --git a/KeyCommands.md b/KeyCommands.md index a596467..2625ad3 100644 --- a/KeyCommands.md +++ b/KeyCommands.md @@ -15,6 +15,7 @@ Key commands documented in Rack's [menu bar](MenuBar.html) are not documented he - **Ctrl+=**: Zoom in. - **Scroll**: Scroll rack vertically. - **Shift+scroll**: Scroll rack horizontally. +- **Ctrl+scroll**: Zoom in/out. - **Middle mouse button drag**: Pan rack view. - **Arrow keys**: Pan rack view. You can use Ctrl, Shift, or Ctrl+shift to change the speed of scrolling. - **Ctrl+V**: Pastes a new module at the cursor position, from the module context menu "Preset > Copy" or Ctrl+C. diff --git a/Manifest.md b/Manifest.md index 92d7d41..2e9de6f 100644 --- a/Manifest.md +++ b/Manifest.md @@ -179,7 +179,7 @@ The core functionality times two. If multiple channels are a requirement for the Expands the functionality of a "mother" module when placed next to it. Expanders should inherit the tags of its mother module. ### `External` - +Interfaces with hardware or software outside VCV Rack such as a MIDI/audio interface, webcam, DAW, robotic dog, etc. ### `Filter` *Deprecated aliases: `VCF`, `Voltage controlled filter`* @@ -189,7 +189,7 @@ Expands the functionality of a "mother" module when placed next to it. Expanders ### `Function generator` - +Generates complex envelopes or cycles via a large selection of general parameters. ### `Granular` @@ -218,16 +218,17 @@ Implements binary logic with gate signals. *Deprecated aliases: `Low pass gate`, `Lowpass gate`* ### `MIDI` - +Generates, processes, or interprets MIDI messages, e.g. for a MIDI interface. ### `Mixer` - +Mixes/sums audio with optional level adjustment, panning, and/or mix buses. ### `Multiple` - +Copies an input directly to multiple outputs. +While VCV Rack supports stacking cables on output ports, users sometimes prefer organizing their cables with multiples, allowing easy access to each cable. ### `Noise` - +Generates audio-rate or CV-rate random noise. ### `Oscillator` *Deprecated aliases: `VCO`, `Voltage controlled oscillator`* @@ -239,7 +240,7 @@ Implements binary logic with gate signals. ### `Physical modeling` - +Simulates a physical system such as a string, metal bar, vocal chords, chaotic system, celestial bodies, etc. ### `Polyphonic` *Deprecated aliases: `Poly`* diff --git a/Migrate2.md b/Migrate2.md index 179fada..7f7531d 100644 --- a/Migrate2.md +++ b/Migrate2.md @@ -1,6 +1,6 @@ # Migrating v1 Plugins to v2 -The API of VCV Rack v2 has been designed to be nearly backward-compatible with v1 plugins, so updating your plugin to v2 likely only involves the following step and a recompile. +The API of VCV Rack v2 has been designed to be nearly backward-compatible with v1 plugins, so updating your plugin to v2 likely only involves a version update and a recompile. ## Update plugin version to v2 @@ -32,8 +32,33 @@ If your plugin compiles successfully, you are ready to test and release. Or, you may take advantage of new v2 features below. +## Potential bugs + +### Avoid keeping `Font` (and `Image`) references across multiple frames + +*Rack for DAWs* uses a different OpenGL context each time the plugin editor window is closed and reopened. +This means that if you load a `Font` in a widget's constructor with `font = APP->window->loadFont(...)`, the OpenGL font reference will be invalid if the window is reopened later. + +Instead, save only the font path, and fetch the font each frame in `draw()`. Example: +```cpp +std::shared_ptr font = APP->window->loadFont(fontPath); +if (font) { + nvgFontFaceId(args.vg, font->handle); + ... +} +``` +`loadFont()` caches the font by its path, so this operation can be efficiently called in `draw()` every frame. + +*All of the above also applies to `Image` and `loadImage()`.* + ## Optional v2 API features +### SVG load function +`Window::loadSvg()` has been moved to `Svg::load()`. Search and replace: +```bash +perl -i -pe 's/APP->window->loadSvg\b/Svg::load/g' src/* +``` + ### Port labels TOOD @@ -44,11 +69,3 @@ TODO ### TODO -```bash -perl -i -pe 's/(\w+)_PARAM\b/PARAM_$1/g' src/* -perl -i -pe 's/(\w+)_BUTTON\b/BUTTON_$1/g' src/* -perl -i -pe 's/(\w+)_SWITCH\b/SWITCH_$1/g' src/* -perl -i -pe 's/(\w+)_INPUT\b/INPUT_$1/g' src/* -perl -i -pe 's/(\w+)_OUTPUT\b/OUTPUT_$1/g' src/* -perl -i -pe 's/(\w+)_LIGHT\b/LIGHT_$1/g' src/* -``` diff --git a/PluginDevelopmentTutorial.md b/PluginDevelopmentTutorial.md index eafa260..eb2c811 100644 --- a/PluginDevelopmentTutorial.md +++ b/PluginDevelopmentTutorial.md @@ -23,7 +23,7 @@ You may wish to add this line to your `~/.bashrc` or other shell environment, so The `helper.py` script included in the Rack SDK is an easy way to create a plugin template. You can run it with no arguments to show documentation. -Decide on a [slug](Manifest.html#slug) for your plugin. +Choose a [slug](Manifest.html#slug) for your plugin, a unique string containing letters, numbers, `-`, or `_`. We will use `MyPlugin` for this tutorial. Run ```bash