我处于将(n + 1)x(n + 1)纹理附加到帧缓冲区的情况。 我的想法是在2次通过后更新此纹理。
绘制一个全屏四边形并使用剪刀测试掩盖最外面的1个像素,因此我写入了纹理的n x n“内部”。
第二遍,我绘制线图元以写入最外面的像素,并使用第一遍的结果作为输入来更新相同的纹理。此步骤的计算取决于在第一遍计算的内部(n x n)网格的状态。
在第二遍中,我将绑定第一遍的结果以进行读取和写入。我知道根据OpenGL,这会产生不确定的行为,但是由于我从来没有从相同的纹理像素同时进行读写,所以我认为它可以工作。
这样做是个好主意,还是绘制全屏四边形可能更好,然后在我的glsl着色器中进行如下检查:
if (gl_FragCoord.x == 0.5 || gl_FragCoord.x == n + 0.5){
...
}
答案 0 :(得分:2)
正如您所说,OpenGL表示这是未定义的行为,因此它将无法工作。最好的选择是在两个渲染目标之间进行乒乓球。
由于我从不同时从同一本书中读写 纹素,我认为它可以工作。
不幸的是,这没有帮助。实际上,在移动设备(尤其是Mali和PowerVR GPU)上有一些常见的扩展,这些扩展允许您同时读取和写入,但前提是 same 像素。有关详细信息,请使用Google“ Pixel本地存储”。