ARGB visual
4バイト目がアルファチャンネルになっている32ビットのX11ビジュアル。ピクセル単位でウィンドウを半透明にできるが、それを気にかけるコンポジタが動いていることが条件になる。
X11のコアプロトコルは透過について何も知らない。ビジュアルはピクセル値がどのように色になるかを記述するもので、24ビットでは全ビットが赤、緑、青に使われている。XRenderが加えたのはARGB32というピクチャフォーマットで、32ビット値の上位8ビットをカバレッジとして読む。以来サーバーは、通常のものと並べて深度32のTrueColorビジュアルを提示している。このビジュアルで作ったウィンドウはアルファチャンネルを持つが、2004年にCompositeが描画を別のピックスマップに移すまで、誰も使わなかった。そこからは、コンポジタがアルファを読み、背後にあるものとウィンドウをブレンドできる。Linuxの影、フェード、半透明ターミナルはすべてこの経路をたどる。
落とし穴はよく知られている。32ビットのウィンドウは、そのビジュアル用の専用カラーマップと明示的なborder_pixelを付けて作らなければ、サーバーがBadMatchを返す。何世代ものプログラマーが痛い目に遭ってきたエラーだ。コンポジタが動いていなければアルファは完全に無視され、ウィンドウにはバッファにたまたま入っているもの、たいていは黒が表示される。GTKは2005年にgdk_screen_get_rgba_colormap、Qtは2009年にWA_TranslucentBackground属性を追加し、正しいビジュアルを自動で選ぶようにした。ウィンドウ全体をフェードさせたいだけなら、こうした手間をすべて飛ばし、xcompmgrとCompizの非公式な慣習である_NET_WM_WINDOW_OPACITYプロパティを使えばよい。これはEWMHに明文化されたことがないが、以来すべてのコンポジタが従っている。