【问题标题】:OpenGL 3.0 ES - Disjoint read and write from same textureOpenGL 3.0 ES - 从同一纹理中读取和写入不相交
【发布时间】:2019-08-12 16:10:21
【问题描述】:

我的情况是,我有一个 (n+1)x(n+1) 纹理附加到帧缓冲区。 我的想法是分两遍更新这个纹理。

  1. 绘制一个全屏四边形并使用剪刀测试来屏蔽最外面的 1 个像素,因此我写入纹理的 n x n 'inner'。

  2. 第二遍,我绘制线图元以写入最外层像素,并使用第 1 遍的结果作为输入更新相同的纹理。这一步的计算取决于第一遍计算的内部 (n x n) 网格的状态。

在第二遍中,我将绑定第一遍的结果以进行读写。我知道根据 OpenGL,这会产生未定义的行为,但由于我从不同时从同一个纹素读取和写入,我认为它可以工作。

这样做是个好主意,还是画一个全屏四边形更好,然后在我的 glsl 着色器中进行如下检查:

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

【问题讨论】:

    标签: opengl-es glsl textures framebuffer opengl-es-3.0


    【解决方案1】:

    正如你所说,OpenGL 说它是未定义的行为,所以它不会工作。对于这样的事情,最好的选择是在两个渲染目标之间进行 ping-pong。

    因为我从来没有同时从同一个地方读和写 纹素,我认为它可以工作。

    不幸的是,这无济于事。实际上,移动设备(尤其是 Mali 和 PowerVR GPU)上常见的扩展允许您同时读取和写入,但前提是它是 相同 纹素。谷歌“像素本地存储”了解详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      相关资源
      最近更新 更多