在与多个 FBO 之间使用双 FBO 切换
Using double FBO switching between vs Multiple FBO
我正在移动设备上使用 GPUImage 等 GLES 实现相机滤镜应用程序。
为了创建最终的过滤图像,需要在先前过滤的图像上渲染子过滤器。我的方法是为每个过滤步骤创建多个 FBO。
例如,如果我使用三个过滤器来获得最终结果,则创建 3 个 FBO。绑定FBO1并绘制,接下来绑定FBO2使用FBO1纹理绘制等。
但是,由于当我使用 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();
...
对于性能,我怀疑它是否真的有任何区别 - 您进行的 API 调用次数相同。
最大的区别可能是内存占用 - 在少量 FBO 之间循环并因此在单个帧内多次重复使用它们的附件,与您在其中分配的方案相比,将减少您需要分配的表面总数每个渲染过程都有唯一的附件。
我正在移动设备上使用 GPUImage 等 GLES 实现相机滤镜应用程序。
为了创建最终的过滤图像,需要在先前过滤的图像上渲染子过滤器。我的方法是为每个过滤步骤创建多个 FBO。
例如,如果我使用三个过滤器来获得最终结果,则创建 3 个 FBO。绑定FBO1并绘制,接下来绑定FBO2使用FBO1纹理绘制等。
但是,由于当我使用 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();
...
对于性能,我怀疑它是否真的有任何区别 - 您进行的 API 调用次数相同。
最大的区别可能是内存占用 - 在少量 FBO 之间循环并因此在单个帧内多次重复使用它们的附件,与您在其中分配的方案相比,将减少您需要分配的表面总数每个渲染过程都有唯一的附件。