我有一个WebGL项目,它使用两个渲染通道在纹理上创建效果。一切正常,直到最近Chrome开始抛出此错误:
尽管我没有更改代码,但这个问题刚刚开始出现,我猜测是由于新的更新引起的。
我在SO上找到了这个答案,其中指出错误“每当你从当前附加到帧缓冲区的纹理中读取时就会发生”。
然而,我已经检查了我的代码100次,我不认为我正在这样做。所以这是我设置的方式。
创建一个具有统一采样器的片段着色器。
创建帧缓冲区。
为了清理,我解除绑定帧缓冲:
[.WebGL-0000020DB7FB7E40] GL_INVALID_OPERATION: Feedback loop formed between Framebuffer and active Texture.
尽管我没有更改代码,但这个问题刚刚开始出现,我猜测是由于新的更新引起的。
我在SO上找到了这个答案,其中指出错误“每当你从当前附加到帧缓冲区的纹理中读取时就会发生”。
然而,我已经检查了我的代码100次,我不认为我正在这样做。所以这是我设置的方式。
创建一个具有统一采样器的片段着色器。
uniform sampler2D sampler;
创建2个纹理
var texture0 = initTexture(); // This function does all the work to create a texture
var texture1 = initTexture(); // This function does all the work to create a texture
创建帧缓冲区。
var frameBuffer = gl.createFramebuffer();
然后我通过上传一个html图像到texture0并将texture0绑定到采样器来启动"2 pass processing"。
接下来,我绑定帧缓冲并调用 drawArrays:
gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture1, 0);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
为了清理,我解除绑定帧缓冲:
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
编辑:
在我的代码中添加断点后,我发现实际上只有当我绑定了空帧缓冲区时,错误才会被抛出。因此,drawArrays 调用并没有引起错误,而是在之后绑定空帧缓冲区时引起的。