你好
我想使用OpenGL ES将多个图像处理效果应用于输入纹理。
我成功地使用Framebuffer对象来应用一个后期处理效果,但我不太明白,如果不重复我的过程中的每一步,我可以应用多种后期处理效果,而无需每次都重做每一步。
我现在要完成的步骤如下:
根据我的理解,我需要用我的其他后期处理着色器重复步骤5,6,7并使用我在步骤8中最终得到的纹理,但我不认为这是正确的方法,因为它会迫使我从FBO读取数据到纹理,然后重新传输它们,这真的很省钱。
我错过了什么吗?
如果您的2个后处理效果可以在一个着色器中完成,那么您应该这样做,因为读取和写入整个帧缓冲区的内存带宽成本通常使一些额外着色器计算的成本相形见绌,因此效率更高。
然而,许多后处理效果需要对先前后处理过程的完成结果进行操作。典型的解决方案是在它们之间设置两个FBO和“乒乓”。所以,如果你有3个需要链接的后期处理效果,你将获得3次传递:
我认为你缺少的是你可以直接使用帧缓冲的纹理而不必创建一个填充了glReadPixels
数据的全新纹理。这个tutorial可能有所帮助。