wxGLCanvas

2005年12月17日
wxDCを利用した画面描画は遅いので、wxGLCanvasを利用して可能な限り高速に画面描画ができないかどうか試してみた。

とりあえず、テクスチャを生成してgl*PointerとglDrawArraysで頂点配列をストリーム化したものをコンパイルして表示。
他の2D描画のためのコマンド類はディスプレイリストに突っ込んで呼ぶようにすることで、800x600x24の画像は5(ms)程度で画面へ転送できるようになった。

しかし、5(ms)は遅い。
SDLでGLを使った場合は、ダブルバッファ使っているにも関わらず、1(ms)かからなかった。それがwxGLCanvasでは5(ms)、かなり遅い。

何か原因がありそうなので、色々と調べてみたら、テクスチャ生成時に大掛かりなメモリーコピーをやっており(画面切り替えのためのソフトウェアサーフェース確保とそのテクスチャのバッファリング)、このためキャッシュミスが発生して画面への描画が遅くなっていたようだ。
この処理を省くと、1(ms)描画にかからなくなった(これに関連して、当初自分は頂点サブミット等がホットスポットになっていると勘違いしていた。実際はそうではなく、どうもテクスチャ生成に問題があったよう)。

とりあえず、今後はwxGLCanvasがどの程度他の環境で動くかを確かめた上で、テクスチャサイズの分割(大き目のテクスチャサイズがサポートされていない環境への対策)と、テクスチャの動的書き換えの高速化をやってみようと思う。

コメント