2.0のサンプルが動かなかった件
実は、バイナリ版リリース作業で一番手こずったのは、sample/load_from_io.rbが動かなかったことです。
Surface#loadFromIOメソッドがエラーを返していました。
ohaiさんの話によると、このサンプルは問題なく動いているということで、原因が分からず、時間だけが経つばかり・・・。
ところが、今日、あっけなく解決してしまいました。
元のサンプルでは、
File.open("icon.png"){|f| SDL::Surface.loadFromIO(f) }
だったのですが、これをWindowsで実行しようとするとファイルがアスキーモードで開かれるためでした。以下、リファレンスマニュアルから引用。
"これらのいずれに対しても "b" フラグを ("r+b"のように) つけることができます (整数なら File::BINARY )。この場合、バイナリモードでオープンします (ただし、DOS/Windowsのようにシステムがテキスト/バイナリでファイルを区別する場合に限ります) "
(Ruby1.8.6リファレンスマニュアル Kernel.openメソッドの説明より)
孔明の罠か!(笑)
つまり、Windowsでは、File.openメソッドの引数にバイナリモードかどうかちゃんと指定しろということですね。なるほど〜。
というわけで、以下の様に修正したら直りました。
File.open("icon.png", "rb"){|f| SDL::Surface.loadFromIO(f) }
Ruby側に原因があったなんて・・・灯台もと暗しとはこのことです・・・。
とはいえ、上手くいって良かった良かった。