Opengl/webgl(opengles) 环境下 FBO 使用不当可能出现如下错误:
GL_INVALID_OPERATION: Feedback loop formed between Framebuffer and active Texture.
出现这个问题的情景描述:
首先 创建一个 FBO对象实现 MRT的操作, framebufferTexture2D 绑定了两张 RTT 纹理(这里命名为: RTT0 和 RTT1),
即:
gl.framebufferTexture2D(fboTarget, attachment0, target, RTT0, 0);
gl.framebufferTexture2D(fboTarget, attachment1, target, RTT1, 0);
继续用同一个 FBO 接着实现RTT操作, framebufferTexture2D 只绑定了一张新的RTT纹理(这里命名为: RTT2)
即:
gl.framebufferTexture2D(fboTarget, attachment0, target, RTT2, 0);
而且这个绘制过程使用了 RTT1 作为可渲染对象的材质纹理。
于是就出现了 Feedback loop formed between Framebuffer and active Texture. 这个错误。
作为FBO的渲染目标纹理,是不能同在一个渲染过程中作为shader的纹理数据输入源。
解决方法:
在如上所述的情形下