2011-03-29 140 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警告。