この節ではアプリケーションを libGL.so とリンクする方法と、本当に 3D アクセラレーションが使えているかを確認する方法を説明します。
OpenGL のプログラムを書いた場合は XFree86 4.0 に用意されている libGL.so.1.2 とリンクしなければなりません。libGL.so.1.2 ライブラリには、 間接/リモートレンダリングを行うための GLX プロトコルエンコーダや ハードウェアドライバにアクセスするための DRI コードが含まれています。 Mesa や Utah GLX プロジェクトのような他の入手先から手に入れた libGL.so を使わないように特に注意してください。
特別な方法で構築しなければ、libGL.so ライブラリには 3D ハードウェア のドライバコードは全く含まれません。libGL.so はドライバコードを内部に持 つのではなく、適切な 3D ドライバを初期化の時に動的にロードします。
簡単な OpenGL プログラムのほとんどは GLUT ライブラリや GLU ライブラリも 使っています。これらのライブラリのソースは後述の「リソース」節で紹介しま す。
簡単な GLUT/OpenGL プログラムな以下のようにしてコンパイルとリンクができ ます:
gcc program.c -I/usr/local/include -L/usr/local/lib -L/usr/X11R6/lib -lglut -lGLU -lGL -o program
-I
オプションは GL/glut.h (もしかすると GL/gl.h と GL/glu.h)
ヘッダファイルを探す場所を指定するために使います。
-L
オプションは libglut.so, libGLU.so, X ライブラリのある場所を指定
します。
-lglut -lGLU -lGL
引き数は、アプリケーションを GLUT, GLU, GL
ライブラリにリンクすることを指定します。
シェル上で単に「./プログラム」と入力すればプログラムが動作するはずです。
gears: error in loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directoryのようなエラーにになった場合には、 libGL.so.1 ファイルが正しい場所にないという意味です。問題解決に関する節 を見てください。
glxinfo は使われている libGL のバージョンや DRI ベースのドライバの
バージョンを調べるための便利なプログラムです。単に glxinfo
を実行し
て OpenGL のベンダ、レンダラ、バージョンを調べてください。
出力結果には
OpenGL vendor string: Precision Insight, Inc. OpenGL renderer string: Mesa DRI Voodoo3 20000224 OpenGL version string: 1.2 Mesa 3.3 beta
や
OpenGL vendor string: Precision Insight, Inc. OpenGL renderer string: Mesa GLX Indirect OpenGL version string: 1.2 Mesa 3.3 betaのような行が含まれているはずです。
前者の例は 3dfx ドライバが Voodoo3 ハードウェアを動かしていることを示し ています。後者の例は、ハードウェアドライバが見つからなかったため、 間接、アクセラレーションなしのレンダリングが使われていることを示していま す。
直接レンダリングが使われるはずなのに間接レンダリングが使われている場合に は、問題解決に関する節を見てください。
glxinfo
は利用可能な GLX 拡張ビジュアルを全てリスト表示します。
これを見れば、どのビジュアルがデプスバッファ、ステンシルバッファ、
加算バッファを持っているのかを調べることができます。
libGL.so ライブラリが認識する環境変数が 3 つあります。普通はいずれも設定
する必要はありません。シェルに csh または tcsh を使っているなら
setenv 変数名 値
で環境変数を設定してください。そうでない場合、
sh や bash を使っているなら export 変数名=値
とします。
LIBGL_DEBUG
, この変数を定義すると libGL.so はエラーメッセージと
診断メッセージを表示します。何か問題が起きた時の解決に役立ちます。LIBGL_ALWAYS_INDIRECT
, この変数を定義すると libGL.so はハードウェア
アクセラレーションではなく必ず間接レンダリングを使うようになります。
レンダリングのエラーを切り分ける時に便利です。LIBGL_DRIVERS_DIR
を使うと 3D ドライバを探すディレクトリの
デフォルト値を上書きできます。普通に XFree86 をインストールすると、
3D ドライバは /usr/X11R6/lib/modules/dri/ にあるはずです。この環境変数を
指定すると別のディレクトリを指定できます。setuid されたプログラムに対し
てはこの機能は無効となる点に注意してください。Mesa ベースのドライバ(これは前述のドライバのほとんどが該当します)は、
既存の Mesa の環境変数の多くも見ます。
MESA_DEBUG
, MESA_INFO
変数がこれに該当します。