Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
v8.0 (7 Oct 2018)
New rendering architecture: Raw and PBR layers, the Raw layer is drawn on top of a cached PBR layer. Practically this change means about 2x less CPU usage from GUI.
Conceptually the updates flow this way:
UIElement.onDrawPBR => mipmapping => ICompositor => UIElement.onDrawRaw => channel swap
BREAKING if you have custom widgets:
UIElement.onDrawis now replaced by
onDrawRawdepending on which layer you want to draw. Note: that if the PBR layer changes, both
onDrawRawwill be called since the Raw layer is always on top of the PBR Layer.
UIElementnow has UIFlags in its constructor to say whether a widget can be animated and where it renders.
BREAKING if you previously used 0-physical AND pbr-widgets with manual caching:
setDirtynow exists in two versions:
setDirty(UILayer.onlyRaw). The latter only exists for PBR widgets that render to both layers, and need a fast render path to the composited RGBA buffer. Most of the time you can still keep using
- removal of the now-useless Physical channel. You can have fast behaviour using
setDirty(UILayer.onlyRaw)or using widgets without
BREAKING if you used color correction from
Color correction is now a regular
UIElementoperating on the Raw layer (see examples/distort to implement) Any kind of post-processing effect can be implemented likewise, provided it works on RGBA8 pixels.
- Color correction is now a regular
BREAKING if you used
UIBufferedElementhas been split in
UIBufferedElementPBRdepending on which layer you want to bufferize. These widgets allows you to simplify redraw logic and avoid the
Note that widgets in
dplug:pbr-widgetshave been updated.
Less thread launching for graphics, no PBR or Mipmap thread is launched at all if there is nothing to do. Many other graphics optimizations: #270
v7.0 (5 Jul 2018)
Starting with v7.1.y, the D runtime can be enabled back in so-called "runtime sections" (see
tests/using-runtime, dangerous feature). Still buggy on Linux.
BREAKING Dropping compatibility of old compilers. New requirements: LDC >= 1.8 and DMD >= 2.078
BREAKING VST2 plugin building now depends on the VST SDK being present on the system. Point a
VST2_SDKenvironment variable to the corresponding
VST2_SDKdirectory in the VST SDK. This requirement trickles down to building
dplug:hostand related tools.
In order to distribute VST2 plug-ins, you MUST sign an agreement with Steinberg.
BREAKING Removed deprecated modules
dplug.dsp.envelopeand all symbols marked
deprecatedin v6. This shouldn't break anything if your plug-in was building without warning in v6.
v6.0 (5 Dec 2017)
- AAX Native support for Windows and macOS, 32-bit and 64-bit.
plugin.jsonneeds an additional
categorykey. See the accepted values in
dplug.client.daw. The key
CFBundleIdentifierPrefixis now mandatory.
plugin.jsonnow has a JSON Schema. Use eg. VSCode to have auto-completion on it.
- Minimum required Mac OS X version is now 10.8 or later.
- Minimum required LDC version is now 1.2 or later.
releasetool has been renamed to
dplug-build. For the architecture switch (
-a), it now only accepts
-a x86_64to match what DUB does.
-a x86-64are now disallowed options.
- Much improved Linux stability, with many fixes to
- New: list of compatible hosts in the Wiki.
v5.0 (22 Aug 2017)
- Linux VST support (64-bit) with X11 windowing.
- No more need for module.def (need LDC >= 1.1 on Windows).
plugin.jsonnow optionally parsed at compile-time (recommended).
- PBR widgets seggregated in the new
Known bugs: no MIDI input in Cubase and Bitwig, X11 window backend rarely works. Using v6 recommended.
v4.0 (2nd Nov 2016)
- macOS Sierra support fixed (also works in macOS High Sierra).
- To allow that, the D runtime is now linked with but disabled. No GC, no TLS, no global ctor/dtor.
v3.0 (9th May 2016):
- Audio Unit compatibility added, with both Cocoa and Carbon UI. What is still missing from AU: Audio Component API, sandboxing, v3. In other words it's on parity with IPlug but not JUCE.
releasetool is now much more friendly to use.
- Special keys in
dub.jsonare now expected in a
plugin.jsonfile next to dub.json. In the future it will be the place of autority for information about a plugin, for now this has to be duplicated in
buildPluginInfo()override. An empty
plugin.jsonis OK, defaults are in place. This file is consumed by the
- The Wiki became a place to visit.
v2.0: (6th January 2016)
releasetool now expects a VST or AU configuration, see the
distortexample for details
CFBundleIdentifierPrefix, see how
distortworks to update your plugins dub.json
- 10.6 compatibility dropped.
v1.0: (26th May 2015)
- initial release, VST support for 32-bit and 64-bit, Windows and Mac