在GLSL着色器调用中保留数据

时间:2016-05-07 12:19:19

标签: textures webgl retain rendertarget

我正在努力理解一个概念,我希望有人可以直接指导我。

我正在尝试构建将在每次绘制调用中保留数据的GLSL模拟,但我希望所有这些都在GPU上完成,因此它快速有效。我知道你这样做是通过将你想要的数据渲染到纹理然后从那个纹理中读取。

我有一个简单的演示,我有一个rendertarget,我正在绘制一个颜色和每个绘制调用我想通过读取当前颜色并添加0.01来增加颜色的值0.01,但是我得到错误:

Source and destination textures of the draw are the same.

这让我觉得我完全误解了这个概念,因为我得到的印象是你无法将当前的rendertarget作为纹理传递。有人可以为我清楚这一点,因为我现在感到非常困惑

1 个答案:

答案 0 :(得分:1)

嗯,很明显你正在做什么,包括读取和写入相同的纹理。只需创建两个纹理,一个将设置为rendertarget,另一个将从中读取。所以你读取tex1,写入tex2,然后在下一帧中交换它们的用法,所以你写入tex1并从tex2读取。只需在帧上交替使用它们。

webGL不支持同时读/写。只有非常新版本的OpenGL才能使用可以这种方式使用的Image对象,但是webGL还不支持它们,这就是为什么你必须使用两个纹理并来回ping它们的原因。他们如何使用。