本章实现了简单的图片组合滤镜效果,可以调整图片的饱和度和色温。
实现滤镜效果的主要是思路就两步:
1.将图片原始纹理作为输入,使用片段着色器处理后得到新的纹理。
2.将第一步中处理过后的纹理,当做第二个片段着色器的纹理输入,最后输出。
从上面两步,其实我们就可以知道,多重滤镜的叠加,其实就是重复这个流程,GPUImage中的滤镜链,基本上也是这个思路,有时间可以研究一下。不过最重要的,还是滤镜算法的实现:glsl代码的编写。(只会看,不会写(╯﹏╰))
下面贴出一些代码中比较重要的部分
1.使用两个program来管理纹理输入
代码中使用了两个program来输出两个纹理。_satProgramHandle用来处理原始图片输入纹理,通过改变图片的饱和度,输出一个新纹理。_tempProgramHandle处理上面输出的纹理,通过改变纹理色温,输出新纹理,并渲染到上下文。glsl具体代码在.fsh文件中。
2.这个通过图片,创建纹理1(GL_TEXTURE1),作为_satProgramHandle的输入纹理
下面就是将纹理1输入到Program中,这样就完成了我整个流程的第一步。当然这里只是截取了部分代码,整体流程还需要去项目中看。
3.创建一个帧缓冲,激活一个新纹理GL_TEXTURE0,将饱和度纹理绑定到_satTexture中,作为_tempProgram的输入纹理0
这样我们的两个输入纹理就完成了
使用两个Program分别将这两个输入纹理依次输出到相应为缓冲区,最后渲染到context中,最后的渲染代码比较多,这里就不贴图了, 所有代码都在这里。