2012-02-13 22 views
-1

私はiOSで2Dゲームを開発していますが、私は難しいと思っています(Retinaディスプレイで60 FPS)。iOSで最も速い描画方法は何ですか?

私は最初に描画にUIKitを使用しましたが、もちろんゲームには適していません。私は減速せずにスプライトのカップルを描きません。

次に、私はOpenGLに移行しました。これは、GPUに最も近いことを読んでいるからです(これは、できるだけ速いと思います)。私はglDrawArrays()を使用していました。私がSimulatorで走らせたとき、FPSは200個以上の三角に到達したときに落ちました。 iOS OpenGLを実行するためにシミュレータまたはコンピュータが最適化されていないためだと人々は言った。その後、私はそれを実際のデバイスでテストしましたが、驚いたことに、パフォーマンスの差はごくわずかでした。それでも数少ない三角形をスムーズに動かすことはできませんでした.iOS上の他のゲームでは、より多くのポリゴン、シェーダー、3Dグラフィックスなどを使用しています。

OpenGLのパフォーマンスをチェックするためにInstrumentsを実行したとき、 VBOを使用して速度を上げることができます。だから、代わりにVBOを使用して各フレームのすべての頂点を更新するコードを書き直しました。パフォーマンスはほとんど向上しておらず、一貫した60 FPSで200トライアングルを上回ることはできません。それは、コンテキストの変更や変形を伴わない2D描画だけです。私はまだゲームを書いていませんでした。CPU集約的な作業をしていないオブジェクトはありません。

OpenGLは最高の性能を発揮します。私は何が間違っている可能性がありますか?私は、OpenGLが各フレームを更新するポリゴンの大部分を扱うことができると仮定しています - そうですか? 3DであるInfinity Bladeのように他のゲームが使用する方法や、常に更新されるスプライトがたくさんあるAngry Birdsのような、どのゲームがうまくいくかはわかりますか?ゲームをするときに推奨されるものは何ですか?

答えて

1

OpenGLは間違いなくあなたの最速のオプションになります。最も古いiOSデバイスでも、30+ fpsで約20,000ポリゴンを実行できます。

あなたは間違ったことや余分なことをする必要があります。あなたのソースコードを見ていないと、それが何であるかを推測することは不可能です。

一般的に言えば、VBOとすべての読み込みを描画パイプラインの外に作成する必要があります。

+0

ゲーム開始時にのみ読み込みが行われており、私はごくわずかな状態変更呼び出ししか使用しません。しかし、私はあなたがDrawing Pipelineと言うときは分かりません。つまり、フレームごとに頂点を更新する必要があります。また、すべてのフレームで描画が行われるため、同じ時刻に2つのものが発生したと考えました。どうすればそれらを分けることができますか?私はコードをタイムプロファイリングしようとしていますが、インストゥルメンツで何が起こっているのか十分に理解していません。 – HLorenzi

+1

Drawing Pipelineは描画ループです。私はあなたがしていることを見ずにあなたを助けることはできません。私はまだあなたがしてはならない描画ループの中で何かをやっていなければならないと思っています。 –

関連する問題