如何正确使用glDiscardFramebufferEXT

时间:2012-08-04 18:17:30

标签: android iphone opengl-es opengl-es-2.0 gpgpu

此问题与OpenGL ES 2.0扩展EXT_discard_framebuffer有关。

我不清楚哪些案例证明使用此扩展是合理的。如果我调用glDiscardFramebufferEXT()并将指定的可附加图像置于未定义状态,则意味着: - 我不再关心内容了,因为它已经与glReadPixels()一起使用了,
- 我不再关心内容,因为它已经与glCopyTexSubImage()一起使用了,
- 我不应该首先制作渲染。

显然,只有前两种情况有意义或者其他情况下glDiscardFramebufferEXT()是否有用?如果是,这些情况是什么?

2 个答案:

答案 0 :(得分:6)

glDiscardFramebufferEXT是对驱动程序的性能提示。移动GPU使用基于图块的延迟渲染。在该上下文中设置要丢弃的任何帧缓冲区都会保存gpu工作和内存带宽,因为它不需要将其写回统一内存。

通常你会丢弃:

  • 深度缓冲区,因为它未显示在屏幕上。它只是在gpu上渲染时使用。
  • msaa缓冲区,因为它被解析为较小的缓冲区以呈现给屏幕。

此外,任何刚用于在GPU上渲染的缓冲区都应该被丢弃,因此不会将其写回统一内存。

答案 1 :(得分:2)

我见过使用DiscardFramebuffer的主要情况是当你有一个多采样渲染缓冲区,你刚刚使用BlitFramebuffer或ResolveMultisampleFramebufferAPPLE(在iOS上)解析为纹理,在这种情况下你不再关心原始内容缓冲液中。