ポールの答えは少し専門用語が多いかもしれないと思うので、ここに私の試みがあります.
多数のディスプレイ デバイス (VGA モニター、コンポジット ビデオ、HDMI など) があり、これらはハードウェアで直接処理される傾向があります。専用のグラフィック プロセッサ (GPU) で。
アプリケーションがこのハードウェアと直接通信するのではなく、ドライバー(オペレーティング システム カーネル内にある) を使用します。ハードウェアごとに異なるドライバーが必要ですが、OpenGL などの同じインターフェイスを使用して、すべてのドライバーに命令を与えることができます。
App --OpenGL--> Driver --> Hardware --VGA--> Screen
もちろん、ほとんどの標準と同様に、実際にはさまざまな標準がたくさんあります。OpenGL は、ほとんどのオペレーティング システムのほとんどのドライバでサポートされています。その「OpenGL ES」サブセットは携帯電話でうまく動作し、OpenGL 命令に基づいて画像を作成できる「ソフトウェア ドライバー」があります (実際の OpenGL サポートよりもはるかに遅いですが、すべてのドライバーで画像を描画できます)。OpenGL の大きな競合相手は DirectX ですが、これは Windows と XBox でしか機能しません。
OpenGL へのレンダリングは、フルスクリーン 3D ゲームのようなものには問題ありませんが、*NIX グラフィックス システム (「X」として知られている) は、それに加えて、複数のアプリケーションを同じ画面に描画する機能と、ネットワークを介して描画する機能という 2 つの主要な機能を提供します。これを行うには、サーバープロセスが画面に描画し、アプリケーション (「クライアント」) が「X11 プロトコル」を使用してこのサーバーと通信します (「11」は単なるバージョン番号です)。
App A ----------OpenGL-------+
|
App B --+ |
| |
+--X11--> X server --+----> Driver --> Hardware --> Screen
|
App C --+
|
...network ...
|
App D --+
X は OpenGL よりも長く使用されているため、ドライバーに直接アクセスする傾向がありますが、それはそれほど重要ではありません。
X11 プロトコルは、アプリケーションが描画を許可されているウィンドウを作成することによって機能します。X は、これらのウィンドウを画面上に配置したり、それらを重ねたりすることができます。OpenGL を使用するアプリケーションは、コマンドを X を「パススルー」してドライバに直接渡すことができ、X は他のアプリケーションと同様にウィンドウを配置します (これは X11 のネットワーク機能をバイパスするため、ネットワーク経由では機能しません)。
通常、ウィンドウマネージャーと呼ばれる、ウィンドウの配置、非表示/表示、および閉じる専用のアプリケーションがあります。必要に応じて、ウィンドウ マネージャーは、タイトル バーを描画したり、ハンドルのサイズを変更したりできるように、他のウィンドウの周囲にいくつかの薄いウィンドウを作成する場合があります。
X11 プロトコルには、形状の描画、フォントのレンダリングなどのコマンドが含まれており、xterm
プログラムやtwm
ウィンドウ マネージャーなど、これらを直接使用するアプリケーションがあります。
xterm --+
|
+--X11--> X --> Driver --> ...
|
twm --+
ただし、最新のアプリケーションのほとんどは、生の X11 は退屈すぎると感じています。線や形状を描画する代わりに、ウィジェット全体(ボタン、メニュー、アイコンなど) を描画します。これを行うために、ツールキットが作成されました。最も有名な 2 つは、QtとGTK+ (GIMP ツール キット、もともと GIMP 用に作成されたため) と呼ばれます。他には、Motif、Lesstif、ETK、Tk、FLTK などがあります。ツールキットにボタンの描画を依頼すると、ツールキットはボタンの描画に必要なすべての X11 コマンドを送信します。さらに、サイズと位置を処理し、何かが重なっている場合は描画を更新してから移動し、コードに通知します。ボタンがクリックされ、一部のツールキットでは、ウィジェットの外観を変更することもできますテーマ。一部のツールキットはクロスプラットフォームでもあるため、Linux では X11 コマンドを送信し、Windows や OSX などでは異なるコマンドを送信します。
Rhythmbox --> GTK+ --+
|
GIMP --> GTK+ --+
|
Amarok --> Qt --+--X11--> X --> Driver --> ...
|
Skype --> Qt --+
|
aMSN --> Tk --+
一部のツールキットは、他のツールキットよりも優れた機能を提供します。たとえばwxWidgets
、Qt で描画を行い (Linux では、Windows と OSX は「ネイティブ」)、XUL
Firefox で使用され、GTK+ を使用して描画を行います。
Audacity --> wxWidgets --> Qt --+
|
Firefox --> XUL --> GTK+ --+--X11--> X --> Driver --> ...
|
GIMP ----------------> GTK+ --+
言及すべき重要な点は、X11 の形状およびテキスト描画コマンドは、非常に原始的であるため、実際にはあまり使用されないということです。多くのツールキットは実際にウィジェットを画像としてレンダリングし、X にそれらの画像を描画させます。新しいWaylandシステムは、描画コマンドを捨て、アプリケーションとツールキットが OpenGL を直接使用できるようにすることで、X を置き換えようとしています。
GNOME や KDE などのさまざまなデスクトップ環境と、それらが連携するかどうかについて言及されました。これらは基本的に、連携して動作するように作成されたアプリケーションの大規模なコレクションです。GNOME アプリケーションはすべて GTK+ で作成されているのに対し、KDE アプリケーションはすべて Qt で作成されています。
上記の図の矢印を見ると、各 Qt アプリケーションが X と個別に通信し、各 GTK+ アプリケーションが X と個別に通信する、などがわかります。Qt と GTK+ アプリケーションが並行して動作できるだけでなく、X に関する限り、それは 2 つの Qt アプリケーションまたは 2 つの GTK+ アプリケーションと同じです!
デスクトップを混在させるときに心配する唯一のことは、2 つのアプリケーションが同じ仕事をするために競合しているかどうかです。たとえば、2 つのウィンドウ マネージャーまたは 2 つのデスクトップ パネルを実行しようとしている場合です。これはグラフィックやツールキットなどの問題ではないことに注意してください。同じツールキットで構築された 2 つのデスクトップを使用すると同じ問題が発生するためです (たとえば、lxpanel と gnome-panel は両方とも GTK+ で作成されていますが、それでもお互いのやり方で!)