Kann ich beim Zeichnen in FBO den Standardtiefenpuffer verwenden?

6

Wie füge ich einen Standardtiefenpuffer an FBO an? Wie verwende ich den an FBO angehängten Tiefen-Renderpuffer-Puffer (nach dem Zeichnen) als Standard-Tiefenpuffer?

Grundsätzlich möchte ich für das FBO- und das Backbuffer-Rendering den gleichen Tiefenpuffer verwenden.

JBeurer
quelle

Antworten:

4

Das kannst du nicht.

Dies ist beabsichtigt. OpenGL (und ältere Versionen von DirectX) wurden in den Tagen entwickelt, als Windows-Apps buchstäblich denselben Frame-Puffer gemeinsam nutzten. Das heißt, wenn Sie zwei überlappende Fenster hätten, würden die Fenster versuchen, genau die gleichen Pixel aus den Farb-, Tiefen- und Schablonenpuffern zu verwenden. Die Fenstersysteme behandelten dies über eine fest codierte Maskierungsoperation.

Mit anderen Worten, Sie besitzen nicht den Standardtiefenpuffer, können den Standardtiefenpuffer nicht ändern und können nicht zuverlässig aus dem Standardtiefenpuffer in der OpenGL-API lesen.

Am besten machen Sie einfach das gesamte Rendering in einem FBO und verwenden dann einen Textur-Blit, um das endgültige Bild in den Standard-FBO zu übertragen.

Sean Middleditch
quelle
Was meinst du mit zuverlässig? Tatsächlich können Sie mit glReadPixels (Format auf GL_DEPTH_COMPONENT) und glDrawPixels (Format auf GL_DEPTH_COMPONTENT gesetzt und glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) in den Standardtiefenpuffer lesen und schreiben, bevor wir dies nicht ändern der Farbpuffer). Dies ist jedoch möglicherweise nicht die effizienteste und aktuellste Methode, um dies zu tun.
JBeurer
Aufgrund des gemeinsamen Eigentums und der Maskierung verfügen möglicherweise nicht alle Standard-Framebuffer über gültige Daten. Auf allen Modem-Compositing-Desktops funktioniert es nur, aber die GL-API erfordert oder erwartet dies nicht.
Sean Middleditch