Skip to content

Commit 0cba155

Browse files
committed
Update DPF and plugins
Signed-off-by: falkTX <falktx@falktx.com>
1 parent f9666d8 commit 0cba155

12 files changed

Lines changed: 153 additions & 139 deletions

File tree

dpf/FEATURES.md

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,29 @@ This file describes the available features for each plugin format.
44
The limitations could be due to the plugin format itself or within DPF.
55
If the limitation is within DPF, a link is provided to a description below on the reason for it.
66

7-
| Feature | JACK/Standalone | LADSPA | DSSI | LV2 | VST2 | VST3 | Feature |
8-
|---------------------|---------------------------------------|-------------------------|---------------------|-------------------------------|--------------------------------|----------------------------------|---------------------|
9-
| Audio port groups | [Yes*](#jack-audio-port-groups) | No | No | Yes | No | [No*](#vst3-is-work-in-progress) | Audio port groups |
10-
| Audio port as CV | Yes | No | No | Yes | No | [No*](#vst3-is-work-in-progress) | Audio port as CV |
11-
| Audio sidechan | Yes | No | No | Yes | [No*](#vst2-potential-support) | [No*](#vst3-is-work-in-progress) | Audio sidechan |
12-
| Bypass control | No | No | No | Yes | [No*](#vst2-potential-support) | [No*](#vst3-is-work-in-progress) | Bypass control |
13-
| MIDI input | Yes | No | Yes | Yes | Yes | Yes | MIDI input |
14-
| MIDI output | Yes | No | No | Yes | Yes | Yes | MIDI output |
15-
| Parameter changes | Yes | No | No | [No*](#lv2-parameter-changes) | Yes | Yes | Parameter changes |
16-
| Parameter groups | No | No | No | Yes | Yes | [No*](#vst3-is-work-in-progress) | Parameter groups |
17-
| Parameter outputs | No | No | No | Yes | No | [No*](#vst3-is-work-in-progress) | Parameter outputs |
18-
| Parameter triggers | Yes | No | No | Yes | [No*](#parameter-triggers) | [No*](#parameter-triggers) | Parameter triggers |
19-
| Programs | [Yes*](#jack-parameters-and-programs) | [No*](#ladspa-programs) | [Yes*](#dssi-state) | Yes | [No*](#vst2-programs) | Yes | Programs |
20-
| States | Yes | No | [Yes*](#dssi-state) | Yes | Yes | Yes | States |
21-
| Full/internal state | Yes | No | No | Yes | Yes | Yes | Full/internal state |
22-
| Time position | Yes | No | No | Yes | Yes | Yes | Time position |
23-
| UI | [Yes*](#jack-custom-ui-only) | No | External only | Yes | Embed only | Embed only | UI |
24-
| UI bg/fg colors | No | No | No | Yes | No | No? | UI bg/fg colors |
25-
| UI direct access | Yes | No | No | Yes | Yes | Yes | UI direct access |
26-
| UI host-filebrowser | No | No | No | Yes | [No*](#vst2-potential-support) | [No*](#vst3-is-work-in-progress) | UI host-filebrowser |
27-
| UI host-resize | Yes | No | Yes | Yes | No | [No*](#vst3-is-work-in-progress) | UI host-resize |
28-
| UI remote control | No | No | Yes | Yes | No | Yes | UI remote control |
29-
| UI send midi note | Yes | No | Yes | Yes | Yes | Yes | UI send midi note |
7+
| Feature | JACK/Standalone | LADSPA | DSSI | LV2 | VST2 | VST3 | CLAP | Feature |
8+
|---------------------|---------------------------------------|--------------------|---------------------|-------------------------------|----------------------------|----------------------------|-------------------------------|---------------------|
9+
| Audio port groups | [Yes*](#jack-audio-port-groups) | No | No | Yes | No | Yes | Yes | Audio port groups |
10+
| Audio port as CV | Yes | No | No | Yes | No | [Yes*](#vst3-cv) | [No*](#work-in-progress) | Audio port as CV |
11+
| Audio sidechan | Yes | No | No | Yes | [No*](#vst2-deprecated) | Yes | Yes | Audio sidechan |
12+
| Bypass control | No | No | No | Yes | [No*](#vst2-deprecated) | Yes | Yes | Bypass control |
13+
| MIDI input | Yes | No | Yes | Yes | Yes | Yes | Yes | MIDI input |
14+
| MIDI output | Yes | No | No | Yes | Yes | Yes | Yes | MIDI output |
15+
| Parameter changes | Yes | No | No | [No*](#lv2-parameter-changes) | Yes | Yes | Yes | Parameter changes |
16+
| Parameter groups | No | No | No | Yes | Yes | [No*](#work-in-progress) | Yes | Parameter groups |
17+
| Parameter outputs | No | No | No | Yes | No | Yes | Yes | Parameter outputs |
18+
| Parameter triggers | Yes | No | No | Yes | [No*](#parameter-triggers) | [No*](#parameter-triggers) | [No*](#parameter-triggers) | Parameter triggers |
19+
| Programs | [Yes*](#jack-parameters-and-programs) | [No*](#ladspa-rdf) | [Yes*](#dssi-state) | Yes | [No*](#vst2-programs) | Yes | No | Programs |
20+
| States | Yes | No | [Yes*](#dssi-state) | Yes | Yes | Yes | Yes | States |
21+
| Full/internal state | Yes | No | No | Yes | Yes | Yes | Yes | Full/internal state |
22+
| Time position | Yes | No | No | Yes | Yes | Yes | Yes | Time position |
23+
| UI | [Yes*](#jack-custom-ui-only) | No | External only | Yes | Embed only | Embed only | Yes | UI |
24+
| UI bg/fg colors | No | No | No | Yes | No | No? | No | UI bg/fg colors |
25+
| UI direct access | Yes | No | No | Yes | Yes | Yes | Yes | UI direct access |
26+
| UI host-filebrowser | No | No | No | Yes | [No*](#vst2-deprecated) | [No*](#work-in-progress) | [No*](#work-in-progress) | UI host-filebrowser |
27+
| UI host-resize | Yes | No | Yes | Yes | No | Yes | Yes | UI host-resize |
28+
| UI remote control | No | No | Yes | Yes | No | Yes | No | UI remote control |
29+
| UI send midi note | Yes | No | Yes | Yes | Yes | Yes | Yes | UI send midi note |
3030

3131
For things that could be unclear:
3232

@@ -59,7 +59,7 @@ MIDI CCs are used for parameter changes (matching the `midiCC` value you set on
5959
There is no generic plugin editor view.
6060
If your plugin has no custom UI, the standalone executable will run but not show any window.
6161

62-
## LADSPA programs
62+
## LADSPA RDF
6363

6464
Programs for LADSPA could be done via LRDF but this is not supported in DPF.
6565

@@ -78,7 +78,7 @@ But if we involve programs, they would need to pass through the UI in order to w
7878
Although this is already implemented in DPF (through a custom extension), this is not implemented on most hosts.
7979
So for now you can pretty much treat it as if not supported.
8080

81-
## VST2 potential support
81+
## VST2 deprecated
8282

8383
Not supported in DPF at the moment.
8484
It could eventually be, but likely not due to VST2 being phased out by Steinberg.
@@ -88,6 +88,11 @@ Contact DPF authors if you require such a feature.
8888

8989
VST2 program support requires saving state of all programs in memory, which is very expensive and thus not done in DPF.
9090

91-
## VST3 is work in progress
91+
## VST3 CV
92+
93+
Although VST3 officially supports CV (Control Voltage) tagged audio ports,
94+
at the moment no host supports such feature and thus it is not possible to validate it.
95+
96+
## Work in progress
9297

9398
Feature is possible, just not implemented yet in DPF.

dpf/README.md

Lines changed: 16 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
[![cmake](https://github.com/DISTRHO/DPF/actions/workflows/cmake.yml/badge.svg)](https://github.com/DISTRHO/DPF/actions/workflows/cmake.yml)
44
[![example-plugins](https://github.com/DISTRHO/DPF/actions/workflows/example-plugins.yml/badge.svg)](https://github.com/DISTRHO/DPF/actions/workflows/example-plugins.yml)
55

6-
DPF is designed to make development of new plugins an easy and enjoyable task.<br/>
7-
It allows developers to create plugins with custom UIs using a simple C++ API.<br/>
8-
The framework facilitates exporting various different plugin formats from the same code-base.<br/>
6+
DPF is designed to make development of new plugins an easy and enjoyable task.
7+
It allows developers to create plugins with custom UIs using a simple C++ API.
8+
The framework facilitates exporting various different plugin formats from the same code-base.
99

10-
DPF can build for LADSPA, DSSI, LV2, VST2, VST3 and CLAP formats.<br/>
11-
All current plugin format implementations are complete.<br/>
12-
A JACK/Standalone mode is also available, allowing you to quickly test plugins.<br/>
10+
DPF can build for LADSPA, DSSI, LV2, VST2, VST3 and CLAP formats.
11+
A JACK/Standalone mode is also available, allowing you to quickly test plugins.
1312

14-
Plugin DSP and UI communication is done via key-value string pairs.<br/>
15-
You send messages from the UI to the DSP side, which is automatically saved in the host when required.<br/>
16-
(You can also store state internally if needed, but this breaks DSSI compatibility).<br/>
13+
Plugin DSP and UI communication is done via key-value string pairs.
14+
You send messages from the UI to the DSP side, which is automatically saved in the host when required.
15+
(You can also store state internally if needed, but this breaks DSSI compatibility).
1716

18-
Getting time information from the host is possible.<br/>
19-
It uses the same format as the JACK Transport API, making porting some code easier.<br/>
17+
Getting time information from the host is possible.
18+
It uses the same format as the JACK Transport API, making porting some code easier.
2019

20+
Provided features and implementation status for specific plugin formats can be seen in [FEATURES.md](FEATURES.md).
2121

2222
## Licensing
2323

@@ -31,43 +31,11 @@ Bug reports happen on the [DPF github project](https://github.com/DISTRHO/DPF/is
3131

3232
Online documentation is available at [https://distrho.github.io/DPF/](https://distrho.github.io/DPF/).
3333

34-
Online help and discussion about DPF happens in the [kx.studio chat, DPF room](https://chat.kx.studio/).
34+
Online help and discussion about DPF happens in the [kx.studio chat, DPF room](https://chat.kx.studio/channel/dpf).
3535

3636

3737
## List of plugins made with DPF:
38-
- [DISTRHO glBars](https://github.com/DISTRHO/glBars)
39-
- [DISTRHO Kars](https://github.com/DISTRHO/Kars)
40-
- [DISTRHO Mini-Series](https://github.com/DISTRHO/Mini-Series)
41-
- [DISTRHO MVerb](https://github.com/DISTRHO/MVerb)
42-
- [DISTRHO ndc Plugs](https://github.com/DISTRHO/ndc-Plugs)
43-
- [DISTRHO Nekobi](https://github.com/DISTRHO/Nekobi)
44-
- [DISTRHO ProM](https://github.com/DISTRHO/ProM)
45-
- [Dragonfly Reverb](https://michaelwillis.github.io/dragonfly-reverb)
46-
- [Fogpad-port](https://github.com/linuxmao-org/fogpad-port)
47-
- [master_me](https://github.com/trummerschlunk/master_me)
48-
- [Ninjas2](https://github.com/rghvdberg/ninjas2)
49-
- [osamc-lv2-workshop](https://github.com/osamc-lv2-workshop/lv2-workshop) (simple plugins code examples)
50-
- [QuadraFuzz](https://github.com/jpcima/quadrafuzz)
51-
- [Regrader-Port](https://github.com/linuxmao-org/regrader-port)
52-
- [Rezonateur](https://github.com/jpcima/rezonateur)
53-
- [Spectacle-analyzer](https://github.com/jpcima/spectacle/)
54-
- [Stone Phaser](https://github.com/jpcima/stone-phaser)
55-
- [String-machine](https://github.com/jpcima/string-machine)
56-
- [Uhhyou Plugins](https://github.com/ryukau/LV2Plugins)
57-
- [VL1-emulator](https://github.com/linuxmao-org/VL1-emulator)
58-
- [Wolf Shaper](https://github.com/pdesaulniers/wolf-shaper)
59-
- [Wolf Spectrum](https://github.com/pdesaulniers/wolf-spectrum)
60-
- [YK Chorus](https://github.com/SpotlightKid/ykchorus)
61-
- [ZamAudio Suite](https://github.com/zamaudio/zam-plugins)
62-
## Work in progress
63-
- [CV-LFO-blender-LV2](https://github.com/BramGiesen/cv-lfo-blender-lv2)
64-
- [fverb](https://github.com/jpcima/fverb)
65-
- [Juice Plugins](https://github.com/DISTRHO/JuicePlugins)
66-
- [gunshot](https://github.com/soerenbnoergaard/gunshot)
67-
- [midiomatic](https://github.com/SpotlightKid/midiomatic)
68-
- [Shiro Plugins](https://github.com/ninodewit/SHIRO-Plugins/)
69-
- [Shiru Plugins](https://github.com/linuxmao-org/shiru-plugins)
70-
71-
Checking the [github "DPF" tag](https://github.com/topics/dpf) can potentially bring up other DPF-made plugins.
72-
73-
Plugin examples are available in the `example/` folder inside this repo.
38+
39+
See [this wiki page](https://github.com/DISTRHO/DPF/wiki/Plugins-made-with-DPF) for a list of plugins made with DPF.
40+
41+
Plugin examples are also available in the `example/` folder inside this repo.

dpf/dgl/src/TopLevelWidgetPrivateData.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ TopLevelWidget::PrivateData::PrivateData(TopLevelWidget* const s, Window& w)
2828
selfw(s),
2929
window(w)
3030
{
31+
/* if window already has a top-level-widget, make the new one match the first one in size
32+
* this is needed because window creation and resize is a synchronous operation in some systems.
33+
* as such, there's a chance the non-1st top-level-widgets would never get a valid size.
34+
*/
35+
if (!window.pData->topLevelWidgets.empty())
36+
{
37+
TopLevelWidget* const first = window.pData->topLevelWidgets.front();
38+
39+
selfw->pData->size = first->getSize();
40+
}
41+
3142
window.pData->topLevelWidgets.push_back(self);
3243
}
3344

dpf/dgl/src/pugl-upstream/src/win.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@
3535
#define PUGL_LOCAL_CLIENT_MSG (WM_USER + 52)
3636
#define PUGL_USER_TIMER_MIN 9470
3737

38+
#ifdef __cplusplus
39+
# define PUGL_INIT_STRUCT \
40+
{}
41+
#else
42+
# define PUGL_INIT_STRUCT \
43+
{ \
44+
0 \
45+
}
46+
#endif
47+
3848
typedef BOOL(WINAPI* PFN_SetProcessDPIAware)(void);
3949
typedef HRESULT(WINAPI* PFN_GetProcessDpiAwareness)(HANDLE, DWORD*);
4050
typedef HRESULT(WINAPI* PFN_GetScaleFactorForMonitor)(HMONITOR, DWORD*);
@@ -80,7 +90,7 @@ puglRegisterWindowClass(const char* name)
8090
module = GetModuleHandle(NULL);
8191
}
8292

83-
WNDCLASSEX wc = {0};
93+
WNDCLASSEX wc = PUGL_INIT_STRUCT;
8494
if (GetClassInfoEx(module, name, &wc)) {
8595
return true; // Already registered
8696
}
@@ -472,8 +482,8 @@ initKeyEvent(PuglKeyEvent* event,
472482
}
473483
} else if (!dead) {
474484
// Translate unshifted key
475-
BYTE keyboardState[256] = {0};
476-
wchar_t buf[5] = {0};
485+
BYTE keyboardState[256] = PUGL_INIT_STRUCT;
486+
wchar_t buf[5] = PUGL_INIT_STRUCT;
477487

478488
event->key = puglDecodeUTF16(
479489
buf, ToUnicode(vkey, vcode, keyboardState, buf, 4, 1 << 2));
@@ -689,7 +699,7 @@ handleMessage(PuglView* view, UINT message, WPARAM wParam, LPARAM lParam)
689699
pt.y = GET_Y_LPARAM(lParam);
690700

691701
if (!view->impl->mouseTracked) {
692-
TRACKMOUSEEVENT tme = {0};
702+
TRACKMOUSEEVENT tme = PUGL_INIT_STRUCT;
693703

694704
tme.cbSize = sizeof(tme);
695705
tme.dwFlags = TME_LEAVE;

dpf/distrho/DistrhoPlugin.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ static const uint32_t kCVPortHasPositiveUnipolarRange = 0x40;
7272
*/
7373
static const uint32_t kCVPortHasScaledRange = 0x80;
7474

75+
/**
76+
CV port is optional, allowing hosts that do no CV ports to load the plugin.
77+
When loaded in hosts that don't support CV, the float* buffer for this port will be null.
78+
*/
79+
static const uint32_t kCVPortIsOptional = 0x100;
80+
7581
/** @} */
7682

7783
/* ------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)