4

这个问题与 OpenGL ES 2.0 Extension EXT_discard_framebuffer 有关

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

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

4

2 回答 2

8

glDiscardFramebufferEXT 是对驱动程序的性能提示。移动 GPU 使用基于切片的延迟渲染。在这种情况下,将任何帧缓冲区设置为丢弃可以节省 gpu 工作和内存带宽,因为它不需要将其写回统一内存。

通常你会丢弃:

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

此外,任何仅用于在 GPU 上渲染的缓冲区都应该被丢弃,这样它就不会被写回统一内存。

于 2013-08-29T15:29:57.730 回答
2

我看到使用 DiscardFramebuffer 的主要情况是,当您使用 BlitFramebuffer 或 ResolveMultisampleFramebufferAPPLE(在 iOS 上)将多采样渲染缓冲区解析为纹理时,在这种情况下您不再关心原始缓冲区的内容。

于 2012-09-27T03:35:44.957 回答