GLSL Renderbuffer真的需要吗?

时间:2012-03-24 10:01:50

标签: glsl

我正在尝试编写一个将视频相机帧写入四边形的程序。 我看到教程解释说使用framebuffers可以更快,但仍然学习如何做到这一点。 但是除了帧缓冲之外,我发现还有渲染缓冲区。

问题是,如果目的只是将纹理写入将填满屏幕的四边形,我真的需要一个渲染缓冲区吗?

我知道渲染缓冲区用于深度测试,我认为它只用于检查像素的Z位置,因此为我的场景创建渲染缓冲区是愚蠢的,对吗?

1 个答案:

答案 0 :(得分:10)

framebuffer object是一个粘贴图像的地方,以便您可以渲染它们。颜色缓冲区,深度缓冲区等都进入帧缓冲对象。

renderbuffer 就像一个纹理,但有两个重要区别:

  1. 它始终是2D并且没有mipmap。所以它总是只有1张图片。
  2. 无法从渲染缓冲区中读取内容。您可以将它们附加到FBO并渲染到它们,但是您无法通过纹理访问或其他方式从它们中进行采样。
  3. 所以你说的是两个主要是分开的概念。 Renderbuffers 不是“用于深度测试”。这是渲染缓冲区的常见用例,因为如果要将颜色渲染到纹理,通常不关心深度。您需要深度,因为您需要对隐藏表面移除进行深度测试。但是你不需要从那个深度示例。因此,不要制作深度纹理,而是制作深度渲染缓冲区。

    但渲染缓冲区也可以使用颜色而不是深度格式。你不能将它们作为纹理附加。你仍然可以从/向它们进行blit,你仍然可以使用glReadPixels来回读它们。你无法在着色器中读取它们。

    奇怪的是,这没有回答你的问题:

      

    问题是,如果目的只是将纹理写入将填满屏幕的四边形,我真的需要一个渲染缓冲区吗?

    我不明白你为什么需要任何类型的帧缓冲或渲染缓冲。纹理是纹理;只需绘制纹理四边形。