LV2 allows plugins to implement UIs in any
toolkit. This has led to UIs being implemented in several (which is a
Good Thing, and works fine in all hosts via
Suil), but mostly Gtk.
Unfortunately, Gtk is not really suitable for use in plugins on
platforms where a "system Gtk" can't be relied on. Some toolkits are
suitable for static linking, but personally, I am somewhat disillusioned
with "toolkits" lately, and massive libraries in general. Sometimes all
you want or need is a straightforward standard graphics API and some
keyboard/mouse events.
When it comes to standard cross-platform graphics APIs, the undisputed
heavyweight king is OpenGL. While not perfect (what is?), no other API
is already there on almost any platform you'd care about (heck, most
modern phones have hardware accelerated OpenGL). Unfortunately, OpenGL
deals only with rendering, and not user input or windowing issues. What
is needed is a minimal framework to get an OpenGL view to draw to, and
receive keyboard and mouse events. Enter
Pugl.
Pugl handles all the platform specific business behind an API very
similar to GLUT, but much smaller and appropriate for plugins (which
GLUT unfortunately is not). In terms of size, this is a few hundred
lines of C per platform (on a personal note, this fits in well with my
ever-increasing distaste in dealing with bloated junk with tons of
dependencies... give me a Couple Hundred Lines of C™ any day). The
breakdown on Pugl is on its homepage, but suffice to say after a few
days' work it does the job it was designed to do on X11, Mac OS X, and
Windows. Since embedding X11 works in LV2 land, that means an OpenGL
plugin UI can be embedded in the host, and I have the pretty pictures to
prove it:


This is a simple test plugin (complete with gratuitous use of 3D)
embedded in Ingen and Ardour. Both are Gtk based programs, but this
works in Qt as well. Testing so far on other platforms has only been
top-level since I have no programs to embed in, but the bulk of the work
is done. This includes full keyboard and mouse support, with
significantly more complete keyboard support than GLUT.
Naturally I can't predict the future, so it remains to be seen how much
OpenGL UI action we'll see for plugins. Being just a low level drawing
API and not a set of boxed widgets, it's a bit open ended with a bit of
a learning curve, but on the other hand there is lots of existing
OpenGL code out there. Perhaps someone will throw together a library of
audio appropriate widgets, if one doesn't already exist. Either way, I
think an easy to use API for writing truly portable LV2 plugin UIs is a
very good thing, which hopefully eliminates a barrier for some plugin
developers and helps LV2 invade the territory of its proprietary
adversaries... or, at the very least, makes for a really cool 3D panner
GUI :)