2012-08-04 45 views
4

此問題與OpenGL ES 2.0擴展EXT_discard_framebuffer有關。
如何正確使用glDiscardFramebufferEXT

目前還不清楚哪些情況下使用此擴展名是合理的。如果我調用glDiscardFramebufferEXT()並且它將指定的可附加圖像置於未定義的狀態,這意味着:
- 我不再關心內容了,因爲它已經與glReadPixels()一起使用了,
- 我不喜歡它不再關心內容了,因爲它已經和glCopyTexSubImage()一起使用了,
- 我不應該把渲染放在第一位。

顯然,只有前兩種情況纔有意義,或者在其他情況下glDiscardFramebufferEXT()有用嗎?如果是,這些情況是哪些?

回答

2

我看到使用DiscardFramebuffer的主要情況是,當您使用BlitFramebuffer或ResolveMultisampleFramebufferAPPLE(iOS上)解析到紋理的多重採樣渲染緩衝區時,您不再關心原始緩衝區。

6

glDiscardFramebufferEXT是驅動程序的性能提示。移動GPU使用基於瓦片的延遲渲染。在這種情況下,設置任何要丟棄的幀緩衝區可以保存gpu工作和內存帶寬,因爲它不需要將其寫回統一內存。

通常你會放棄:

  • 深度緩存,因爲它並不在屏幕上呈現。它只是在GPU上渲染時使用。
  • msaa緩衝區,因爲它被解析爲一個較小的緩衝區以呈現給屏幕。

此外,任何僅用於在GPU上渲染的緩衝區都應該丟棄,因此它不會寫回統一內存。