Das Framebuffer- Objekt ist eigentlich kein Puffer, sondern ein Aggregatorobjekt, das einen oder mehrere Anhänge enthält, die wiederum die eigentlichen Puffer sind. Sie können den Framebuffer als C-Struktur verstehen , bei der jedes Mitglied ein Zeiger auf einen Puffer ist. Ohne Anhang hat ein Framebuffer- Objekt einen sehr geringen Platzbedarf.
Jetzt kann jeder an einen Framebuffer angehängte Puffer ein Renderbuffer oder eine Textur sein .
Der Renderbuffer ist ein tatsächlicher Puffer (ein Array von Bytes oder Ganzzahlen oder Pixeln). Der Renderbuffer speichert Pixelwerte im nativen Format und ist daher für das Rendern außerhalb des Bildschirms optimiert. Mit anderen Worten, das Zeichnen in einen Renderbuffer kann viel schneller sein als das Zeichnen in eine Textur. Der Nachteil ist, dass Pixel ein natives, implementierungsabhängiges Format verwenden, sodass das Lesen aus einem Renderbuffer viel schwieriger ist als das Lesen aus einer Textur. Sobald ein Renderbuffer gezeichnet wurde, kann man seinen Inhalt jedoch sehr schnell mithilfe von Pixelübertragungsvorgängen direkt auf den Bildschirm (oder auf einen anderen Renderbuffer , glaube ich) kopieren . Dies bedeutet, dass ein Renderbuffer kann verwendet werden, um das von Ihnen erwähnte Doppelpuffermuster effizient zu implementieren.
Renderbuffer sind ein relativ neues Konzept. Vor ihnen wurde ein Framebuffer verwendet, um eine Textur zu rendern , die langsamer sein kann, da eine Textur ein Standardformat verwendet. Es ist immer noch möglich, eine Textur zu rendern, und das ist sehr nützlich, wenn Sie mehrere Durchgänge über jedes Pixel ausführen müssen, um eine Szene zu erstellen oder eine Szene auf einer Oberfläche einer anderen Szene zu zeichnen!
Das OpenGL-Wiki enthält diese Seite mit weiteren Details und Links.