はじめに |
CPUや3Dグラフィックスアクセラレータの高速化により、MS-Windows 95,98の世界ではQuake, Unrealといった3Dアクションゲームが大人気です。このような3Dグラフィックス環境はMS-Windowsだけのものではありません。LinuxにおいてもMesaを用いることで実現することが出来ます。あなたもMesaによりLinux3Dグラフィックス環境を構築してみませんか?
目次 |
Mesaとは? |
Mesaとは、特別なハードウェアを利用せずに、ソフトウェア(CPU演算)だけでOpenGL APIを実現するライブラリです。OpenGLのライセンスを受けていませんが、ほとんどのOpenGL APIを実装しています。
また、GNU GPLに基づき配布されているため、多くの方が使用されており、対応するプラットフォームもLinuxを含むUNIX/X11, Amiga, Apple Macintosh, BeOS, NeXT, OS/2, MS-DOS, VMS, MS-Windows 9x/NTとさまざまです。
MesaはソフトウェアだけでOpenGL APIを実現出来ますが、ハードウェアの機能を利用する実装も行われており、3Dグラフィックスアクセラレータのハードウェア演算機能により高速に3Dグラフィックスを描画することが可能です。
Voodooシリーズの3Dグラフィックスアクセラレータのハードウェア演算機能を利用するために、Glideというライブラリが3Dfx Interactive社からLinux用に公開されています。また、他にもS3社からS3ViRGEシリーズのハードウェア演算機能を利用するs3d sdkが公開されています。
Glideとは? |
Glideとは、3Dfx Interactive社によって製造されたVoodooチップセットを制御する専用のデバイスドライバと3Dfx APIライブラリです。MS-DOS、MS-Windows 9x/NTとApple Macintosh用に開発、実装され、Daryll StraussによってLinuxに移植されました。
このデバイスドライバと3Dfx APIライブラリを利用するようにMesaをコンパイルすることで、Voodoo Graphics, Voodoo2, Voodoo3といった3Dグラフィックスアクセラレータのハードウェア演算機能を利用することが出来ます。
それでは、3Dfx Interactive社の3DグラフィックスアクセラレータVoodoo2を用いて、3Dグラフィックス環境を構築してみましょう。
筆者のハードウェア環境は、Cerelon 300A、メモリ128MBytes、Riva128チップセットの2D用グラフィックスアクセラレータ、そして今回の主役であるVoodoo2チップセットの3Dグラフィックスアクセラレータです。
このハードウェア環境でPlamo Linux 1.3, Vine Linux 1.0betaの2つのディストリビューションのLinuxを導入してMesaのコンパイルを行いました。コンパイルに使用したMesaのバージョンは安定版の3.0です。安定版以外にもbeta版としてバージョン3.1beta2が現在公開されています。
Plamo Linux 1.3によるMesa-3.0のコンパイル |
今回紹介するこのPlamo Linux 1.3によるMesa-3.0のコンパイル方法は、alienツールのrpm2cpioを使用しrpm形式のファイルを展開するため、Debian, Slackware等のディストリビューションでも参考になると思います。
尚、以下に紹介するMesa-3.0のコンパイルは、rootユーザ権限で行って下さい。
今回は、雑誌Software Design'98年12月号付録CDROMのalienツールを使用しました。CDROMが/cdromディレクトリにmountされているものとして、alien603.tgz, alienext.tgzをインストールします。
# cd /cdrom/contrib/Converter # installpkg alien603.tgz # installpkg alienext.tgz
この記事の最後に紹介している情報源1, 2から以下のファイルをダウンロードして下さい。これらのファイルを/usr/local/srcディレクトリに置きます。尚、今回は筆者の環境に合わせVoodoo2用のファイルを準備しました。他の環境(Voodoo Graphics, Voodoo Rush等)の方は、それ用のファイルを準備して下さい。
MesaDemo-3.0.tar.gz // Mesaデモ MesaLib-3.0.tar.gz // Mesaライブラリ Device3Dfx-1-3.src.rpm // 3Dfxデバイスドライバ Glide_V2-2.51-3.i386.rpm // Voodoo2用Glideライブラリ ver 2.51 Glide2x_SDK-2.1-3.i386.rpm // Glide開発ツール群(注)今回用意しましたVoodoo2用Glideライブラリ、デバイスドライバは現時点では多少古くなっていますので、出来る限り最新版を準備して下さい。
まずはVoodoo2用Glideライブラリ、デバイスドライバをインストールします。
# cd / ; rpm2cpio /usr/local/src/Glide_V2-2.51-3.i386.rpm | cpio -i --make-directories # cd /usr/tmp # rpm2cpio /usr/local/src/Device3Dfx-1-3.src.rpm | cpio -i --make-directories # tar xzvf Device3Dfx-2.0.tar.gz # make # cp 3Dfx.o /lib/modules/`uname -r`/misc # mknod /dev/3Dfx c 107 0 # cd /usr ; rpm2cpio /usr/local/src/Glide2x_SDK-2.1-3.i386.rpm | cpio -i --make-directories
さらに/etc/conf.modulesファイルに以下の記述を追加します。/etc/conf.modulesファイルが存在しない場合は、新規に作成して下さい。
alias char-major-107 3Dfx
Mesa-3.0を展開します。
# cd /usr/local/src # tar xzvf MesaDemo-3.0.tar.gz # tar xzvf MesaLib-3.0.tar.gzREADME, README.3Dfxファイルをよく読んでから、自分の環境に合わせてMesa-3.0をコンパイルして下さい。筆者の環境はVoodoo2なので、make linux-386-opt-V2-glideとしてコンパイルしました。
# cd /usr/local/src/Mesa-3.0 # make linux-386-opt-V2-glide
3Dfxのデモfireを起動します。この時X Window Systemはstart -- -bpp 16とカラーパレットを16bitsに指定して起動して下さい。尚、以下のコマンドはXターミナル(kterm等)上で行って下さい。
# cd /usr/local/src/Mesa-3.0/3Dfx/demos # export LD_LIBRARY_PATH=/usr/local/src/Mesa-3.0/lib # export MESA_GLX_FX=fullscreen # ./fireこれが正常に起動すれば、成功です。
尚、ここで環境変数を以下のように設定するとフルスクリーンでなく、X Window System上のウィンドウとして起動させることが出来ます。しかし、この場合の描写速度はフルスクリーン時に比べ遅くなります。
# export MESA_GLX_FX=window # export SST_VGA_PASS=1 // Voodoo2の場合は export SSTV2_VGA_PASS=1 # export SST_NOSHUTDOWN=1 // Voodoo2の場合は export SSTV2_NOSHUTDOWN=1
root以外のユーザでもMesa-3.0上で起動するアプリケーションを動作させるために以下のコマンドを実行しておきましょう。
# chmod 666 /dev/3Dfx
Vine Linux 1.0betaによるMesa-3.0のコンパイル |
Vine Linux 1.0betaを使用した場合のMesa-3.0のコンパイル方法について紹介します。Vine Linuxは海外で最も広く利用されているRedHat Linux 5.x(Vine Linux 1.0/1.1ではRedHat Linux 5.2)がベースになっています。このため、RedHat Linux, Turbo Linux等のディストリビューションでも参考になると思います。
今回も前回(Plamo Linux 1.3によるMesa-3.0のコンパイル)と同じようにMesa-3.0、Voodoo2用Glideライブラリ等のファイルを準備しました。今回導入したファイルは以下の通りです。
MesaDemo-3.0.tar.gz // Mesaデモ MesaLib-3.0.tar.gz // Mesaライブラリ Device3Dfx-2-1-2.src.rpm // 3Dfxデバイスドライバ Glide_V2-2.53-1.i386.rpm // Voodoo2用Glideライブラリ ver 2.53 Glide2x_SDK-2.1-3.i386.rpm // Glide開発ツール群(注)Voodoo2用Glideライブラリは、現在glibcバージョンのGlide_V2-2.53-1.i386.glibc.rpmも公開されています(筆者はGlide_V2-2.53-1.i386.glibc.rpmの動作確認を行っていません)。
これらのファイルを/usr/local/srcディレクトリに置きます。
まずはVoodoo2用Glideライブラリ、デバイスドライバをインストールします。インストール方法についてはここに詳細があります(英語です)。
# cd /usr/local/src # rpm -Uvh Glide_V2-2.53-1.i386.rpm # rpm --rebuild Device3Dfx-2-1-2.src.rpm # rpm -Uvh /usr/src/redhat/RPMS/i386/Device3Dfx-2-1-2.i386.rpm # rpm -Uvh Glide2x_SDK-2.1-3.i386.rpm
Mesa-3.0を展開し、コンパイルします。
# tar xzvf MesaDemo-3.0.tar.gz # tar xzvf MesaLib-3.0.tar.gz # cd Mesa-3.0/ # make linux-386-opt-V2-glide
# cd 3Dfx/demos/ # export LD_LIBRARY_PATH=/usr/local/src/Mesa-3.0/lib # export MESA_GLX_FX=fullscreen # ./fire
Vine Linux 1.0betaでQuake3デモをインストール |
ゲームファンにはおなじみの3DアクションゲームQuakeのシリーズ三作目Quake3のデモを現在ダウンロードすることが出来ます。このQuake3デモをVine Linux 1.0betaにインストールしてみましょう。
今回使用したディストリビューションはVine Linux 1.0betaですので、ここから以下のrpm形式のファイルを入手します(23MBytesとかなりな大きさですので、こころしてダウンロードしましょう)。
q3test-1.05-glibc-9.i386.rpm
以下のコマンドを実行して下さい。このコマンドを実行すると/usr/local/games/q3testディレクトリにQuake3デモがインストールされます。また、インストールされたlibMesaVoodooGL.so.3.1ライブラリを認識させるため、/usr/libディレクトリにコピーします。
# rpm -Uvh q3test-1.05-glibc-9.i386.rpm # cp /usr/local/games/q3test/libMesaVoodooGL.so.3.1 /usr/lib
README.Q3Testファイルを参考に環境変数を設定して、Quake3デモを起動しましょう。
# export LD_LIBRARY_PATH=/usr/local/src/Mesa-3.0/lib # export MESA_GLX_FX=fullscreen # export FX_GLIDE_SWAPINTERVAL=0 # cd /usr/local/games/q3test # ./linuxquake3この度のQuake3のデモ発表をきっかけに、nVidia Riva128シリーズのハードウェア3Dグラフィックスアクセラレーションのサポートが発表されました。他にMatrox G200でのドライバの開発も進んでいるようです。
MS-Windows95のOpenGL環境がQuakeによって大幅に改善されたように、Quake3といったキラー3Dアプリケーションソフトにより、Linuxにおいてのハードウェアレベルでの3Dグラフィックスアクセラレーション環境についても着々と整いつつあります。
Quake3に続く3Dアプリケーションソフトが登場することで、さらにLinux3Dグラフィックス環境が整備されることを切に希望します。
Vine Linux 1.1によるMesa-3.0のコンパイル(Riva128編) |
nVidia社は、nVidia Riva128シリーズ用のXFree86およびMesa/GLXのデバイスドライバを公開しました。この度公開されたGLXモジュールとXサーバは、最新版のXFree86 3.3.3.1に対応しています。このため今回は、Linuxディストリビューションとして、Vine Linux 1.1を準備しました(筆者の場合は、Vine Linux 1.0betaからVine Linux 1.1へupgradeさせました)。
それでは、nVidia Riva128シリーズでのハードウェア3Dグラフィックスアクセラレーション環境を構築しましょう。
(残念ながら現在公開されているQuake3デモq3test-1.05-glibc-9.i386.rpmは、nVidia Riva128で動作させることは出来ませんでした)
Mesa-3.0は前回コンパイルしたものを使用します。Riva128用デバイスドライバは、ここから準備しました。今回導入したファイルは以下の通りです。
MesaDemo-3.0.tar.gz // Mesaデモ MesaLib-3.0.tar.gz // Mesaライブラリ RIVA-X-GLX-1.0-glibc-i386.tar.gz // Riva128用デバイスドライバ
ダウンロードしたRiva128用デバイスドライバを/usr/local/srcディレクトリに格納します。GLXモジュールとXサーバのインストールはriva_installスクリプトにより実行されます。
# tar xzvf RIVA-X-GLX-1.0-glibc-i386.tar.gz # cd /usr/local/src/X-GLX-glibc-i386 # ./riva_install # mv /usr/X11R6/bin/XF86_SVGA /usr/X11R6/bin/XF86_SVGA.old # cp /usr/local/src/X-GLX-glibc-i386/XF86_SVGA /usr/X11R6/binriva_installスクリプトでは、Xサーバ(XF86_SVGA)の入換えを行いませんでしたので、元のXサーバの名前を変更し、Xサーバを入換えました。
Mesa-3.0は前回コンパイルしたものを使用します。そのため、Voodoo2用のインクルードおよびライブラリファイルを/usr/local/glide/include, /usr/local/glide/libディレクトリに格納しました。
# mkdir /usr/local/glide/include ; mkdir /usr/local/glide/lib # cd /usr/local/src/Mesa-3.0 # cp /usr/local/src/Mesa-3.0/include/GL/* /usr/local/glide/include # cp /usr/local/src/Mesa-3.0/lib/* /usr/local/glide/lib前回のコンパイル時に生成されたファイル群を掃除し、linux-elfオプションでMesa-3.0をコンパイルします。
# make clean # make linux-elf
Riva128用のGLXモジュールを使用し3Dfxデモを起動すると、とても描写速度が遅くなります。これはRiva128用のGLXモジュールがGlide(3Dfx API)に対応していないからです。このため、今回は3Dfxデモではなく、Mesaデモを実行しましょう。
# cd demos/ # export LD_LIBRARY_PATH=/usr/local/src/Mesa-3.0/lib # ./morpth3d
筆者のハードウェア環境のように、Riva128チップセット、Voodoo2チップセットと2つの3Dグラフィックスアクセラレータを導入している場合は、各々のチップセットごとにMesaライブラリを使い分けたい場合があります。例えば、Riva128チップセット用のMesaライブラリを使用してMesaアプリケーションをX Window System上でデバッグしながら開発し、実際にはVoodoo2用のMesaライブラリでフルスクリーン表示させる場合等に便利です。
Mesaライブラリは、環境変数LD_LIBRARY_PATHの設定を変更することで共有可能です。
Voodoo2用のMesaライブラリが/usr/local/glide/lib/voodoo2ディレクトリ、Riva128用のMesaライブラリが/usr/local/glide/lib/riva128ディレクトリに格納されているとすると、
Voodoo2の場合は # export LD_LIBRARY_PATH=/usr/local/glide/lib/voodoo2 Riva128の場合は # export LD_LIBRARY_PATH=/usr/local/glide/lib/riva128 と宣言することで、Mesaライブラリの切替えが可能です。
Linux3Dグラフィックス環境についての情報源 |
最後にLinux3Dグラフィックス環境についての情報源としてWebページを紹介します。
とくに3.Mesa on LinuxのWebページでは、mesa-mlメーリングリストのアーカイブが置いてあり、日本語での情報を見ることが出来ます。興味を持った方は、ぜひともmesa-mlに参加して活発な発言をお願いしたいと思います。