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 をダウンロードできるようにしておきました:
