我的情况是我有一个(n + 1)x(n + 1)纹理附加到帧缓冲区。我的想法是在2遍中更新这个纹理。
在第二遍中,我将绑定第一遍的结果进行读取和写入。我知道根据OpenGL,这会产生不确定的行为,但由于我从不同时从相同的纹素中读取和写入,我认为它可以工作。
像这样做是一个好主意,还是画一个全屏四边形可能更好,在我的glsl着色器中做一个检查:
if (gl_FragCoord.x == 0.5 || gl_FragCoord.x == n + 0.5){
...
}
正如你所说,OpenGL说它是未定义的行为,所以它不起作用。对于这样的事情,你最好的选择是在两个渲染目标之间进行乒乓。
由于我从不使用相同的纹素同时阅读和书写,我认为它可以工作。
不幸的是,这没有用。实际上,移动设备上常见的扩展(特别是Mali和PowerVR GPU)允许您同时读写,但前提是它们是相同的纹素。 Google的“Pixel Local Storage”了解详情。