Feb 4, 2008

GL Excess / Ruby : Scene 12 をサクッと移植、と思いきや


Scene 12 は GL Excess 全12シーンで一番短い行数のプログラムです(scene12.cppが281行)。

移植なんて一瞬だぜ、と思っていたら。
texture.rb で raw テクスチャの幅が正しく取れないケースがあることがわかりました。 Ruby 1.8 と 1.9 との間で、 String#to_i の挙動に違いがあることが原因のようです。
両方のバージョンで動かしたかったがために、次のようにして対処してみました:
texture.rb
major, minor, micro = RUBY_VERSION.scan( /\d+/ )

if ( major == "1" && minor == "8" )
  # for Ruby 1.8.
  width  = pow2( w[0].to_i - "0"[0].to_i )
  height = pow2( h[0].to_i - "0"[0].to_i )
else
  # for Ruby 1.9.
  width  = pow2( w[0].unpack("U")[0].to_i - "0"[0].unpack("U")[0].to_i )
  height = pow2( h[0].unpack("U")[0].to_i - "0"[0].unpack("U")[0].to_i )
end
普通であればどのようにして対処するべきところなのでしょうか?
GL Excess / Ruby のページも更新。 Scene 12 をダウンロードできるようにしておきました: