2011-03-29 126 views
6

通過分析儀器給出的OpenGL API使用性能警告列表,我發現我們每幀產生幾個邏輯緩衝區負載 - 我們沒有清除緩衝區的地方,因爲繪圖調用完全覆蓋它。iOS OpenGL ES邏輯緩衝區負載

違反直覺,引入glClear()調用這些情況只是將警告的位置移動到glClear()調用。蘋果公司實施GL_EXT_discard_framebuffer,但是單獨使用它也不足以阻止警告。 A glDiscardFramebufferEXT()後跟glClear()會停止警告,並會顯着提高性能,但glClear()調用本身需要時間來清除緩衝區,這在我們的用例中是一個冗餘操作。

其他人也發現他們需要調用這兩個函數來避免重新加載成本或者我錯過了什麼?有沒有一種便宜的OpenGL提示框架緩衝區的內容即將被完全覆蓋,所以不需要重新加載到內存中?

回答

4

該文檔暗示全屏glClear()設置了一些神奇的旗幟,這與我在調試同一問題時看到的一致。我不擔心做一個多餘的glClear(),因爲這是我所知道的預期使用模式。

更新:您也可能遇到同樣的錯誤,我在清除顏色和深度緩衝區時忘了在調用glClear()之前設置glDepthMask(GL_TRUE)。這導致了Logical Buffer Load警告。

相關問題