描画速度が必要以上に遅いような気がする。
60fpsで動いていたものが、40fpsに。
GPUにステートやテクスチャーハンドルを重複して送らないようにしてみたり、スプライト,テクスト描画等、細切れのglDrawコマンドを、ステートが同じポリゴンを三角形リストにバッファリングして一度に描画してみたり(これはちょっと効果があった)、いろいろやってみたが変わらなかった。
最終的に行き着いたのが、テクスチャーをロードし過ぎているというもの。インゲームで使用しているテクスチャーを思いっきり小さくしてみたら、60fpsを回復した。
512x512のテクスチャーを5枚くらいロードしていたわけだが、これはやり過ぎだったようだ。
おそらく、GPUがポリゴンを描画しようとするとき、使用するテクスチャーがVRAMのような特定の領域にない場合、メインメモリーからコピーするという、テクスチャーのスワッピングが起きていたのではないかと思われる(この辺のOpenGL ESの内部構造やPowerVRの構造をよく知らないのであくまでも推測だが)。 というのは、プロファイラーでみると、memcopy系の関数がやたらとCPU時間を食っている。
やっぱり、PowerVRとOpenGLの動作をちゃんと知っておかないと。
あと、たまーに使っていつも間違えるのが、glScissor()のPosition Y。
これは、物理画面の下が0なので注意。
y = DeviceScreenHeight - ( scissoringAreaY + scissoringAreaHeight )