iOS OpenGL ES逻辑缓冲区加载

moo*_*dow 6 iphone performance opengl-es-2.0

通过Analyze仪器给出的OpenGL API使用性能警告列表,我发现我们每帧生成几个逻辑缓冲区加载 - 我们没有清除缓冲区的地方因为绘制调用完全覆盖它.

与直觉相反,引入glClear()针对这些案例的调用只是将警告的位置移动到glClear()调用.苹果实施GL_EXT_discard_framebuffer,但是单独使用它也不足以阻止警告.A glDiscardFramebufferEXT()后跟a glClear()会停止警告,并显着提高性能,但glClear()调用本身需要时间来清除缓冲区,在我们的用例中这是一个冗余操作.

其他人是否也发现他们需要调用这两个函数以避免重新加载成本或者我错过了什么?是否有一种廉价的方式暗示OpenGL,帧缓冲的内容即将被完全覆盖,因此不需要重新加载到tile内存中?

Sim*_*lex 4

该文档暗示全屏 glClear() 设置了一些神奇的标志,这与我在调试同一问题时所看到的一致。我不担心做多余的 glClear(),因为据我所知,这是预期的使用模式。

更新:您可能也遇到了与我相同的错误,我正在清除颜色和深度缓冲区,但在调用 glClear() 之前忘记设置 glDepthMask(GL_TRUE)。这导致了逻辑缓冲区负载警告。