2016-03-08 153 views
0

我在3个FBO中进行渲染,所以我有3次通过。而当我调用glBindFramebuffer()时导致第三个FBO导致我的应用程序以较低的fps运行。如果我在所有3次传球中只使用第三FBO进行渲染,我会得到相同的FPS,但如果我使用第一FBO渲染所有3次传球,我会获得更高的FPS。什么可能是这种行为的原因?glBindFramebuffer导致OpenGLES性能下降

回答

0

由于保留下一个绑定的内容所涉及的复杂性,在ES中经常存在非直接的成本来解除绑定帧缓冲区。然而,你通常并不想要保存内容 - 例如对于用户可以实际看到的缓冲区,您几乎总是可以清除,绘制几何图形,呈现,结束绘制循环;清晰,绘制几何图形,呈现,结束绘图循环;等等。所以保留下一个绑定的缓冲区的内容没有任何好处。一旦它被呈现出来,你将永远不会再看内容。

在ES 3下,您可以使用glInvalidateFramebuffer;如果您的GPU和平台支持它,请使用ES 2下的EXT_discard_framebuffer

这个猜测假设当您渲染第三个而不是第一个对象时,这意味着更经常地更改绑定。第二个猜测:如果你的附加帧缓冲区是用于渲染到纹理的,而你的第一个是系统为了将你连接到屏幕而做的任何事情,那么显然存在潜在的性能差异,因为输出目标可能不是相同的格式。