我正在移动设备上使用像GPUImage这样的GLES实现相机滤镜应用程序。
为了创建最终的过滤图像,需要在之前过滤的图像上渲染子过滤器。我的方法是为每个过滤步骤创建多个FBO。
例如,如果我使用三个过滤器来获得最终结果,则创建3个FBO。绑定FBO1和draw,然后使用FBO1 texture draw绑定FBO2,依此类推。
但是,由于我在使用FBO2纹理绘制FBO3时不需要FBO的内容,所以如果我重新使用FBO1而不是FBO3,那么我不需要创建很多FBO。
我不确定哪一个更好,或者任何性能优势,只是为每个过滤器步骤创建多个FBO?或者在第一和第二FBO之间切换。提前谢谢。
我给出了一些代码示例。
glBindFramebuffer(fbo1);
glClear();
glBindTexture(camera-texture);
draw();
glBindFramebuffer(fbo2);
glClear();
glBindTexture(fbo1-texture);
draw();
glBindFramebuffer(fbo3);
glClear();
glBindTexture(fbo2-texture);
draw();
...
or
If i swtich FBOs..
glBindFramebuffer(fbo1);
glBindTexture(camera-texture);
glClear();
draw();
glBindFramebuffer(fbo2);
glClear();
glBindTexture(fbo1-texture);
draw();
glBindFramebuffer(fbo1);
glClear();
glBindTexture(fbo2-texture);
draw();
...发布于 2019-07-04 20:34:52
对于性能,我怀疑这是否真的有什么不同--您正在执行相同数量的API调用。
最大的区别可能是内存占用-在少量FBO之间循环,因此在单个帧内多次重复使用其附件,与每个渲染过程具有唯一附件的方案相比,将减少需要分配的曲面总数。
https://stackoverflow.com/questions/56880196
复制相似问题