Full screen color management



GNOME 3.2 is polishing up nicely, but some of us have twitchy fingers
and are looking forward to 3.4.

One of my goals is to complete the desktop color management work, and
bring OSX-style full screen color management to the GNOME desktop.
This means doing full screen color management on the GPU, probably
using a GLSL shader. If hardware shaders are not supported, then we
can fall back to just uploading the VCGT gamma ramps like we're doing
in 3.2.

So, what does FSCM actually bring us? On newer LED hardware you have a
much larger gamut (range of colors) and so artwork designed for a
1990's style CRT gamut is going to make all the colors painful and
give everyone headaches. It allows us to make dual monitors look the
same, and even allows us to make the colors more accurate on shitty
TFT panels. It means we can have full screen movies with the right
colors without everything looking either overly saturated or washed
out.

It also means that we have to think about;

* Word processing applications can just ignore color management
completely and just output everything as sRGB which gets converted to
something sane (which doesn't make your eyes bleed) by mutter.

* Full screen power applications that care, e.g. blender, can opt-out
the whole window and get to do all the color management stuff
themselves.

* Games running full screen just get to tell the compositor to
naff-off and let the game use all the texture memory (each loaded
color profile is currently stored as 16x16x16 which is ~3Mb).

* Mixed content applications like Firefox only opt out regions of the
window, e.g. when browsing Flickr, and only one image is color managed
and the rest of the page is sRGB.

This is basically what OSX allows you to do. I appreciate bringing
this to Linux/GNOME is no mean feat, but all of the groundwork was
done for 3.2. I also want to do something that's easy to use, so
rather than having blender do some archane thing with some random
library we just tell it to use
gtk_window_enable_color_management(window, FALSE); or the alternative
in Qt.

So, basically, is this something we want? I've got some PoC patches
for mutter but they are just hacks that show we can do FSCM without
hurting UI latency or without burning loads more power. If this is
something we want, then we have to decide on the integration points
for GTK and mutter and how do do the opt-out of windows and regions.

Ideas and feedback welcome. Thanks.

Richard


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]