wake-up-neo.net

Was ist das Konzept und die Unterschiede zwischen Framebuffer und Renderbuffer in OpenGL?

Ich bin verwirrt über das Konzept von Framebuffer und Renderbuffer. Ich weiß, dass sie gerendert werden müssen, aber ich möchte sie vor der Verwendung verstehen.

Ich weiß, dass ein Bitmap-Puffer zum Speichern des temporären Zeichnungsergebnisses erforderlich ist. Der Rückpuffer. Der andere Puffer muss auf dem Bildschirm angezeigt werden, wenn diese Zeichnungen ausgeführt werden. Der vordere Puffer. Und drehe sie um und ziehe erneut. Ich kenne dieses Konzept, aber es ist schwierig, diese Objekte mit diesem Konzept zu verbinden.

Was ist das Konzept und die Unterschiede von ihnen?

122
Eonil

Diese Seite hat einige Details, von denen ich denke, dass sie den Unterschied recht gut erklären. Zuerst:

Das endgültige Rendering-Ziel der OpenGL-Pipeline heißt [the] framebuffer.

Wohingegen:

Renderbuffer-Objekt
Außerdem wurde das Renderbuffer-Objekt für das Offscreen-Rendering neu eingeführt. Sie können eine Szene direkt in einem Renderbuffer-Objekt rendern, anstatt sie in einem Textur-Objekt zu rendern. Renderbuffer ist einfach ein Datenspeicherobjekt, das ein einzelnes Bild eines gerenderten internen Formats enthält. Es wird verwendet, um logische OpenGL-Puffer zu speichern, die kein entsprechendes Texturformat haben, z. B. Schablonen- oder Tiefenpuffer.

58
ChrisF

Das Bildspeicher, Framebuffer object ist eigentlich kein Puffer, sondern ein Aggregatorobjekt, das einen oder mehrere Anhänge enthält, die wiederum die eigentlichen Puffer sind. Sie können das verstehen Bildspeicher, Framebuffer als C-Struktur, in der jedes Element ein Zeiger auf einen Puffer ist. Ohne Anhaftung a Bildspeicher, Framebuffer Objekt hat sehr geringen Platzbedarf.

Nun wird jeder Puffer an einen Bildspeicher, Framebuffer kann sein a Renderbuffer oder ein textur.

Das Renderbuffer ist ein tatsächlicher Puffer (ein Array von Bytes oder ganzen Zahlen oder Pixeln). Das Renderbuffer Speichert Pixelwerte im nativen Format und ist daher für das Rendern außerhalb des Bildschirms optimiert. Mit anderen Worten: Zeichnen auf a Renderbuffer kann viel schneller sein als das Zeichnen auf eine Textur. Der Nachteil ist, dass Pixel ein systemeigenes, implementierungsabhängiges Format verwenden, sodass das Lesen von a Renderbuffer ist viel schwieriger als das Lesen von einer Textur. Trotzdem einmal ein Renderbuffer Wurde gemalt, kann man seinen Inhalt direkt auf den Bildschirm (oder auf einen anderen) kopieren Renderbuffer, Denke ich), sehr schnell mit Pixelübertragungsoperationen. Dies bedeutet, dass a Renderbuffer kann verwendet werden, um das von Ihnen erwähnte Doppelpuffermuster effizient zu implementieren.

Renderbuffer sind ein relativ neues Konzept. Vor ihnen a Bildspeicher, Framebuffer wurde verwendet, um zu rendern texturDies kann langsamer sein, da eine Textur ein Standardformat verwendet. Es ist immer noch möglich, eine Textur zu rendern. Dies ist sehr nützlich, wenn Sie mehrere Übergänge über jedes Pixel ausführen müssen, um eine Szene zu erstellen, oder um eine Szene auf einer Oberfläche einer anderen Szene zu zeichnen.

Das OpenGL-Wiki hat diese Seite das mehr Details und Links anzeigt.

173
fernacolo