OpenGL:使用深度附件渲染到FBO,同时从相同深度纹理读取,glDepthMask为false

时间:2016-06-04 02:40:50

标签: opengl textures fbo

我知道在同时从附加到此FBO的深度纹理中提取到FBO时是错误的(至少没有texture_barrier扩展)。

但是,如果glDepthMask为false,这样做也是错误的吗?

1 个答案:

答案 0 :(得分:2)

反馈循环不是错误;他们是未定义的行为。如果它们是错误的,你可以尝试一下,看它是否失败。

如果您没有使用GL 4.5或ARB_texture_barrier(或NV_texture_barrier)不可用,那么按照您的建议进行将产生未定义的行为。

rules for feedback loops before that feature非常严厉。这些规则只关心附加和约束的内容。将纹理附加到FBO并将其绑定以供着色器访问的简单操作会调用未定义的行为。唯一可以阻止它的状态是使用mipmap base / max levels来使着色器无法访问附加到FBO的mipmap级别。

如果您确实可以访问GL 4.5 / ARB_texture_barrier / NV_texture_barrier,那么它应该可以工作......只要您在切换到阅读之前使用屏障。新文本清楚地表明它正在读取已经写入的数据(通过片段着色器输出),这是问题,深度掩码可以防止写入发生。使用纹理障碍,您可以将以前写入的数据提供给着色器。