東方必技禄(4) -OpenGLで高速に描画-

iPhoneプログラミングでは、描画の方法として
 ○CoreGraphicsを使う
 ○OpenGL ESを使う
の2つがある。もちろん、OpenGLを使う方が速い。でも、最近のOpenGLプログラミングに関するページはほとんどGLUTを使っていて参考にならないので実装が大変(資料が少ないのが難点だ)。OpenGL ESではGLUTなんてものは使えません。
(自分でコンパイルするなりして実装すればその限りではないけど)


さて、OpenGLを使った方が処理速度は速いのだが、馬鹿正直に描画命令をどかどかいれると弾幕系シューティングのようなものはとてもじゃないがゲームにならない。なので、工夫(最適化)が必要になる。Appleのリファレンス?では glDrawArray より glDrawElement の方が処理が軽いと書いてある。また、描画時のプリミティブは GL_TRIANGLES より GL_TRIANGLE_STRIP の方が速いともある。しかし、GL_TRIANGLE_STRIP をつかうと、離れている2つのものを描画する時2回描画命令を書かなければいけない事になる。GL_TRIANGLESの方でやれば1回で済む。つまり、沢山のものを1度に描画するには、全ての頂点を配列にしまって、GL_TRIANGLESで一度に描画すれば良いわけだ。


OpenGLで高速化するには、描画命令を1回にすること。これが一番効果が大きい。
あと、1個1個の描画サイズを小さくするとそれだけ速くなる事も最近わかった。当たり前か。。。


手元に iPod touch 2nd しかないので、他でどのくらいいけるのかを見てみたいねぇ。
あ、iPad は全然余裕だった。iPhone4とかで試してみたいって事ね。
誰か実験してくれるんならソースぐらい公開するんだけどね。