2013-08-03 12 views
12

Mam obiekt framebuffer, w którym używam Multi Target Rendering na N tekstur bindowanych do niego. W pewnym momencie chcę wyczyścić zawartość niektórych z tych tekstur, ale nie wszystkie. Jeśli zadzwonięCzy jest możliwe wyczyszczenie niektórych tekstur w buforze ramki z renderowaniem z wieloma celami?

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

każdy tekstury zbindowanych do FBO zostanie wyczyszczone (mam rację?). Czy można to zrobić na określonych buforach/teksturach rysowania?

Odpowiedz

16

GL_COLOR_BUFFER_BIT w the glClear call spowoduje usunięcie wszystkich active draw color buffers, jak określono poprzez glDrawBuffers. Abyś mógł zmienić bufory wyciągania przed wykonaniem wyczyszczenia.

Ale to niepotrzebne zmiany stanu. Możesz simply call glClearBuffer, który będzie clear a particular buffer.

+0

Dziękuję. Jakie jest właściwe użycie glClearBufferfv? Czy glClearBufferfv (GL_COLOR_ATTACHEMENT0, 0 i kolor [0]) są w porządku? (gdzie kolor jest tablicą float [4]) – darius

+2

@darius: "* glClearBufferfv *" pobiera tablicę zmiennych. To właśnie ["fv" zawsze oznacza] (https://www.opengl.org/wiki/Nomenclature#Function_suffixes). W tym przypadku zawsze ma 4 pływaki. Tak jak wersja 'iv' pobiera 4 liczby całkowite ze znakiem (dla kasowania buforów w formacie całkowitym), a' uiv' pobiera 4 liczby całkowite bez znaku. –

+0

Dziękuję za link! W rzeczywistości, część, o której naprawdę miałem wątpliwości, to pierwsze dwa argumenty. Jeśli dobrze zrozumiałem, są one GLenum bufora i jego miejsce w tablicy kolorów buforowych GLenum. Tak więc ogólnie rzecz biorąc, takie rzeczy jak GL_COLOR_ATTACHEMENT0 + i, i – darius

0

To będą wszystkie bufory. Mimo to można maskować bufory dla clear za pomocą glColorMask. http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml

+1

Dostępne są dwie wersje. Kliknij mój link. Klasyczny maskuje komponenty, drugi maskuje komponenty na bufor. – starmole

+0

Dzięki, to glColorMaski wydaje się dobrym rozwiązaniem. Dlaczego ta odpowiedź miała wartość -1? – darius

+0

@darius: Otrzymał -1, ponieważ OpenGL ma funkcję bezpośredniego czyszczenia określonego bufora. Maskowanie komponentów, aby zapobiec wyczyszczeniu bufora, jest niewłaściwym narzędziem do zadania. –

Powiązane problemy