gpt4 book ai didi

Opengl 和 Webgl : sampling from a texture attached to current framebuffer

转载 作者:行者123 更新时间:2023-12-01 22:08:39 24 4
gpt4 key购买 nike

我有一个带有两个纹理 t0t1 的帧缓冲区。

在第一遍中,我使用多个片段着色器输出渲染它们。

在第二遍之前,我执行以下操作:

  • 打开一个只有一个输出的着色器
  • 绑定(bind)t1到一个纹理单元
  • 调用 glDrawBuffers 禁止写入 t1 的附件

请注意,t1 用于采样,但它仍然绑定(bind)到当前帧缓冲区。据我了解,这种配置中没有环回。

在 OpenGL 和 WebGL 中都合法吗?

我做了一个 example它在 Linux 下的 Chrome 和 Firefox 中完美运行,但在 Windows 的两种浏览器中呈现黑屏。是 D3D 支持的 Webgl 实现中的原因,并且它是积极的纹理解除绑定(bind),如所指出的那样 here

最佳答案

As I understand, there are no loopbacks in such configuration.

但是有一个。

在 GL 4.5 之前的版本(包括 WebGL)中,feedback loops每当您从当前附加到帧缓冲区的纹理中读取时都会发生。此刻不给它写信也没关系。您现在不能写入它并不重要。只要它附加到帧缓冲区,您就会从读取到它的过程中得到未定义的行为(除非它们是从未附加的 mipmap 级别读取的)。

post-GL 4.5 (其中 包括 WebGL)或使用纹理屏障扩展,这很轻松。但还不足以解决你的问题。当您尝试从仍然附加到帧缓冲区的图像中读取在先前调用中写入的像素时,UB 仍然会被触发。

因此,您必须更改 FBO 以便不再附加图像,或者您必须发出纹理屏障(如果您可以访问 4.5/ARB/NV_texture_barrier,在桌面 GL 上您可能这样做)。

关于Opengl 和 Webgl : sampling from a texture attached to current framebuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com