2011-05-26 10 views
1

iPadで行うことができるOpenGL ESコールの最大数に制限がある場合は誰でも教えてください(つまり、OpenGLドローコールと状態変更)。iPadでできるOpenGL ESの呼び出し数は最大ですか?

私はゲームに取り組んでおり、低いFPSを見ているので、私の大量のOpenGL呼び出しに何かがあるのだろうかと思います。

答えて

1

OpenGL ESコマンドには実際の最大値はありませんが、それぞれに関連するオーバーヘッドがあります。冗長な状態の変更を排除し、1つの状態を使用するすべてのものが描画され、次に次のものが描画されるようにジオメトリをグループ化することによって、高価な状態の変更を減らす必要があります。 Appleには、OpenGL ES Programming Guide for iOSにこれに関するいくつかの推奨事項があります。

しかし、私のアプリケーションでは、OpenGL ESコマンドがパフォーマンスの大幅な低下の原因となることはめったにありません。大きな問題は、ジオメトリのサイズや、シーンに適用されるシェーダやその他のエフェクトの複雑さのために発生する傾向があります。ジオメトリサイズを小さくするために適用したヒントをご紹介します。hereとシェーダプロファイリング用のツールはhereですが、私はまだlearning the ins-and-outs of shader tuningです。

あなたが作っているOpenGL呼び出しを細かくチューニングするのに本当に気を使うなら、Xcode 4に付属する新しいOpenGL ESアナライザが最適なプロファイリングツールです。私の答えはhereで、ここでいくつかの冗長な設定を識別するために使用しました。これらの呼び出しを見つけ、コード内のどこにあるのかを指摘します。また、タイムプロファイラを使用して、フレームをレンダリングするときよりもCPU負荷を増やしているかどうかを確認し、問題のあるコード行を追跡することもできます。

+0

アナライザーツールを使用しようとしましたが、これまでツールをクラッシュさせてしまったのですが、 – kd3D

+0

時間プロファイラーは24時間前後のfpsを持っていましたが、それ以上は増やしたくありません。 – kd3D

+0

@ kd3D - ターゲットデバイスでiOS 4.0以降を実行している間、最新の安定版Xcode 4を使用していますか?この計測器を実行するには、iOS 4.0が必要です。 –

1

私が知る限り、glCallsの最大数には制限はありません。しかし間違いなく、glコールの数が増えるほど、より多くの時間がかかるでしょう。バッチレンダリングは、OpenGLで行わなければならない主な最適化の1つです。

+0

バッチを渡していますが、バウンディングボリュームにあるオブジェクトだけを描画しています。バウンディングボリュームの場合、すべてのオブジェクトを別々にロードしています。 – kd3D

+0

別のスレッドでオブジェクトをロードできます。あなたはこのスレッドに存在する投稿を参照することができます:: http://stackoverflow.com/questions/1253145/how-to-use-opengl-es-on-a-separate-thread-on-iphone –

1

ボトルネックを疑う代わりに、Instrumentsを使用してボトルネックを突き止めます。

トレーステンプレートOpenGL ESの分析は、選択の武器です。前回私が使用したときは、デバイス上の実行中のプロセスに手動で接続する必要がありました(他の起動オプションはすべて失敗しました)。

+0

どの楽器を使用するか、どのようにボトルネックを見つけるか – kd3D

+0

@ kd3D私の編集した回答を参照してください – Till

+0

それはこの楽器がどのプロセスにも接続できないことを示しています。楽器で直接試合を始めるたびに楽器がクラッシュする – kd3D