我在3个FBO中进行渲染,所以我有3次传球。当我调用glBindFramebuffer()时渲染到第3个FBO,导致我的应用程序以较低的fps运行。如果我只是在所有3次传球中使用第3个FBO渲染,我得到相同的fps但是如果我使用第一个FBO在所有3个传球中渲染我得到更高的fps。这种行为可能是什么原因?
答案 0 :(得分:0)
由于保留下一个绑定的内容所涉及的复杂性,ES中解锁帧缓冲区的成本通常不直观。但是,您通常不希望保留内容 - 例如对于缓冲区,用户实际上可以看到你几乎总是清晰,绘制几何,呈现,结束绘图循环;清晰,绘制几何,呈现,结束绘制循环;因此,为下一次绑定保留缓冲区的内容没有任何好处。一旦它被呈现,你再也不会看内容了。
在ES 3下,您可以使用glInvalidateFramebuffer
发出信号;如果您的GPU和平台支持它,请在ES 2下使用EXT_discard_framebuffer。
当然,这种猜测假设当你渲染到第三个而不是第一个对象时,这意味着更频繁地更改绑定。
第二个猜测:如果您的额外帧缓冲区用于渲染到纹理,而您的第一个是系统将您桥接到屏幕所做的任何事情,那么显然存在潜在的性能差异,因为输出目标可能不相同格式。