2016-03-08 57 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

這個猜測假設當您渲染第三個而不是第一個對象時,這意味着更經常地更改綁定。第二個猜測:如果你的附加幀緩衝區是用於渲染到紋理的,而你的第一個是系統爲了將你連接到屏幕而做的任何事情,那麼顯然存在潛在的性能差異,因爲輸出目標可能不是相同的格式。

相關問題