跨 GLSL 着色器调用保留数据

Retaining data across GLSL shader calls

我正在努力理解一个概念,我希望有人能直接告诉我。

我正在尝试构建 GLSL 模拟,以在每次绘制调用中保留数据,但我希望这一切都在 GPU 上完成,以便快速高效。我知道你是通过将你想要的数据渲染到纹理然后从该纹理中读取来做到这一点的。

我有一个简单的演示,我有一个渲染目标,我正在为其绘制颜色,每次绘制调用我都想通过读取当前颜色并向其添加 0.01 来将颜色值增加 0.01,但是我得到错误:

Source and destination textures of the draw are the same.

这让我觉得我完全误解了这个概念,因为我得到的印象是您不能将当前渲染目标作为纹理传入。谁能帮我解决这个问题,因为我现在感到很困惑

好吧,很明显你在做什么,读取和写入同一个纹理。只需创建两个纹理,一个将设置为 rendertarget,第二个用于读取。所以你读取 tex1,写入 tex2,然后在下一帧交换它们的用法,所以你写入 tex1 并从 tex2 读取。只需在框架上交替使用它们。

同时 read/write 在 webGL 中不受支持。只有最新版本的 OpenGL 具有可以以这种方式使用的 Image 对象,但 webGL 尚不支持它们,这就是为什么您必须使用两个纹理并来回乒乓球,交替使用它们的原因。