2013-09-16 7 views
5
glViewport(x(), y(), width(), height()); 

glDisable(GL_DEPTH_TEST); 

glClearColor(0, 0.3, 0, 1); 
glClear(GL_COLOR_BUFFER_BIT); 

//... drawing commands 

Na rysunku jest właściwie dzieje się w małym obszarze okna, ustalony przez glViewport(x(), y(), width(), height())Czy funkcja glClearColor() nie powinna być obsługiwana przez obszar rysunku ustawiony za pomocą glViewport()?

Jednakże, kolor tła ustawiony przez glClearColor() ma wpływ na całe okno, mimo że jest on ustawiony po zakończeniu rozmowy do glViewportport(). Czemu?

Odpowiedz

8

Na glClear strony:

Test własności pikseli, test nożycowy, roztrząsania, a writemasks buforowe wpływać na działanie glClear.

Jednakże glViewport stwierdzono, że

glViewport określa afinicznej transformacji z X i Y od znormalizowanego urządzenia współrzędnych na współrzędne okno.

Jeśli prawidłowo odczytam odniesienia, jest to zgodne z projektem; glViewport jedynie przesuwa widok, co wpływa na remisy, które rasteryzują prymitywy, podczas gdy glClear działa po prostu na całym obszarze bufora ramki.

Pełne spec (4.3), wydaje się, że zgadzają się z:

§17.4.3 GL zapewnia środki do ustawiania części każdego piksela w danym buforze do tej samej wartości.

+0

Jest to rzeczywiście poprawna interpretacja i prawidłowa odpowiedź. – datenwolf

+3

Należy wspomnieć przynajmniej, że 'glScissor (...)' może być użyty do odtworzenia zachowania, które OP chce. Pod warunkiem oczywiście, że włączony jest "GL_SCISSOR_TEST". –

Powiązane problemy