2012-12-17 50 views
1

我正在使用工具來捕獲我的引擎的OpenGL壓力測試信息。EAGLContext_presentRenderBuffer在OpenGLES壓力測試中佔據大部分時間

經過長時間,頂部3的功能(使用從OpenGL ES的分析儀儀器API統計)爲:

  1. EAGLContext_presentRenderBuffer(654827246)
  2. glBufferData(16128155)
  3. glDrawElements(11555768)

爲什麼EAGLContext_presentRenderBuffer這麼高?我的猜測是,由於CPU利用率非常低,因此這個時間還包括花費在等待vsync的CPU上的時間。

這是正確的嗎?如果沒有,還有什麼可以解釋這個功能的高成本?

回答

2

以我的經驗,其中很大一部分來自iOS設備中使用的基於瓦片的延遲渲染器的「延遲」部分。在設置場景渲染時,GPU會在需要之前將很多平局調用放出。

在許多情況下,這可能意味着OpenGL ES的繪圖調用似乎是非常快的CPU上計時的時候,卻讀取或顯示場景的最後一個元素似乎需要大量的時間。最後一次調用會阻止,直到所有的渲染完成,因爲它需要這是真實的,以便在屏幕上顯示完成的圖像。

不幸的是,這可以使它很難分析您的渲染,因爲你不能在你的OpenGL ES的場景是什麼階段的準確評估是最慢的。這是我依賴OpenGL ES Driver工具來告訴我我是幾何圖形還是填充率限制,然後在我的管道中放置虛擬元素以嘗試本地化瓶頸。

我們真的沒有一個很好的對口時間探查的OpenGL ES着呢,我建議您提交了一個功能請求,如果你想看到這一點。我知道我會的。