我尝试在着色器中实现DOF效果。在着色器中,我有颜色纹理+偏移以模糊。我需要为RGB和我自己的A通道添加偏移量,这是我之前在着色器中创建的。如何一步替换alpha通道?我无法找到适合GLSL功能的东西。 谢谢!
答案 0 :(得分:1)
是的,可以使用纹理(或图像)作为输入和输出,但你不应该这样做。
OpenGL驱动程序需要知道输入是什么以及输出是什么,因此它可以正确地同步操作(例如,对纹理的读取应该等待对相同纹理的写入完成...)< / p>
OpenGL 4.2引入了图像加载/存储,这是一种读取和写入图像的方式,但您必须自己管理同步(使用barrier()
和*Barrier()
调用)。它意味着必须同时读取和写入的数据,例如原子计数器,透明度值......
在您的情况下,有两组数据:颜色和偏移。一个只会被读取,另一个只会被写入。最好将两者分开并简单地将它们视为常规输入/输出(纹理绑定/ FBO附件)。如果你为这两个集使用了一个纹理,那么它将被视为一个要同步的实体,从而导致更多的等待在其他地方。