iOS OpenGL ES 逻辑缓冲区加载

Posted

技术标签:

【中文标题】iOS OpenGL ES 逻辑缓冲区加载【英文标题】:iOS OpenGL ES Logical Buffer Loads 【发布时间】:2011-03-29 10:03:59 【问题描述】:

浏览分析工具给出的 OpenGL API 使用性能警告列表,我发现我们每帧生成多个逻辑缓冲区负载——在这些地方我们没有清除缓冲区,因为绘制调用完全覆盖了它。

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于iOS OpenGL ES 逻辑缓冲区加载的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?

iOS OpenGL ES Analyzer 列出“不存在的帧缓冲区附件”和“缺少帧缓冲区附件”,但 FBO 工作

清除/释放 OpenGL ES 缓冲区

OpenGL ES 2.0 Framebuffer 渲染到纹理 iOS:没有显示

OpenGL ES 2.0,使用多个顶点缓冲区进行绘制

OpenGL ES之如何传输一个超大数组给着色器程序