什么';OpenGL中帧缓冲区和渲染缓冲区的概念和区别是什么?

什么';OpenGL中帧缓冲区和渲染缓冲区的概念和区别是什么?,opengl,rendering,framebuffer,Opengl,Rendering,Framebuffer,我对帧缓冲区和渲染缓冲区的概念感到困惑。我知道它们需要渲染,但我想在使用之前理解它们 我知道需要一些位图缓冲区来存储临时绘图结果。后缓冲区。当绘制这些图纸时,需要在屏幕上看到另一个缓冲区。前面的缓冲器。 把它们翻过来,再画一次。我知道这个概念,但很难将这些对象与这个概念联系起来 它们的概念和区别是什么?有一些细节,我认为这些细节很好地解释了它们之间的区别。首先: OpenGL管道的最终渲染目标称为[帧缓冲区] 鉴于: 渲染缓冲对象 此外,renderbuffer对象是新引入的用于屏幕外渲染的对象

我对帧缓冲区和渲染缓冲区的概念感到困惑。我知道它们需要渲染,但我想在使用之前理解它们

我知道需要一些位图缓冲区来存储临时绘图结果。后缓冲区。当绘制这些图纸时,需要在屏幕上看到另一个缓冲区。前面的缓冲器。 把它们翻过来,再画一次。我知道这个概念,但很难将这些对象与这个概念联系起来

它们的概念和区别是什么?

有一些细节,我认为这些细节很好地解释了它们之间的区别。首先:

OpenGL管道的最终渲染目标称为[帧缓冲区]

鉴于:

渲染缓冲对象
此外,renderbuffer对象是新引入的用于屏幕外渲染的对象。它允许将场景直接渲染到renderbuffer对象,而不是渲染到纹理对象。Renderbuffer只是一个数据存储对象,其中包含一个可渲染内部格式的图像。它用于存储没有相应纹理格式的OpenGL逻辑缓冲区,例如模具或深度缓冲区

Framebuffer对象实际上不是缓冲区,而是包含一个或多个附件的聚合器对象,而附件又是实际的缓冲区。您可以将帧缓冲区理解为C结构,其中每个成员都是指向缓冲区的指针。没有任何附件,帧缓冲区对象的占用空间非常小

现在,附加到帧缓冲区的每个缓冲区都可以是渲染缓冲区或纹理

Renderbuffer是一个实际的缓冲区(字节、整数或像素数组)。Renderbuffer以本机格式存储像素值,因此针对屏幕外渲染进行了优化。换句话说,绘制到Renderbuffer要比绘制到纹理快得多。缺点是像素使用本机的、依赖于实现的格式,因此从Renderbuffer读取比从纹理读取困难得多。然而,一旦绘制了Renderbuffer,就可以使用像素传输操作快速地将其内容直接复制到屏幕(或其他Renderbuffer)。这意味着可以使用Renderbuffer高效地实现您提到的双缓冲区模式

渲染缓冲区是一个相对较新的概念。在此之前,帧缓冲区用于渲染纹理,由于纹理使用标准格式,渲染速度可能较慢。仍然可以渲染到纹理,当需要在每个像素上执行多个过程以构建场景或在另一个场景的曲面上绘制场景时,这非常有用


OpenGL wiki具有显示更多详细信息和链接的功能。

Renderbuffer是帧缓冲区的通道式组件(颜色、模具、深度等)。请参阅:该链接是特定于iPhone的,但帧缓冲区的解释很好。谢谢!把它解释成类似于结构和指针对我来说更有意义。这对我来说还是有点困惑。如果renderbuffer只允许快速复制到另一个渲染缓冲区,那么它几乎没有任何用处!如果必须执行后处理阶段(如SSAO),则使用先前渲染到纹理将其渲染到默认帧缓冲区并不比将其渲染到渲染缓冲区然后复制回屏幕更容易?渲染缓冲区不是为自定义后处理而设计的。它们可用于存储绘制过程的深度和模具信息。这是可能的,因为只有GPL实现本身需要读取renderbuffer数据,而且往往比纹理更快,因为它使用本机格式。如果需要后期处理,请使用纹理。