29

帧缓冲区对象、渲染缓冲区对象和纹理之间有什么区别?它们将在什么情况下使用?

4

2 回答 2

32

帧缓冲区

帧缓冲区实际上不是缓冲区。它是为绘制操作定义参数的对象的抽象。它是一个包含一个或多个附件的小对象,这些附件本身就是实际的缓冲区。将帧缓冲区理解为具有许多字段的 C 结构。每个字段(OpenGL 术语中的每个附件)都可以是指向渲染缓冲区、纹理、深度缓冲区等的指针。

质地

一组标准像素。这是一个实际的缓冲区,可以附加到帧缓冲区作为绘制像素的目的地。纹理中的每个像素通常包含颜色分量和 alpha 值(纹理中的像素可以转换为具有 4 个浮点数的 RGBA 四边形)。

绘制到包含附加纹理的帧缓冲区后,可以从纹理中读取像素以用于另一个绘制操作。例如,这允许多次绘制或在另一个场景中绘制一个场景。

纹理可以附加到着色器程序并用作采样器。

渲染缓冲区

原生像素数组。渲染缓冲区就像一个纹理,但使用内部格式存储像素。它针对像素传输操作进行了优化。它可以作为被绘制像素的目的地附加到帧缓冲区,然后快速复制到视口或另一个帧缓冲区。这允许实现双缓冲算法,其中下一个场景被绘制而前一个场景被展示。

渲染缓冲区还可用于存储仅用于单个绘制过程的深度和模板信息。这是可能的,因为只有实现本身需要读取渲染缓冲区数据,并且往往比纹理更快,因为使用的是原生格式。

因为它使用原生格式,所以渲染缓冲区不能附加到着色器程序并用作采样器。

于 2014-06-12T00:27:17.867 回答
22

帧缓冲区对象或多或少只是一个管理结构。它管理一个完整的帧缓冲区及其所有子缓冲区,如颜色缓冲区、深度缓冲区和模板缓冲区。

纹理或渲染缓冲区包含各个子缓冲区的实际存储。通过这种方式,您可以拥有多个颜色缓冲区、一个深度缓冲区和一个模板缓冲区,所有这些都存储在不同的纹理/渲染缓冲区中。但它们共同构成了一个逻辑帧缓冲区,您可以在其中进行渲染。

因此,写入帧缓冲区的最终片段(您可以称其为像素,但实际上还不是一个)具有一个或多个颜色值、一个深度值和一个模板值,它们最终都位于帧缓冲区的不同子缓冲区中.

于 2012-04-12T06:57:43.013 回答