パフォーマンスの測定など

SDL2を使った互換インターフェイスなどを構築してみたので、現時点の実装で動作するベンチマークとして、DXRubyサンプルのsprite_simple.rbを動かしてパフォーマンスを測定してみた。
60fpsで動作する最大のオブジェクト数を適当に手で調べた結果である。うちのWindowsPCは6年前のCPUとチップセット内蔵GPUなのでそれなりに遅い。遅いが実用上問題無いのでそのまま使っている。そのうち買い換えて64bitのOSを入れたやつにしたい。財布と相談の上。以下、Rubyのバージョンはすべて2.2.3p173である。Windowsではi386-mingw32、Macではx86_64-darwin14。
まずネイティブで動作するDXRuby1.4.2の結果。

2Dゲーを作るには十分すぎる性能なので満足。
んで、sdl2r上で動作させた結果。

半分以下に落ちた。まあ、Rubyでライブラリのコード書いてるのと、sdl2rとSDL2を介してDirectXを叩くというオーバーヘッドがこれぐらいということなのだが、それはそれとして、こんだけ動いてくれれば弾幕ゲーを作ることも問題なくできそうではある。そう考えるとマルチプラットフォームでこんだけ動いてラクできるSDL2すごい。
最後にMacBookProの結果。

Rubyでfib39した結果がMac8.4秒、WinPC18.4秒だったという性能差を考えるとちょっとしょんぼり感がある。SDL2のプラットフォーム別実装の差か、DirectXOpenGLの差か、それともGPUの性能差がCPUほど無いのか。原因がどこにあるのかはわからないが、ともあれ、うちのWinPCよりもMacBookのほうがトータル性能は高いのだろうということはわかる。
どうでもいいけどWindowsでのビルドはsdl2r開発時にやっていたのだが、もう一度環境を作ろうとしてまた四苦八苦した。このへんほんと何とかならんのかな。

結論。
マルチプラットフォームで動作するものがそこそこ快適に動作する。SDL2もRubyも現在では十分速く描画まわりに関しては実用的なレベルである。
・DXRubyちょー速い(自画自賛)。
WindowsでSDL2を使った拡張ライブラリをビルドするのめんどい。sdl2rのバイナリ版を用意するつっても開発が完了してそれなりに安定しないと無理筋だし困ったものである。