ruby-opengl のコンパイル

MinGWglut を組み込む

gl・gluライブラリは、MinGW内にすでにlibopengl32.a, libglu32.a として含まれていますが、glut がありません。

glut のソースは MinGW ではコンパイルできないので、バイナリアーカイブ glut-3.7.6-bin.tar.gz を入手します。
ヘッダとライブラリを手でコピーします。

$ cp -p glut.h /mingw/include/GL
$ cp -p glut32.lib /mingw/lib/libglut.a

glut.h のコピー先が include の下の GL であることと、glut32.lib は libglut.a に名前を変えなくてはいけないことに注意。

mkrf の準備

コンパイルに必要な mkrf を、gem でインストール。(なければ)

$ gem install mkrf

mkrf-0.2.3 の場合、パッチを当てます。

http://rubyforge.org/pipermail/ruby-opengl-devel/2009-April/000204.html
から、二つのパッチファイル attachment.obj, attachment-0001.obj を落とします。
(仮に ~/Downloads に落としたとします)
これを gems にある mkrf の、ライブラリファイルに対して適用します。

$ cd /c/ruby1.9/lib/ruby/gems/1.9.1/gems/mkrf-0.2.3/lib/mkrf 
$ patch < ~/Downloads/attachment.obj
$ patch < ~/Downloads/attachment-0001.obj

ruby-openglコンパイル

gem でも tarball でも、MinGW ではコンパイルに失敗します。
mkrf と同様にパッチを当てても良いのですが、subversion で最新のソースを checkout すれば手間が省けます。

$ svn checkout http://ruby-opengl.rubyforge.org/svn/trunk
$ rake binary_gem
$ gem install pkg/ruby-opengl-0.60.1-x86-mingw32-ruby19.gem

ローカル gem を作ってインストールします。

サンプル実行

example の下にRedBook, OrangeBook, NeHe の3つのディレクトリがありますが、一部そのままでは動かないサンプルがあります

RedBook の stroke.rb は、'A'[0] が Ruby1.9 で文字列を返すよう変更されたため動きません。
これもエディタで、108〜113行めの[0]を、「.ord」 に直します。

OrangeBook の brick.rb と particle.rb は、when文の最後にいらない「:」があって文法エラーになるので、エディタで取り除いて実行します。
(これ、C の switch 〜 case とまちがえた?)

サンプルは動きましたか? ……おつかれさまでした……。
整理した書き方でとぼけていますが、かなり地雷踏みました(笑)
Ruby 1.9 + MinGW は地雷原ですなあ。(まだパッチがあるだけいいけど)