Renderbuffer Objekte
← Render to Texture | ● | Renderbuffer mit Tiefe →
Man erstellt einen Namen für eine Zusammensetzung eines Framebuffers (der reguläre ist wie üblich einfach ‘0’), und aktiviert diesen:
glBindFramebuffer (GL_FRAMEBUFFER, name_fb);
Man benötigt eine Textur in die man zeichnen möchte; man kann über glTexImage2D()
eine leere Textur einer bestimmten Größe erstellen, indem man 0
als Zeiger auf die Bilddaten übergibt. Texturfilter nicht vergessen, MipMapping ist hier erst einmal nicht erlaubt.
Man bindet dann die Textur in die man zeichnen möchte an diesen Render buffer:
Nun erzeugt man über ein komplexes Zusammenspiel mehrerer OpenGL-Aufrufe einen Depth Buffer der gleichen Größe:
glBindRenderbuffer (GL_RENDERBUFFER, name_depth_rb);
glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name_depth_rb);
Ab sofort kann man in diese Textur zeichnen mit
In den regulären (angezeigten Framebuffer zeichnet man nach
Im Framework
Im Framework ist das ganze noch etwas einfacher:
lglFBO fbo;
Und dann in initializeOpenGL():
Nur für Postprocessing benötigt man die Textur in der gleichen Größe wie das dargestellte Fenster; da sich die Größe zur Laufzeit ändern kann, macht man das in renderOpenGL():
Zum Rendern in die Textur aktiviert man den FBO:
Zum Rendern auf den Bildschirm deaktiviert man den FBO, dabei bekommt man den Namen bzw. Id der Textur zurück:
Diese Textur-Id kann man nun wie jedes andere Textur-Objekt verwenden und z.B. als aktuelle Textur binden etc.
← Render to Texture | ● | Renderbuffer mit Tiefe →