今日の雑記

生きることでいっぱいいっぱい

今日の GP2X

なんかもうコーナー化してしまいそうな勢いだ。というかカテゴリ作っちまったし。
GP2XSDLソースコードを発見したので、「高速化(主に描画周り)」についてちょこっと調べてみた。ソースは以下。
LibSDL Hardware Sourcecode http://www.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,46,1241
んで、読んでみて解った感じな事。

  • 結構きちんとハード叩いてるっぽい。
  • ビデオドライバが専用で、名前が「GP2X」。
  • VRAM が存在した。しかも残り 5M も。
  • SDL_FULLSCREEN」が有効らしい。
  • さらに「SDL_HWSURFACE」も有効らしい。

実際に以上の事を踏まえて、

videoFlags = SDL_SWSURFACE;
primary = SDL_SetVideoMode(width, height, 8, videoFlags);

としていたビデオ周りの初期化を、

videoFlags = SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF|SDL_HWPALETTE;
primary = SDL_SetVideoMode(width, height, 8, videoFlags);

こうしてみた。結果、驚くほどの速度向上が。作成初期の段階(背景描画して敵8体ほど出して自機が出てショットが撃てる)なのであまり参考にはならんが(全くだ)、6倍ほど速くなった。具体的に書くと「6ms」が「1ms」になった。
「FULLSCREEN」に関しては完全に盲点だった。GP2X は Window モードだろうが FULLSCREEN だろうが出る絵は一緒で、ぱっと見「FULLSCREEN」で動いてくれる。しかも通常は「ウェイト」を入れてフレームレートを一定にしてるので、速くなってるのに気がつかなかった。最近は FULLSCREEN で作る事も無かったのでよりいっそう気がつかなかったというか、試しても無かった(PC でもそんなに恩恵があるようには思わなかったしね...)。
「VRAM が 5M 存在した」というのは、ヘッダファイルの下記の記述を見たからだ。実際は 8M あるらしい。

// Allocate 8MB for the frame buffer (seems to be how gph have it)
#define GP2X_VIDEO_MEM_SIZE 5*1024*1024

この情報どこかにあったっけ...?見たことない気がするけど、単に気がつかなかっただけかなあ...?