OpenGL 3.0 ES-与同一纹理读取和写入



我处于一个(n 1)x(n 1)纹理上的纹理上的情况。我的想法是在2次中更新此纹理。

  1. 绘制全屏四边形,并使用剪刀测试掩盖最外层的1像素,因此我写入纹理的n x n'内部'。

  2. 第二次通过,在其中我绘制线原语将写入最外面的像素,并使用PASS 1作为输入的结果来更新相同的纹理。此步骤上的计算取决于在第一个通过中计算的内部(n x n)网格的状态。

在第二次通过中,我将约束阅读和写作的第一个通过的结果。我知道,根据OpenGL,这会产生不确定的行为,但是由于我从不同时阅读和写作,所以我认为它可以起作用。

这样做是一个好主意,还是绘制全屏四边形也许更好,而在我的GLSL着色器中进行检查,例如:

if (gl_FragCoord.x == 0.5 || gl_FragCoord.x == n + 0.5){
   ...
}

正如您所说,OpenGL说这是不确定的行为,因此它行不通。这样的最佳选择是在两个渲染目标之间乒乓球。

因为我从不同时阅读和写作 Texels,我认为它可以起作用。

不幸的是,这无济于事。实际上,在移动设备(尤其是Mali和PowerVR GPU)上有一些延伸,可以同时读写和写入,但前提是相同 texels。Google"像素本地存储"以获取详细信息。

最新更新