2012-11-23 36 views
1

在DirectX中你能擁有獨立的渲染目標和深度緩衝,所以你可以綁定一個渲染目標和深度緩衝,做一些渲染,去除深度緩衝,然後做更多的渲染使用舊的深度緩衝區作爲紋理。獨立的幀緩存和深度緩存在OpenGL

你怎麼會去這在OpenGL?根據我的理解,你有一個framebuffer對象,它包含顏色緩衝區和一個可選深度緩衝區。我不認爲我可以同時綁定幾個幀緩衝區對象,每次它改變時我是否都必須重新創建幀緩衝區對象(可能是一幀的幾次)?正常的opengl程序如何做到這一點?

+0

也許您正在尋找pbuffers:http://en.wikipedia.org/wiki/Pixel_buffer –

+0

或FBO,現代API的pbuffer:http://www.opengl.org/wiki/FBO – Invalid

+0

是的,我在談論FBO的時候,我只是在談論我在DirectX中如何使用它們時使用了渲染目標術語。 – Programmdude

回答

6

一個Framebuffer Object只不過是一個系列圖像的引用的多。這些可以是Textures中的圖像(例如2D紋理的mipmap圖層)或Renderbuffers(不能用作紋理)。

沒有什麼從組裝使用紋理的圖像顏色緩存和紋理的其depth buffer圖像的FBO阻止你。也不會有任何東西阻止你從後面(只要你沒有渲染到這個FBO),從紋理採樣作爲深度紋理。 FBO不會突然擁有這些圖像或其他東西。

在所有的可能性,發生了什麼事是你誤解了FBO和OpenGL的Default Framebuffer之間的差異。默認幀緩衝區(即:窗口)不可更改。你不能拿它的深度緩衝區,並將其用作紋理或其他東西。你用FBO做的事情是你自己的事情,但OpenGL不會讓你用相同的方式使用默認的幀緩衝區。

1

您可以將多個渲染目標綁定到一個FBO,應引起的伎倆。此外,由於OpenGL是一個狀態機,您可以隨時更改綁定和目標數量。