帧缓冲区对象,渲染缓冲区对象和纹理之间的区别?

Meg*_*raj 29 opengl-es-2.0

帧缓冲区对象,渲染缓冲区对象和纹理之间的区别是什么?在什么情况下他们会被使用?

fer*_*olo 25

帧缓冲区

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

质地

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

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

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

渲染

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

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

因为它使用本机格式,所以渲染缓冲区无法附加到着色器程序并用作采样器.


Chr*_*ica 20

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

纹理或渲染缓冲区包括各个子缓冲区的实际存储空间.这样,您可以拥有多个颜色缓冲区,深度缓冲区和模板缓冲区,所有颜色缓冲区都存储在不同的纹理/渲染缓冲区中.但它们共同构成了一个逻辑帧缓冲区,您可以在其中渲染.

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