TOTAL:214, TODAY:185

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/GLglut.h, freeglut.h, freeglut_ext.h, freeglut_std.hができていればOKです。ちなみに、ライブラリは/usr/liblibglut.so.3.8としてインストールされます。

GLEWのインストール

GLEWライブラリは、次のサイトからソースファイルでダウンロードします。

ソースファイルには、ZIPとTGZがあります。私はTGZファイルをダウンロードし、次のようにインストールしました。

# tar zxvf glew-1.4.0-src.tgz
# cd glew
# make
# make install

これにより、/usr/include/GLglew.h, glxew.h, wglew.hがインストールされます。また、ライブラリ本体は/usr/liblibGLEW.so.1.4.0としてインストールされます。また、使用可能なGL拡張は、次のコマンドで確認することができます。

# glewinfo

Linux用サンプルプログラム

とりあえず、以前紹介した二つのサンプルglsimpletorusglewを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_controlglXSwapIntervalSGIの説明が記載されています。Windows用のwglSwapIntervalEXTとは異なり、引数に0を渡すことでVBlankを無視する機能はないようです。

最新の7件

OpenGL

電子工作

玄箱HG

ホームページ

日記

Copyright (C) 2007 Arakin , All rights reserved.