读取当前帧缓冲区

时间:2013-05-13 21:09:56

标签: opengl glsl webgl

有没有办法从当前渲染的帧缓冲区中读取片段?

所以,我正在寻找一种方法来从当前片段可能会覆盖的地方的片段中读取颜色信息。所以,先前渲染的片段的确切位置。

我发现gl_FragData和gl_LastFragData会添加某些EXT_扩展名到着色器,但如果它们是我需要的,有人可以解释如何使用它们吗?

我正在寻找OpenGL或OpenGL ES 2.0解决方案。

编辑:

我一直在寻找能够让我从着色器中获得某种读取和写入“统一”的解决方案。对于那里搜索类似内容的人,OpenGL版本4.3+支持imagebuffer存储类型。它们允许同时读取和写入它们,并且结合计算着色器,它们被证明是非常强大的工具。

2 个答案:

答案 0 :(得分:6)

你的问题似乎很混乱。

您的部分问题(第一句)询问您是否可以从片段着色器中读取帧缓冲区。答案是,通常没有。有an OpenGL ES 2.0 extension允许您这样做,但它仅在某些硬件上受支持。在桌面GL 4.2+中,您可以使用arbitrary image load/store来获得相同的效果。但你不能再渲染到那个图像了;你必须使用图像存储功能来编写数据。

gl_LastFragData非常简单:它是帧缓冲区中样本的颜色,将被此片段着色器覆盖。如果可以的话,你可以随意使用它。

问题的第二部分(第二段)是完全不同的问题。在那里,你问的是可能从未写过到帧缓冲区的片段。您无法从片段着色器中读取;你只能读图像。如果一个片段未通过深度测试,那么它的数据从未呈现给图像。所以你无法阅读它。

答案 1 :(得分:1)

使用大多数nVidia硬件,您可以使用GL_NV_texture_barrier扩展来读取当前绑定到帧缓冲区的纹理。但请记住,您将无法读取比上一次绘制调用中产生的数据更新的数据