GLSL Renderbuffer真的需要吗?

Per*_*abs 9 glsl

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

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

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

Nic*_*las 10

一个帧缓冲区对象是要坚持的图像,这样就可以使他们的地方.颜色缓冲区,深度缓冲区等都进入帧缓冲对象.

一个渲染就像是一个纹理,但有两个重要的区别:

  1. 它始终是2D并且没有mipmap.所以它总是正好是1张图片.
  2. 无法从渲染缓冲区读取.您可以将它们附加到FBO并渲染到它们,但是您无法使用纹理访问或其他内容对它们进行采样.

所以你在谈论两个主要是分开的概念.Renderbuffers不具备成为"深度测试." 这是渲染缓冲区的常见用例,因为如果要将颜色渲染到纹理,通常不关心深度.您需要深度,因为您需要对隐藏表面移除进行深度测试.但是你不需要从那个深度进行采样.因此,不是制作深度纹理,而是制作深度渲染缓冲区.

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

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

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

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

  • 好吧,我仍然把所有的东西放在一起因为对我来说都是新的,我正在阅读几个教程,但找不到能直接显示所有概念的教程.总体思路是使用着色器处理视频帧,应用多个滤镜,然后将其输出到屏幕中的四边形. (2认同)