FedoraでOpenGLを使う
最近、Fedora7がリリースされたので、FedoraでOpenGLを使用する方法を紹介します。NVIDIAのグラフィックスボードを使用している場合、Linuxをインストールしただけでは、ハードウェアアクセラレートされないため、NVIDIAドライバーが必要です。NVIDIAのドライバーを直接入れる方法もありますが、カーネルがアップグレードされた時は、再度インストールが必要であり、まれにドライバーのインストールに失敗することもあるので面倒です。ここでは、livnaが提供しているドライバーを使用する方法を紹介します。livnaはNVIDIA用のカーネルモジュールやXの設定ファイルを提供をしており、yumを使用して手軽にアップグレードできます。
NVIDIAドライバのインストール
まず、次のようにFedora7用のlivnaのyumレポジトリをインストールします。Fedora6を使用している方は、livna-release-7.rpmをlivna-release-6.rpmにすればOKです。
# rpm -ihv http://rpm.livna.org/livna-release-7.rpm
これにより、/etc/yum.repo.dに、livna.repo, livna-devel.repo, livna-testing.repoの3種類のファイルができます。livna.repoファイルを開き、[livna]レポジトリがenabled=1になっていることを確認します。
# less /etc/yum.repo.d/livna.repo
[livna]
name=Livna for Fedora Core $releasever - $basearch - Base
baseurl=
http://rpm.livna.org/fedora/$releasever/$basearch/
: : 途中略 : :
enabled=1 <--- enabled=1になっていることを確認
: : 途中略 : :
[livna]以外は、デバッグ用やテスト用なので、enabled=0の方が無難です。rpmでインストールしただけならば、[livna]だけがenabled=1になっていると思います。この後、NVIDIAのドライバーとカーネルモジュールをyumでインストールします。
# yum install xorg-x11-drv-nvidia
この後、一旦ログアウトして、ログイン画面が表示される際に、NVIDIAのロゴマークが表示されれば、ドライバーが有効になっています。もし何らかの不具合でうまくいかない場合は、rootユーザで次のようにすれば、元の設定に戻るみたいです。やったことないけど。。。
# nvidia-config-display disable
GLUTのインストール
GLUTは、次のコマンドでインストールできます。
# yum install freeglut-devel
これにより、/usr/include/GLにglut.h, freeglut.h, freeglut_ext.h, freeglut_std.hができていればOKです。ちなみに、ライブラリは/usr/libにlibglut.so.3.8としてインストールされます。
GLEWのインストール
GLEWライブラリは、次のサイトからソースファイルでダウンロードします。
ソースファイルには、ZIPとTGZがあります。私はTGZファイルをダウンロードし、次のようにインストールしました。
# tar zxvf glew-1.4.0-src.tgz # cd glew # make # make install
これにより、/usr/include/GLにglew.h, glxew.h, wglew.hがインストールされます。また、ライブラリ本体は/usr/libにlibGLEW.so.1.4.0としてインストールされます。また、使用可能なGL拡張は、次のコマンドで確認することができます。
# glewinfo
Linux用サンプルプログラム
とりあえず、以前紹介した二つのサンプルglsimpleとtorusglewをLinux用に移植しました。漢字コードは、UTF-8です。ダウンロード後、次のようなコマンドで展開、及びコンパイルが可能です。
# tar zxvf glsimple.tar.gz # cd glsimple # make # ./glsimple
動かせば、次のような絵が表示されると思います。


但し、glutSwapBuffersがバグっているようで、初期状態でのVBlank同期が正しく機能していないようです。次のように描画開始前に、glXSwapIntervalSGIを呼ぶことで、バグを回避しています。
int main(int argc, char *argv[])
{
GLenum err;
glutInit(&argc, argv);
: : 途中略 : :
if (glxewIsSupported("GLX_SGI_swap_control"))
{
glXSwapIntervalSGI(1);
}
glutMainLoop();
}
上記のglxSwapIntervalSGIを最初にコールしなくても、glutSwapBufferでVBlank同期を正しく機能させる方法を見つかりました。~/.bashrcに下記の2行を追加すれば、上の太字部分をコールする必要はないみたいです。但し、現状のサンプルは、今のところ太字の部分が入ったままです。
__GL_SYNC_DISPLAY_DEVICE="CRT" __GL_SYNC_TO_VBLANK=1
理由はよく分かりませんが、~/.bash_profileでは上記環境変数が設定されないため、駄目なようです。
GLEWで使用可能なLinux用GL拡張の説明は次のサイトにあります。
GLX拡張を見ると、GLX_SGI_swap_controlにglXSwapIntervalSGIの説明が記載されています。Windows用のwglSwapIntervalEXTとは異なり、引数に0を渡すことでVBlankを無視する機能はないようです。
最新の7件
OpenGL
電子工作
玄箱HG
- ClamAVのアップデート
- Smartyも入れてみる
- etchでPHP4->PHP5
- etchでのSamba設定
- etchでのメール設定
- 玄箱HGのetch化
- Webdruidでログ解析
- PEARも入れてみる
- 玄箱WEBのUTF-8化
- phpMyAdminでMySQL
- postmasterの変更
- ウィルスメール対策
- SPAMメール対策
- メールサーバ(IMAP)
- メールサーバ(Postfix)
- 猫にXOOPS
- PHPも入れてみる
- MySQLを入れてみる
- Subversion導入
- WebDav導入
- Apacheのrewrite機能
- Apacheディレクトリ設定
- Apache1.3->2.0
- ddclientの設定
- 静かな玄箱
- ユーザ追加