2013-05-13 132 views
2

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

所以,我正在寻找一种方式来阅读这是对当前片段可能会覆盖的地方片段颜色信息。所以,以前渲染片段的确切位置。

我发现某些EXT_扩展着色器添加gl_FragData和gl_LastFragData,但如果是我所需要的,可能有人解释如何使用这些?

我期待任一OpenGL或OpenGL ES 2.0的溶液。

编辑:

所有的时间我正在寻找解决方案,让我有某种阅读&写“制服”,从着色器访问。对于那些寻找类似的东西的人来说,OpenGL版本4.3+支持imagebuffer存储类型。它们允许同时读取和写入它们,并且与计算着色器结合,它们被证明是非常强大的工具。

+2

你的意思是桌面OpenGL或OpenGL ES的产生? – 2013-05-13 21:16:37

+0

它并不重要。任何会做。 – 2013-05-13 22:43:27

回答

5

你的问题似乎相当混乱。你的问题(第一句)的

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

gl_LastFragData非常简单:它是framebuffer中样本的颜色,将被此片段着色器覆盖。如果可以的话,你可以用它来做。

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

+0

你有链接gl_LastFragData的进一步解释,也许它的用法?什么是依赖关系?它是否支持webGL?这似乎是我需要的,但我不能谷歌它。 :/ – 2013-05-13 22:52:36

+0

@AbstractAlgorithm:它来自我链接到的扩展。依赖关系是......它是一个扩展。如果扩展名不受支持,则不能使用它。它的用法是......如果你想知道正在写入的样本的颜色,你可以阅读它。你知道,像任何其他变量。这只是一个变量;这不是魔术。这不是在其他变量具有“用法”的方式之外具有“用法”的东西。我不确定你在这里找什么。 – 2013-05-13 23:42:08

1

对于大多数的nVidia硬件,您可以使用GL_NV_texture_barrier扩展从,因此目前绑定到帧缓存纹理读取。但是记住,你将无法读取数据更近比上绘制调用