2009-03-04 68 views
4

我正在嘗試追查我正在寫的iPhone OpenGL遊戲中的瓶頸。遊戲本身在2D中,幷包含幾百個紋理小精靈,每個alpha混合。在iphone上查找OpenGL應用程序的瓶頸

就紋理而言,我只使用一個我綁定一次的單個512x512圖集,所以我不認爲它帶寬問題(至少不是從紋理上傳)。

我使用儀器來跟蹤CPU使用率,內存使用情況和OpenGL ES使用情況。在遊戲中的一個重一點,我漸漸看到以下內容:

FPS:20 CPU:60% 皇家紀念品:17MB 瓦工使用率:21% 渲染使用率:45%

我有些困惑,可能是什麼瓶頸?在成爲瓶頸之前,CPU使用率有多高(我知道還有其他應用程序正在同時運行)? 60%聽起來是對的嗎?

或者它可能是圖形的數量?我猜如果平鋪器+渲染器的利用率是低的。但我必須承認,我並不擅長閱讀這些結果。

任何關於我可能出現瓶頸的指針,或者其他地方尋找的指針都會非常感激!

回答

4

CPU聽起來有點高,你用了很多像sin/cos這樣的三角函數嗎?有時候這些使用不當,即對於粒子系統。儘量保持最低限度,或者儘可能使用查找表。

Here是近似值

1

商量好了你檢查,看看你的代碼的行正在運行的大部分時間?我很確定儀器中有這樣一個工具。

+0

稱爲「分析器」。 – strager 2009-03-04 01:25:59

1

雖然你的'渲染'利用率低,我假設這是OpenGL調用的CPU端。您可以將此部分視爲爲glFlush/glFinish構建GPU執行的任務列表。一旦你調用其中的一個,GPU實際上必須完成你設置的任務。

雖然我沒有在iPhone上工作,它聽起來像你是GPU綁定。因此,這裏是東西我會檢查列表中的順序(具有不直接在iPhone上工作),他們將需要多長時間來研究:

  1. 你打電話glfinish在?如果這樣的話,嘗試使用glFlush - glFinish塊,而GPU做它的事情。

  2. 如果您禁用alpha混合,您是否看到可觀的加速?我認爲這不太可能,但應該很快檢查。

  3. 你在對物體進行任何類型的剔除,或者你是在渲染每個物體的所有物體?

iPhone是否有任何形式的GPU分析器?

0

你是如何實現你的2D遊戲?每個獨立的精靈都呈現在它自己的三角形配對多邊形上嗎?還是你將每個精靈渲染到512x512紋理表面上?

對於後一種方法,更改每個幀的紋理可能會導致較大的性能損失,因此不建議在文檔中使用;這真的有點痛苦,glDrawTex可能會提供解決方法,但我沒有測試過,我不確定它會工作。