More Nuvi, GUADEC And A Little Clutter.

Following on from my Garmin Linux Nuvi Post, the usually obtuse LinuxDevices now has a story with more details.

Its GUADEC next week and unfortunatly it now seems I’ll be stuck manning the fort and not following along with rest of the OH gang to Istanbul. Just waaaaay to busy to take a week out currently. My scheduled Clutter guts talk is now going to be bravely tag teamed by Pippin, Tomas and Ebassi who will no doubt do a much better job than myself. Damn, I love Turkish food too.

Also Clutter wise, 0.8 is very close. It a great help if folks can keep hammering the 0.7.x developer releases and report issues. This will be by far the biggest Clutter release yet.


Garmin 880

I noticed today that Garmin have made modified sources available for there upcoming new Linux based Nuvi 8xx and 5xxx in-car Sat Navs.

Nuvi 880

On downloading and Inspecting the large (and nicely organized) 8xx source tarball (list of files here) its very apparent the device built upon a GNOME Mobile based stack (with X, Matchbox and GTK+ etc). Also interestingly it also contains GeoClue, PulseAudio and seemingly both Ogg Vorbis and Flac support. Further to this it looks like there are some very likely Poky specific bits in there - versions nums, psplash, ipkg etc. I need to prod further, quite a few other interesting things in there.

All very exciting — especially to see another big device manufacturer picking up on not just Linux, but also GNOME and OH technologies. Really looking forward to the device becoming available in the UK.


Wormhole to Clutter 0.8

With the merge last night of the new layout based code, Clutter trunk is now pretty much feature complete for the 0.8 release. With any luck we’ll have the 0.7 developer release by week end and 0.8 out in time for GUADEC. With this in mind and the current flurry of interest around Clutter and potential future GTK usage I thought It’d be a good time to blog about recent improvements and other bits, giving a overview of where Clutter is right now technically.

OHLOH Code History

As the OHLOH graph shows, recent Clutter development has been full on. Approximately 30K lines of code have been added just the core Clutter library alone since the 0.6 release (less than 6 months ago). The developments all these new lines correspond to include;

COGL. The underlying GL abstraction layer in Clutter has been completely rewritten from the ground up. Its no longer a conceptual hack but a documented, fully featured library pretty much in its own right. COGL abstracts over Open GL, Open GL ES 1.1 and now OpenGL ES 2.0 providing a smart uniform API over these libraries with various utility features such as texture tiling abstractions, path and primitive rendering, FBO, shaders etc etc. It gives the abiltiy to run the same Clutter based application with just a recompile across your desktop and your mobile device with no modifications (an often overlooked useful feature - there is no other peice of software open nor proprietry that I know of that does this). COGL is now *so* much better - big thanks to both Ivan and Neil for their hard work on COGL.

New and improved backends. As well as exisiting suppport for things like GLX, EGL and SDL, Clutter now has native backends for OSX, Win32 and the iPhone ‘OS’ (The ‘fruity’ backend). The GTK+ embedded widget has been greatly improved and now Clutter can be embedded in GTK+ on both X and Win32 (Patches greatly welcomed for OSX). Kudos to Tommi who implemented the OSX backend and put up with us breaking backend interfaces etc (Though you could be a little nicer on bug reports ;P).

Texture From Pixmap support. The X11 based backends now feature support for Actors that wrap external X drawables (i.e texture from pixmap extension and fallbacks) - allowing the creation of compositors with Clutter painlessly (well at least with a little bit less pain). Myself, Tomas and Bob have been experimenting with this in both Matchbox 2 and Metacity (see below). It may also, at least in theory, be possible to embed GTK+ in Clutter using this (albeit a bit hacky but only option until GTK+ supports offscreen rendering).

Multiple stage support. Clutter now seamlessly supports multiple stages (i.e windows) - very much needed especially in things like the GTK+widget.

Layout. 0.6 and prior Clutter only really supported fixed positioning and layout - this has been a thorn in the side of poor little Italian ‘code is fashion’ designer Ebassi but liked by old school Macromedia Director casualties like myself and pippin. Now thanks to work spurred by Havoc, Lucas and Ebassi Clutter has now has some pretty advanced layouting infrastruture which should give should give the best of both these worlds.

Pango renderer rewrite. Our custom Pango renderer has been completely rewritten, now using the more modern and maintained PangoCairo (over FT2 previously), avoids nasty subclassing hacks, supports smooth fast scaling of text, has many edge case issues fixed and it still is super efficient (using texture glyph cache) and even a little bit faster.

Wider input device support. This hasn’t yet landed in trunk due to some issues with XInput but we have plans to work around that and hopefully something will land in time for 0.7. This allows Clutter to generically handle multiple simultaneous pointing devices — i.e. like a touchscreen where each device is a fingertip.. Kudos to Sir Brad of the Ford, Rob for doing much of the ground work here and battling XInput internals (with help of Mr Stone and MPX, Peter Hutterer - also thanks).

And more more more! Better texture support, timeline improvements, clutter entry improvements, container child properties, numerous bug fixes, API tweaks etc etc etc.

This will be without any doubt the biggest Clutter release yet. Huge appreciation to everyone that has worked hard to make it so. I really encourage people to grab current trunk (or the upcoming 0.7 release), play, break stuff and report bugs.

——-

Beyond improvements to the Clutter core library theres also been quite a bit of experimentation going on ontop of Clutter itself. This includes:

Clutter Box2d. The mischevious little hobbits invention to bind the 2D physics library Box2D into Clutter. Makes for some very interesting UI possibilties especially very physical UI’s with little development effort. Code is here and heres a screen shot of one of its included demos;

clutter-box2d.png

Clutter MD2. Neils cool little side project to load and render Quake 3D models in Clutter. I really hope this puts an end to people calling Clutter ‘2.5D’ (what does that actually mean?) and shows that if people really want to they can build 1980’s neuromancer inspired full 3D UI’s with virtual offices and stuff (seriously though, there are some sane uses - the XBOX 360 ‘dirt’ game has a pretty interesting fully 3D UI)

Clutter Webkit. Iain has been chipping away at a native Clutter backend for Webkit. Its super fine. Its blazingly fast, does the kinetic scrolls, fast zooms etc as well the more boring but needed stuff like forms etc. See here for info on getting it and building, there is also very basic demo front end is in toys/ in Clutter SVN. A video of it in action is here (Note, Google Video flash based). It would be great if we can upstream this eventually.

Metacity Compositing backend A pet project by myself to stress the texture pixmap support and maybe give me a desktop compositor that has familiar window management and more subtle (maybe even useful) effects that do not evoke headaches, seizures etc after prolonged usage. Still pretty early days for that but it basically works at least on the surface. Also note Iain actually did all the hard work here in the XRender based compositing support for Metacity, switching that to use Clutter was honestly pretty trivial.

Code is here (’clutter’ branch). And here is a not so exciting in action screen shot;

Now with Shadows

—-

So far so good, there are some annoying current downsides however. Namely;

GStreamer integration. Whilst with have working support for a video playback actor in Clutter via Clutter-gst its not quite optimal. Im not sure we are using GStreamer totally efficiently and we’re not doing anything clever in fast texture uploads of video frames. It would be great to have optional support for YUV shader transform magic and even better just use the gstreamer-gl sink — though it seems that is very X specific, self contained GL wise (cant pass it an external GL context, target texture id etc) and wont support things other than regular OpenGL (i.e. OpenGL ES).

Clutter Cairo This works fine and has had some minor improvements recently to better support the webkit work. However the actual Cairo rendering to the Clutter Actor is all done in software and thus any Cairo redraws are relatively slow (once rendered in a scene its not slow, but the actual creation, update of a surface is. Also this isn’t so much an issue in PangoCairo due to the texture glyph caching we do). Performance is worsened by the fact that we have to un premul all the alpha of a Cairo surface before uploading texture wise (yes we could avoid this by changing how we set up our scene, using shaders etc but that would just fix one problem and create new one(s) - then premulling all image data for example).

Also the above paragraph is not meant to knock all the great performance improvements that have been happening recently in Cairo. Its only ’slow’ as its done in software whilst everything else is rendered on the GPU. There has been some initial experimentation with various ways (other than Glitz) to get Cairo rendering on the GPU and working also within Clutter by means of an OpenVG backend (only really useful for mobile/embedded however where implementations exist) for Cairo and some discussion over creating a potential COGL backend.

Demos. As yet there are no substantial demos or public large applications really stressing and showing off the latest developments in Clutter beyond simple ‘test’ cases at least as yet. The existing demos are beginning to look a little aged and dull.

There is however a number of Clutter based applications now beginning to appear/mature. Hopefully 0.8 release will spawn more.

—-

Finally, I’ll be giving a talk at GUADEC on Clutter workings - this wont be a ‘bling’ talk but more about how Clutter works and how it tames OpenGL pain to make a hopefully nice, easy to use and highly portable open source library for building a modern cutting edge user interface.


Shameless Plug

OH are hiring!. Amazing Clutter, Poky, Kernel, UI or design folks please read on.


OSiM

I leave for SF tommorow morning for Open Source in Mobile and some other bay area work related meetings. At OSiM I’ll be giving a short Clutter ‘technology demo’ on Wednesday at 12 noon. For that, at the OHPlex we hacked togeather some new-ish demos, the Clutter blog has some vids.


Clutter 0.6

Today we at the OHPlex finally spun a new stable Clutter release. New spangley 0.6 release includes support for JSON based `interface’ files, higher end GL features like shaders and FBO’s (all nicely abstracted), new W3C style event handling, initial support for Windows and OSX and many more tweaks, addtions, and fixes — even an overhauled website (well, a little). Props to all that have worked hard on this release. More info on the release here, and a trio of some quite nice new clutter vids - here and here.

Also blogging frequency appears to be tailing off a little (the usual cycle) — However I do keep my Tumblr pretty fresh though with lots of interesting bits and pieces.


Clutter on Ipod Touch.

Thanks to Richards ability to make Poky build just about anything, today we got Clutter trunk running on a jailbroken Ipod Touch.

clutter-iphone-movie.png

Pretty rubbish quality phone captured mp4 movie
(Also an Ogg, thanks to mr flippy man.)

Some notes;

  • It running on top of a regular jailbroke touch - its not a touch running Linux.
  • Its using the stock clutter EGL Native backend (not the OSX one) to render using the OpenGL ES 1.1 hardware acceleration on the Ipod.
  • There is no input event handling (yet), really need a proper UIKit backend for that and proper sharing of the framebuffer.
  • We had to build pretty much the entire Clutter dependency tree, not just glib, pango etc but also xlibs due to Clutters use of gdk-pixbuf (need to figure something out here).
  • We really need a better test demo about now than the damn spinning hands…

Why do it ? Now we have a very cheap (and powerful) OpenGL ES dev platform that also supports multitouch.


links for 2007-10-06


PokyTube

A couple of poky/sato captures on youtube;

On QEMU Arm:


Link

On an N800:


Link


links for 2007-08-11