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

glDisable(GL_DEPTH_TEST); 

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

//... drawing commands 

Die Zeichnung richtig ist in einem kleinen Bereich des Fensters geschieht, durch die jedochSollte glClearColor() dem von glViewport() gesetzten Zeichenbereich nicht gehorchen?

glViewport(x(), y(), width(), height()) gesetzt ist, wird die Hintergrundfarbe von glClearColor(), um das gesamte Fenster zu beeinflussen, auch wenn diese nach dem Aufruf gesetzt zu glViewport(). Warum?

Antwort

8

Auf glClear Seite:

Der Pixelbesitz Test, der Scherentest, Dithering und die Puffer writemasks beeinflussen den Betrieb von glClear.

jedoch glViewport besagt, dass

glViewport die affine Transformation von x und y von normalisierten Gerät angibt Koordinaten in Fensterkoordinaten.

Wenn ich die Referenzen richtig gelesen habe, ist dies beabsichtigt; glViewport versetzt nur das Ansichtsfenster, was sich auf die Drawcalls auswirkt, die Primitive rasterisieren, während glClear einfach auf den gesamten Framebuffer-Bereich wirkt.

Die volle spec (4.3) mit scheint, dass zu einigen:

§17.4.3 Der GL stellt ein Mittel zum Einstellen Abschnitte jedes Pixel in einem bestimmten Puffer auf den gleichen Wert.

+0

Dies ist in der Tat die richtige Interpretation und richtige Antwort. – datenwolf

+3

Es sollte zumindest erwähnt werden, dass 'glScissor (...)' verwendet werden kann, um das Verhalten zu replizieren, das das OP wünscht. Vorausgesetzt, dass 'GL_SCISSOR_TEST' aktiviert ist. –

Verwandte Themen