将纹理的 alpha 替换到着色器中
Replace alpha for texture into the shader
我尝试在我的着色器中实现景深效果。在着色器中,我有颜色纹理 + 模糊偏移。我需要为 RGB 和我自己的 A 通道添加偏移量,这是我之前在着色器中创建的。如何一步替换 alpha 通道?我在 GLSL 函数中找不到合适的东西。
谢谢!
是的,可以使用纹理(或图像)作为输入和输出,但您不应该这样做。
OpenGL 驱动程序需要知道什么是输入,什么是输出,因此它可以正确地同步操作(例如,对纹理的读取应该等待对同一纹理的写入完成... )
OpenGL 4.2 引入了图像 Load/Store,一种读取和写入图像的方法,但您必须自己管理同步(使用 barrier()
和 *Barrier()
调用)。它适用于必须同时读取和写入的数据,例如原子计数器、透明度值...
在您的例子中,有两组数据:颜色和偏移量。一个只能读取,另一个只能写入。最好将两者分开并简单地将它们视为常规 inputs/outputs(纹理 binding/FBO 附件)。如果你对两组使用一个纹理,它将被视为一个实体来同步,从而导致在其他地方有更多的等待。
我尝试在我的着色器中实现景深效果。在着色器中,我有颜色纹理 + 模糊偏移。我需要为 RGB 和我自己的 A 通道添加偏移量,这是我之前在着色器中创建的。如何一步替换 alpha 通道?我在 GLSL 函数中找不到合适的东西。 谢谢!
是的,可以使用纹理(或图像)作为输入和输出,但您不应该这样做。
OpenGL 驱动程序需要知道什么是输入,什么是输出,因此它可以正确地同步操作(例如,对纹理的读取应该等待对同一纹理的写入完成... )
OpenGL 4.2 引入了图像 Load/Store,一种读取和写入图像的方法,但您必须自己管理同步(使用 barrier()
和 *Barrier()
调用)。它适用于必须同时读取和写入的数据,例如原子计数器、透明度值...
在您的例子中,有两组数据:颜色和偏移量。一个只能读取,另一个只能写入。最好将两者分开并简单地将它们视为常规 inputs/outputs(纹理 binding/FBO 附件)。如果你对两组使用一个纹理,它将被视为一个实体来同步,从而导致在其他地方有更多的等待。