@@ -31,7 +31,7 @@ brew install git wget cmake autoconf automake libtool jq python | |||||
On Ubuntu 16.04+: | On Ubuntu 16.04+: | ||||
```bash | ```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: | On Arch Linux: | ||||
@@ -3,9 +3,9 @@ | |||||
<a id="acronym"></a> | <a id="acronym"></a> | ||||
## What does "VCV" stand for? | ## 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. | 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. | |||||
<a id="userfolder"></a> | <a id="userfolder"></a> | ||||
@@ -15,6 +15,7 @@ Key commands documented in Rack's [menu bar](MenuBar.html) are not documented he | |||||
- **Ctrl+=**: Zoom in. | - **Ctrl+=**: Zoom in. | ||||
- **Scroll**: Scroll rack vertically. | - **Scroll**: Scroll rack vertically. | ||||
- **Shift+scroll**: Scroll rack horizontally. | - **Shift+scroll**: Scroll rack horizontally. | ||||
- **Ctrl+scroll**: Zoom in/out. | |||||
- **Middle mouse button drag**: Pan rack view. | - **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. | - **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. | - **Ctrl+V**: Pastes a new module at the cursor position, from the module context menu "Preset > Copy" or Ctrl+C. | ||||
@@ -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. | Expands the functionality of a "mother" module when placed next to it. Expanders should inherit the tags of its mother module. | ||||
### `External` | ### `External` | ||||
Interfaces with hardware or software outside VCV Rack such as a MIDI/audio interface, webcam, DAW, robotic dog, etc. | |||||
### `Filter` | ### `Filter` | ||||
*Deprecated aliases: `VCF`, `Voltage controlled 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` | ### `Function generator` | ||||
Generates complex envelopes or cycles via a large selection of general parameters. | |||||
### `Granular` | ### `Granular` | ||||
@@ -218,16 +218,17 @@ Implements binary logic with gate signals. | |||||
*Deprecated aliases: `Low pass gate`, `Lowpass gate`* | *Deprecated aliases: `Low pass gate`, `Lowpass gate`* | ||||
### `MIDI` | ### `MIDI` | ||||
Generates, processes, or interprets MIDI messages, e.g. for a MIDI interface. | |||||
### `Mixer` | ### `Mixer` | ||||
Mixes/sums audio with optional level adjustment, panning, and/or mix buses. | |||||
### `Multiple` | ### `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` | ### `Noise` | ||||
Generates audio-rate or CV-rate random noise. | |||||
### `Oscillator` | ### `Oscillator` | ||||
*Deprecated aliases: `VCO`, `Voltage controlled oscillator`* | *Deprecated aliases: `VCO`, `Voltage controlled oscillator`* | ||||
@@ -239,7 +240,7 @@ Implements binary logic with gate signals. | |||||
### `Physical modeling` | ### `Physical modeling` | ||||
Simulates a physical system such as a string, metal bar, vocal chords, chaotic system, celestial bodies, etc. | |||||
### `Polyphonic` | ### `Polyphonic` | ||||
*Deprecated aliases: `Poly`* | *Deprecated aliases: `Poly`* | ||||
@@ -1,6 +1,6 @@ | |||||
# Migrating v1 Plugins to v2 | # 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 | ## 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. | 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> 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 | ## 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 | ### Port labels | ||||
TOOD | TOOD | ||||
@@ -44,11 +69,3 @@ TODO | |||||
### 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/* | |||||
``` |
@@ -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. | 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. | 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. | We will use `MyPlugin` for this tutorial. | ||||
Run | Run | ||||
```bash | ```bash | ||||