Reinventing the Plugin Editor
Immediate Mode GUIs for Audio Plugins
Introduction
What happens when you want to build a plugin but you suffer from not-invented-here syndrome and you like things that are minimalistic and self-contained?
Traditional plugin GUIs like JUCE and VSTGUI, are mature, powerful and give the user a lot for free. On the flipside, they also tend to be heavyweight, have many dependencies, and using them often result in a lot of boilerplate code and state synchronisation issues.
Some years ago I discovered that there was a whole class of minimalistic GUI libraries (Nuklear, Dear ImGui, NanoVG/NanoGUI, etc) originating from the game dev world that were vector based, hardware accelerated and often based on a paradigm know as Immediate Mode GUI.
Immediate mode GUIs offer a clean API that does away with widgets and callbacks, allows for rapid prototyping, minimises boiler plate code and state synchronisation and generally can do more with less code. The memory and disk footprints also tend to be small.
This talk will explore how to integrate a GUI framework that was not built with plugins in mind, to work in an audio plugin editor. In the process we will learn about how GUIs work under the hood, all the nitty gritty details of windowing systems on different platforms, and in particular how threading works in them, and how threading works when your GUI runs inside a plugin that runs inside of a host process - Whose bloody message thread is it really?
And then we will see what happens when we bring hardware accelerated graphics like OpenGL into the picture.
The examples in the talk will be based on Dear ImGui, as I found it the most mature and actively maintained project in the genre. But the majority of content in this talk will be useful for any GUI framework. And for those who just want to have a better understanding and appreciation of all the things a well written GUI framework will do for you.
Gustav Andersson
Senior Developer
Elk Audio
Musician, photographer, coder, runner. In the space between technology and art. Senior software engineer for Elk Audio in Stockholm with a passion for everything that makes sounds. Currently into gritty 80/90s reverb and ambient feedback loops.