在多个FBO之间使用双FBO切换

时间:2019-07-04 03:13:42

标签: opengl-es opengl-es-2.0 opengl-es-3.0

我正在使用GLES(例如GPUImage)在移动设备上实现相机滤镜应用程序。

为了创建最终的过滤图像,需要在先前过滤的图像上渲染子过滤器。我的方法是为每个过滤步骤创建多个FBO。

例如,如果我使用三个过滤器来获得最终结果,则创建3个FBO。绑定FBO1并进行绘制,然后使用FBO1纹理绘制等等来绑定FBO2。

但是,由于当我使用FBO2纹理绘制到FBO3时不需要FBO1的内容,因此,如果我重新使用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();

...

1 个答案:

答案 0 :(得分:0)

为了提高性能,我怀疑这真的有什么区别吗-您正在执行相同数量的API调用。

最大的不同可能是内存占用量-少量FBO之间循环,因此与具有唯一性的方案相比,在单个框架内多次重复使用它们的附件将减少您需要分配的表面总数。每个渲染通道的附件。