Framebuffer

Aus DGL Wiki
Version vom 18. Oktober 2006, 17:12 Uhr von La Boda (Diskussion | Beiträge) (Hinweis auf GL_EXT_framebuffer_object)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Bevor das Bild, welches man rendert, auf dem Monitor sichtbar wird, wird es in den so genannten Framebuffer geschrieben. Im Framebuffer wird nicht nur die Farbe eines Bildpunktes gespeichert, sondern auch dessen Tiefe und/oder dessen Stencil-Wert.

Wenn ein Objekt gezeichnet wird, so muss sowohl der Tiefentest (welcher seine Daten vom Tiefenpuffer und von der Tiefe des zu prüfenden Fragmentes bezieht) als auch der Stencil-Test (welcher seine Daten aus dem Schablonenpuffer und vom Stencil-Wert des zu prüfenden Fragmentes bezieht) bestanden werden, damit die Daten im Farbpuffer landen. Der Tiefen- und Stencil-Test kann natürlich aktiviert oder deaktiviert werden. Voraussetzung für beide Tests ist aber natürlich das Vorhandensein der Puffer, welches durch das gewählte Pixelformat (gesetzt durch WGL ARB pixel format bzw. SetPixelFormat) gewährleistet sein muss.

Seit relativ kurzer Zeit steht die neue Extension GL_EXT_framebuffer_object zur Verfügung, mit der man schnell und komfortabel eigene Framebuffer anlegen und wieder auslesen kann, wodurch sich neue Anwendungsmöglichkeiten erschließen.


Die Bildentstehung im Framebuffer

Wenn ein (das erste) Objekt gezeichnet wird, so wird der Colorbuffer an diesen Stellen beschrieben. Ebenso der Tiefenpuffer. Vor dem erneuten schreiben in den Framebuffer wird nun überprüft, ob die Tiefenkoordinaten der Fragmente des neuen Objektes den Tiefentest bestehen (üblicherweise muss der Tiefenwert dafür kleiner - also näher - sein als der bereits existierende Wert im Framebuffer). Dieser Vorgang wiederholt sich bis alle Objekte gezeichnet wurden. Das Bild liegt nun fertig im Framebuffer und kann auf dem Bildschirm angezeigt werden.

Ähnlich wie der Tiefenpuffer können auch die Stencil-Werte mit dem Schablonenpuffer verglichen werden. Das verhalten von beiden Tests kann mittels glDepthFunc bzw. glStencilFunc verändert werden.

Der Framebuffer funktioniert nach dem so genannten Doublebufferingprinzip.