intro dx11书中介绍的方法,将blur过程分成两部分,一部分作垂直方向blur,一部分做水平方向的blur,因而需要两个纹理缓冲区,一个输入的,一个输出的。
例如纹理A和纹理B。
步骤如下:
将纹理A绑定到SRV,作为compute shader的输入
将纹理B绑定到UAV,作为compute shader的输出 ---暂时存放第一次blur的结果
然后将thread groups分配为水平(也可以先垂直)的blur操作,纹理B存放的就是水平blur的结果BlurH(I),I是最初的输入纹理。
之后翻转,绑定B到SRV,作为输入---这时候B中存放的是之前水平blur后的结果
绑定A到UAV作为输出,然后将线程组执行垂直(水平)的blur操作,得到最后的结果 Blur(I) = BlurV(BlurH(I))。