OpenGL 3.0 ES - 从相同的纹理中分离读取和写入

问题描述 投票:0回答:1

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

  1. 绘制一个全屏四边形并使用剪刀测试来掩盖最外面的1个像素,因此我写入纹理的n x n'内部'。
  2. 第二遍,我绘制线基元以写入最外面的像素,并使用第1遍的结果作为输入更新相同的纹理。该步骤的计算取决于在第一遍中计算的内(n×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个回答
2
投票

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

由于我从不使用相同的纹素同时阅读和书写,我认为它可以工作。

不幸的是,这没有用。实际上,移动设备上常见的扩展(特别是Mali和PowerVR GPU)允许您同时读写,但前提是它们是相同的纹素。 Google的“Pixel Local Storage”了解详情。

© www.soinside.com 2019 - 2024. All rights reserved.