2013-08-03 24 views
12

我有一個framebuffer對象,我在其中使用綁定到它的N個紋理的多目標渲染。在某個特定時間,我想清除其中一些紋理的內容,但不是全部。 如果我打電話是否可以通過多目標渲染來清除幀緩衝區中的特定紋理?

glClearColor(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

綁定到FBO每質感將被清除(是嗎?)。 有沒有辦法在特定的繪圖緩衝區/紋理上做到這一點?

回答

16

GL_COLOR_BUFFER_BITthe glClear call如通過glDrawBuffers指定將清除所有的active draw color buffers的。所以你可以在執行清除之前更改繪製緩衝區。

但這是不必要的狀態改變。您可以simply call glClearBuffer,這將clear a particular buffer

+0

謝謝。什麼是glClearBufferfv的正確使用? glClearBufferfv(GL_COLOR_ATTACHEMENT0,0,&color [0])好嗎? (其中顏色是float [4]數組) – darius

+2

@darius:「* glClearBufferfv *」接收一組浮點數。這就是[「fv」總是意味着](https://www.opengl.org/wiki/Nomenclature#Function_suffixes)。在這種情況下,它總是4個浮動。就像'iv'版本需要4個有符號整數(用於清除整型格式緩衝區),'uiv'需要4個無符號整數。 –

+0

謝謝你的鏈接!其實,我真正懷疑的部分是前兩個論點。如果我理解正確,它們就是緩衝區的GLenum,它在GLenum的顏色緩衝區中的位置。所以,一般來說,像GL_COLOR_ATTACHEMENT0 +我的東西,我 – darius

0

它將是所有緩衝區。 雖然你可以使用glColorMask遮罩掉緩衝區。 http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml

+1

有兩個版本。點擊我的鏈接。經典的掩碼組件,第二個掩碼組件,每個緩衝區。 – starmole

+0

謝謝,這glColorMaski似乎是一個很好的解決方案。爲什麼這個答案是-1? – darius

+0

@darius:它得到-1是因爲OpenGL具有直接清除特定緩衝區的功能。掩蓋組件以防止清除緩衝區是該作業的錯誤工具。 –

相關問題