如何在OpenGL ES 2.0中使用可分离的过滤器着色器



我正在尝试在iOS应用程序中使用着色器进行图像处理。我可以使用一对着色器(顶点和片段)来过滤图像(例如垂直或水平模糊),但如果我需要先应用垂直模糊,然后应用水平模糊,那又如何呢。我应该如何在render()函数中链接这些操作?

一些代码示例将非常棒!

你真的没什么可做的。在开始下一步之前,你需要从模糊的一步开始填充缓冲区。你能做的最好的事情是第一次通过绘制到纹理,然后第二次通过重绘到主缓冲区。一般来说,如果你有超过2次的过程,你将需要2个纹理,然后在每次过程后交换:用第一个着色器绘制图像到texture1,第二个从texture1到texture2,第三个从texture 2到texture 1…

因此,您需要的是一个帧缓冲区对象(FBO),这意味着只需生成一个新的帧缓冲区和一个具有所需大小的纹理(您很可能需要使用POT纹理),将纹理作为颜色附件glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, targetTexture, 0);附加到帧缓冲区。

完成此操作后,您将面临几乎标准的绘图过程。只需绑定这个帧缓冲区即可绘制,设置视口,设置矩阵(如果有的话)。。。所有这些都将被绘制到纹理中,就好像它是主缓冲区一样。

绘制完纹理后,可以使用该纹理将其绘制回主缓冲区。只需绑定主缓冲区并绑定FBO中的纹理,而不是原始图像中的纹理。代码的其余部分应该相同。

最新更新