我正在尝试编写一个将视频相机帧写入四边形的程序。 我看到教程解释说使用framebuffers可以更快,但仍然学习如何做到这一点。 但是除了帧缓冲之外,我发现还有渲染缓冲区。
问题是,如果目的只是将纹理写入将填满屏幕的四边形,我真的需要一个渲染缓冲区吗?
我知道渲染缓冲区用于深度测试,我认为它只用于检查像素的Z位置,因此为我的场景创建渲染缓冲区是愚蠢的,对吗?
答案 0 :(得分:10)
framebuffer object是一个粘贴图像的地方,以便您可以渲染它们。颜色缓冲区,深度缓冲区等都进入帧缓冲对象。
renderbuffer 就像一个纹理,但有两个重要区别:
所以你说的是两个主要是分开的概念。 Renderbuffers 不是“用于深度测试”。这是渲染缓冲区的常见用例,因为如果要将颜色渲染到纹理,通常不关心深度。您需要深度,因为您需要对隐藏表面移除进行深度测试。但是你不需要从那个深度示例。因此,不要制作深度纹理,而是制作深度渲染缓冲区。
但渲染缓冲区也可以使用颜色而不是深度格式。你不能将它们作为纹理附加。你仍然可以从/向它们进行blit,你仍然可以使用glReadPixels
来回读它们。你无法在着色器中读取它们。
奇怪的是,这没有回答你的问题:
问题是,如果目的只是将纹理写入将填满屏幕的四边形,我真的需要一个渲染缓冲区吗?
我不明白你为什么需要任何类型的帧缓冲或渲染缓冲。纹理是纹理;只需绘制纹理四边形。