2009-03-04 10 views
4

私が書いているiPhone OpenGLゲームでボトルネックを見つけようとしています。ゲームそのものは2dにあり、各アルファブレンドされた数百のテクスチャスプライトが含まれています。テクスチャの面ではiphoneでOpenGLアプリケーションのボトルネックを見つける

、私は唯一の私は一度結合し、単一の512×512アトラスを使用するので、私は(少なくともないテクスチャのアップロードから)その帯域幅の問題を考えていません。

私は、CPU使用量、メモリ使用量、OpenGL ESの使用状況を追跡するために計測器を使用しました。ゲームで重い時点で、私は次のことを見てきました:

FPS:20 CPU:60% 実Memの:17MB タイラ利用率:21% レンダリングの利用:私は「45%

ボトルネックになる可能性のあることについてちょっと混乱しましたか?ボトルネックになる前に、CPU使用率がどのくらい高いのですか(私は同時に他のアプリケーションが動いていることに気付いています)? 60%は正しいと思いますか?

それはグラフィックスの量ですか?私は、tiler + rendererの利用率が低いのではないかと推測しています。しかし、私はこれらの結果を読むことに専門家ではないと告白する必要があります。私の可能性がボトルネックが何であるかのいずれかで

任意のポインタは、または他にどこ1を探しに感謝して受信されるだろう!

答えて

4

CPUが少し高い音、あなたは罪/ COSのような三角関数の多くを使用していますか?ときどきそれらはひどく、すなわちパーティクルシステムのために使用されます。それらを最小限に抑えるか、可能であればルックアップテーブルを使用してください。

Hereは近似

1

のために良い議論であるあなたのコードの行は、時間の大半を実行しているかチェックしましたか?私はかなり楽器にこれのためのツールがあると確信しています。

+0

「プロファイラ」と呼ばれます。 – strager

+0

はい、私はインストゥルメンツの内容が不明でした。 – samoz

+0

SharkはMac/iphone、ランタイムサンプラーに使用するツールですが、アプリがiPhoneで動作している場合にのみ起動して停止することを忘れないでください。 – epatel

1

あなたの「レンダリング」使用率が低いですが、私は、これはOpenGLの呼び出しのCPU側であると仮定しています。この部分は、glFlush/glFinishのときにGPUが行うべきことのリストを構築するものと考えることができます。これらのうちの1つを呼び出すと、GPUは実際に設定したことを実行する必要があります。

私はiPhoneで作業していませんが、あなたはGPUに縛られているようです。だからここに私がチェックするもののリスト(iPhone上で直接働いていないた)、彼らが調査するのにかかる時間の長さの順にされて:あなたはglFinishを

  1. 呼び出していますか?もしそうなら、glFlush - glFinishブロックを使ってみてください。

  2. あなたはアルファブレンディングを無効にした場合は、かなりのスピードアップを見ていますか?私はこれが非常に可能性は高いとは思わないが、確認するのが速いはずだ。

  3. あなたがオブジェクトに淘汰の任意の並べ替えをやっている、またはあなたがあなたのすべてのオブジェクトに各フレームをレンダリングしていますか?

iPhoneにはGPUプロファイラがありますか?

4

まだお持ちでない方は、Optimizing OpenGL ES for iPhone OSを読んでください。iPhoneで高速なOpenGLアプリケーションを書く方法については、多くの有益な情報があります。

0

2Dゲームをどのように実装しましたか?個々のスプライトは、それ自身の三角形ペアポリゴンにレンダリングされていますか?または各スプライトを512x512のテクスチャ面にレンダリングしますか?

後者の方法では、各フレームのテクスチャを変更するとパフォーマンスが大幅に低下する可能性があり、ドキュメントでは推奨されません。これは本当に苦痛ですが、glDrawTexは回避策を提供するかもしれませんが、これをテストしていないので、うまくいくとは思いません。

関連する問題