OpenGLを除き、これらのライブラリを使用したことはありませんが、あなたが行ったように、ウィキペディアのページを読んで推測しようとします。
あなたはMesaについて正しいようです。追加情報は次のとおりです。
「Xウィンドウシステムは、ネットワーク化されたコンピューターの基本GUIを提供するコンピューターソフトウェアシステムおよびネットワークプロトコルです。ハードウェアアブストラクションレイヤーを作成します。」
「GLXを使用すると、OpenGLを使用するプログラムは、X Window Systemが提供するウィンドウ内で実行できます
。GLXは、3つの部分で構成され
ます。
- OpenGL機能を提供するAPI。レンダリングコマンド-クライアントからレンダリングコマンドを受け取り、インストールされたOpenGLライブラリに渡すXサーバーの拡張機能。
クライアントとサーバーが同じコンピューターで実行されており、高速3Dグラフィックカードが利用可能な場合、前の2つのコンポーネントはDRIによってバイパスされます。クライアントプログラムはグラフィックハードウェアに直接アクセスできます。」
「ダイレクトレンダリングインフラストラクチャ(DRI)は、Xサーバーを介してデータを渡すことなく、ユーザーアプリケーションがビデオハードウェアにアクセスできるようにするためにX Window Systemで使用されるインターフェイスです。」
「Open Inventorは、OpenGLのプログラミングの上位層を提供するために設計されたC ++ 3DグラフィックスAPIです」
物事を簡単にするために、これらの各APIの入り口と出口で発生するデータ(およびコマンド)の単純化されたフローを想像してみましょう。最初に、コンピューターから実行するアプリケーションプログラム(コンパイル済みコード)があります。最後に、画面に表示される画像があります。
これらの質問への回答を控える場合がいくつかあり
ます。-グラフィック機能を処理するために、コンピューターにグラフィックカード(GPU)またはCPUのみがありますか?
-アプリケーションはx-windowシステムのウィンドウに埋め込まれていますか?
-xウィンドウシステムを使用している場合、「xサーバー」はコンピューターまたはネットワーク上の他のコンピューターで実行されていますか?
GPUがある場合はGPU用のドライバーがあり、ソフトウェアレンダリング用のMesaがあると仮定します)。
最初のシナリオ:X Window Systemを使用せずにOpenInventorで作成されたグラフィックアプリケーションを実行し、グラフィックカードがない場合。プログラムの流れは次のようになります。
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Mesa
↓ (implemented OpenGL functions to be run on the CPU)
[Probably] Operating System rendering API
↓
3D Images on your screen
ここで起こることは「ソフトウェアレンダリング」と呼ばれます。グラフィックコマンドは、グラフィックハードウェアではなく、通常はソフトウェアを実行するプロセッサである通常のCPUによって処理されます。
2番目のシナリオ:上記と同じ条件で、グラフィックカードがあることを想像してください。フローは次のようになります。
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Proprietary Drivers
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
今起こっていることは「ハードウェアアクセラレーション」と呼ばれ、通常は最初のシナリオよりも高速です。
3番目のシナリオ:今、私が読んだいくつかのウィキペディアの行に基づいて、X Window Systemのフローを紹介します。
グラフィックハードウェアとAPIについてはしばらく忘れてください。フローは次のようになります。
Your application (X Window System sees it as an "X Client")
↓ (sends requests defined by the X Window System Core Protocol)
X Server
↓ (convert your request to graphic commands)
[Probably] Operating System rendering API
↓
Windows or 2D images on your screen
X Window Systemを使用する場合、画面とアプリケーションを実行するコンピューターは「直接」接続されない場合がありますが、ネットワーク経由で接続される場合があります。
4番目のシナリオ:前の例のXクライアントアプリケーションに派手な3Dグラフィックレンダリングを追加するとします。X Window Systemはもともとこれを行うことができないか、少なくともOpenGL API関数と同等の機能を実行するには複雑なコードを必要とするように思えます。
幸いなことに、GLXを使用してOpenGLコマンドのサポートをシステムに追加できます。あなたは今持っています:
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
X Server with the GLX extension
↓ (convert your request to OpenGL commands)
OpenGL
↓ (redirects function calls to implementation defined by)
...
これで、最初のシナリオで最後の矢印を「OpenGL」の後の矢印に再接続できます。画面に3D画像を取得できます。
最後に、私がDRIについて理解していると思うことについて:
MesaがGPUにアクセスできるようにするため、最初のシナリオのフローを次のように変更します:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
また、GLXを使用する場合、サーバーとクライアントが同じコンピューター上にあり、GPUがあるという条件を考えると、フローを短絡させるようです。その場合、4番目のシナリオのグラフは次のようになります。
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
DRI
↓ ("catches" OpenGL commands and converts them to GPU commands)
Graphic Card
↓
3D Images on your screen
それでおしまい !
ここで、私はUnix環境の専門家ではないことに留意してください。したがって、最善のアドバイスは、これらの各APIのドキュメントを調べて、APIの機能を正確に把握することです。
前のチャートを単一のチャートに結合すると、物事が理解しやすくなります。私はこれをあなたへのエクササイズとしてしましょう!