Wie wird ein GL_RENDERBUFFER wiederhergestellt?

9

Ich arbeite daran, den Status meiner OpenGL ES-basierten Anwendung zu speichern und wiederherzustellen.

Ich habe eine Funktion, um den GL_RENDERBUFFER zu speichern, um die Daten mit dem folgenden Code auszugeben:

%Vor%

Ich sehe keine glWritePixels-Funktion. Was ist der beste Weg, den GL_RENDERBUFFER mit den oben aufgefüllten GLubyte-Daten neu zu füllen? Ein Beispiel würde sehr geschätzt werden.

EDIT 3:

Hier versuche ich, den Textur-Render-Puffer und die Funktion zum Zeichnen zu konfigurieren. Wenn ich GL_COLOR_ATTACHMENT1 für den Parameter glFramebufferTexture2D festlege, werden die gespeicherten Pixeldaten zwar wiederhergestellt, aber ich bekomme keine Aktualisierungen zum Zeichnen. Aber wenn ich stattdessen GL_COLOR_ATTACHMENT0 verwende, erhalte ich Zeichnungsaktualisierungen, aber keine Pixeldaten wiederhergestellt.

Ich habe verschiedene Kombinationen ausprobiert (zum Beispiel auch GL_COLOR_ATTACHMENT1 für den Parameter glFramebufferRenderbuffer), aber dann bekomme ich einen ungültigen Bildpufferfehler beim Rendern. Es scheint so, als wäre ich so nah dran, aber ich kann mir nicht vorstellen, wie man die Wiederherstellung und das Rendern zusammenbringt.

%Vor%

Hier ist der Code zum Rendern. Der viewFramebuffer ist an GL_COLOR_ATTACHMENT0 angehängt und wird verwendet, damit der Texturrahmenpuffer innerhalb der Ansicht gezoomt und positioniert werden kann.

%Vor%     
Jeshua Lacock 11.09.2016, 03:22
quelle

1 Antwort

3

Wenn Sie Daten direkt in ein Renderziel schreiben müssen, ist die Verwendung eines Renderpuffers keine gute Option. In diesem Fall ist es viel besser, stattdessen eine Textur zu verwenden.

Die Verwendung einer Textur als FBO-Anhang funktioniert ähnlich wie die Verwendung eines Renderpuffers. Wo Sie derzeit glRenderbufferStorage() verwenden, um einen Render-Puffer der benötigten Dimensionen zuzuweisen, erstellen Sie stattdessen eine Textur und weisen ihren Speicher mit folgenden Elementen zu:

%Vor%

Dann befestigen Sie es mit dem Framebuffer mit:

%Vor%

Wenn Sie Ihr Renderziel später mit Daten füllen möchten, können Sie einfach glTexImage2D() oder noch besser glTexSubImage2D() aufrufen, wenn die Größe unverändert ist.

    
Reto Koradi 11.09.2016 13:30
quelle