Over the last week or so, I’ve been working on a new toy, a combination window manager and compositing manager with GL output called ‘luminocity’. Note the word toy: I have no intention of ever worrying about all the edge cases and broken legacy clients that you need in a real window manager. I do, however, intend to add title bars.
Despite the quick-hack nature of luminocity, I’ve had quite a bit of fun with the code. It’s nicely modularized with lots of GObjects and signals. It has a separate rendering thread for the GL output. There is some advanced Xlib programming to keep everything async. And it uses X extensions by the boatload: XFIXES, SYNC, DAMAGE, Composite, XTEST. (And GLX, of course.)
The way that luminocity works is that you run luminocity against an offscreen X display (I’ve been using the kdrive based Xfake X server.) It asserts itself as the window manger and compositing manager for the display and pops up the output in a window. Input is forward back from the window to the offscreen display. This makes for a very cool development process. You run some apps against the offscreen server. You start luminocity, look at how the apps look. Play with them, move them around. You quit luminocity, make some code changes, restart luminocity. The apps are still there. It’s a lot of fun.
What’s next? Title bars. Some effects to take advantage of GL – animations and live minimization. Some work studying the performance bottlenecks. (Texture swapfests seem to be a problem at the moment.) Maybe some work on application synchronization. But in the end, the work that Søren is doing on Metacity’s CM is much more likely to be the permanent way forward. Or maybe Looking Glass. Luminocity has about the same architecture as Sun’s Looking Glass, it’s just much simpler and smaller, all written in C, and I have no plans to add 3D client support to it.