DRI ユーザガイド : 3D アクセラレーションの利用
Previous: X サーバの起動
Next: 一般的な問題の解決

6. 3D アクセラレーションの利用

この節ではアプリケーションを libGL.so とリンクする方法と、本当に 3D アクセラレーションが使えているかを確認する方法を説明します。

6.1. libGL.so

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 ライブラリも 使っています。これらのライブラリのソースは後述の「リソース」節で紹介しま す。

6.2. OpenGL プログラムのコンパイルとリンク

簡単な 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 ライブラリにリンクすることを指定します。

6.3. OpenGL プログラムの実行

シェル上で単に「./プログラム」と入力すればプログラムが動作するはずです。

        gears: error in loading shared libraries: libGL.so.1: cannot
        open shared object file: No such file or directory
        
のようなエラーにになった場合には、 libGL.so.1 ファイルが正しい場所にないという意味です。問題解決に関する節 を見てください。

6.4. glxinfo

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 拡張ビジュアルを全てリスト表示します。 これを見れば、どのビジュアルがデプスバッファ、ステンシルバッファ、 加算バッファを持っているのかを調べることができます。

6.5. 環境変数

libGL.so ライブラリが認識する環境変数が 3 つあります。普通はいずれも設定 する必要はありません。シェルに csh または tcsh を使っているなら setenv 変数名 値 で環境変数を設定してください。そうでない場合、 sh や bash を使っているなら export 変数名=値 とします。

  1. LIBGL_DEBUG, この変数を定義すると libGL.so はエラーメッセージと 診断メッセージを表示します。何か問題が起きた時の解決に役立ちます。
  2. LIBGL_ALWAYS_INDIRECT, この変数を定義すると libGL.so はハードウェア アクセラレーションではなく必ず間接レンダリングを使うようになります。 レンダリングのエラーを切り分ける時に便利です。
  3. LIBGL_DRIVERS_DIR を使うと 3D ドライバを探すディレクトリの デフォルト値を上書きできます。普通に XFree86 をインストールすると、 3D ドライバは /usr/X11R6/lib/modules/dri/ にあるはずです。この環境変数を 指定すると別のディレクトリを指定できます。setuid されたプログラムに対し てはこの機能は無効となる点に注意してください。

Mesa ベースのドライバ(これは前述のドライバのほとんどが該当します)は、 既存の Mesa の環境変数の多くも見ます。 MESA_DEBUG, MESA_INFO 変数がこれに該当します。


DRI ユーザガイド : 3D アクセラレーションの利用
Previous: X サーバの起動
Next: 一般的な問題の解決