2013-08-03 6 views
12

Ich habe ein Framebuffer-Objekt, in dem ich Multi-Target-Rendering auf N Texturen verwende, die daran gebunden sind. Zu einer bestimmten Zeit möchte ich den Inhalt einiger dieser Texturen löschen, aber nicht alle. Wenn ichIst es möglich, bestimmte Texturen in einem Framebuffer mit Multi-Target-Rendering zu löschen?

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

zum FBO binded jede Textur rufen wird gelöscht werden (bin ich richtig?). Gibt es eine Möglichkeit, dies auf bestimmte Zeichenpuffer/Texturen zu tun?

Antwort

16

Die GL_COLOR_BUFFER_BIT in the glClear call alle der active draw color buffers klar wird, wie über glDrawBuffers angegeben. So können Sie die Zeichenpuffer vor dem Löschen ändern.

Aber das ist unnötig Zustandsänderung. Sie können simply call glClearBuffer, die clear a particular buffer wird.

+0

Vielen Dank. Was ist der richtige Gebrauch von glClearBufferfv? Ist glClearBufferfv (GL_COLOR_ATTACHEMENT0, 0, & Farbe [0]) in Ordnung? (wo die Farbe ein float [4] Array ist) – darius

+2

@darius: "* glClearBufferfv *" nimmt ein Array von Floats. Das ist es, was [das "fv" immer bedeutet] (https://www.opengl.org/wiki/Nomenclature#Function_suffixes). In diesem Fall sind es immer 4 Floats. Genauso wie die 'iv'-Version 4 vorzeichenbehaftete Ganzzahlen (zum Löschen von Integer-Format-Puffern) und' uiv' 4 vorzeichenlose Ganzzahlen benötigt. –

+0

Danke für den Link! Der Teil, an dem ich wirklich Zweifel hatte, sind die ersten beiden Argumente. Wenn ich richtig verstanden habe, sind sie das GLenum des Puffers und der Platz im Farbpuffer-Array von GLenum. Also, im Allgemeinen Sachen wie GL_COLOR_ATTACHEMENT0 + i, i – darius

0

Es werden alle Puffer sein. Sie können jedoch Puffer mit GlColorMask für das Löschen ausblenden. http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml

+1

Es gibt zwei Versionen. Klicke auf meinen Link. Der klassische maskiert Komponenten, der zweite maskiert Komponenten pro Puffer. – starmole

+0

Danke, diese glColorMaski scheint eine gute Lösung zu sein. Warum ist diese Antwort ein -1? – darius

+0

@darius: Es hat eine -1 erhalten, weil OpenGL eine Funktion hat, einen spezifischen Puffer direkt zu löschen. Das Maskieren von Komponenten, um das Löschen eines Puffers zu verhindern, ist das falsche Werkzeug für den Job. –