1
我创建了一个FBO并将纹理绑定为其颜色附件,并且我有多个着色器程序对纹理进行一些后期处理,所有内容效果很好,但对我来说纹理可以用作输入(sampler2D)以及着色器同时输出是没有意义的。纹理同时用作着色器程序的FBO颜色附件和sampler2D
以下是我所采取的步骤:
- 创建FBO
fboA
。 - 创建纹理
textureA
,并将其绑定为fboA
的颜色附件。 - 调用
glBindFrameBuffer
将fboA
绑定到帧缓冲区目标。使用着色器程序shaderA
。 - 致电
glDrawArrays
绘制一些东西(最终绘制在textureA
上,因为fboA
目前已绑定)。 - 致电
glUseProgram
使用着色器程序shaderB
其在片段着色器中具有sampler2D
制服。 - 绑定
textureA
作为sampler2D
统一着色器程序shaderB
。 - 在片段着色器中,
textureA
用于设置fragColor
。
我感到困惑的是最后两个步骤,其中textureA
作为片段着色器的输入,它仍然被绑定到当前帧缓存。在我看来,片段着色器正在读取和写入同一片内存,这不是一种未定义的行为,为什么它仍然正常工作?
谢谢,正是我想知道的。此外,我只是指向[反馈循环](https://www.khronos.org/opengl/wiki/Framebuffer_Object#Feedback_Loops)。 – neevek