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