1. 圖片顯示不完整
原因: 圖片被渲染到幀緩沖區(qū)后嘲恍,下一次屏幕刷新的時候, 會講幀緩沖區(qū)的內(nèi)容顯示到屏幕上雄驹。 如果在屏幕刷新的時候佃牛,圖片沒有完整的繪制完,可能就會出現(xiàn)一半圖片的情況医舆。
解決方案:為了解決圖片顯示不完整的問題俘侠,引入了雙緩沖區(qū)技術(shù)(Double Buffering)。 即有兩個緩沖區(qū)蔬将,顯示到屏幕上的叫屏幕緩沖區(qū)爷速,未顯示到屏幕上的叫離屏緩沖區(qū)。圖片渲染的時候霞怀,在離屏緩沖區(qū)渲染惫东,渲染完成后,兩個緩沖區(qū)交換毙石。這樣渲染完成的圖片就可以顯示出一張完整的圖片了廉沮。
2. 屏幕撕裂(Screen Tearing)
原因: 屏幕繪制是從左到右,從上到下逐行繪制的徐矩。 如果某一幀在繪制過程中滞时,屏幕緩沖區(qū)進行了交換,屏幕就會未繪制完的區(qū)域滤灯,開始繪制下一幀的同位置的圖形坪稽。
解決方案:為了解決這個問題曼玩,引入了垂直同步技術(shù)。即在屏幕繪制完成后窒百,發(fā)出一個信號黍判,接到信號后,緩沖區(qū)再進行交換篙梢。就相當于把屏幕繪制過程加了一把鎖样悟,等屏幕刷新完成后,再把鎖解開庭猩。這個信號叫垂直同步信號(Vsync),這個技術(shù)叫垂直同步技術(shù)陈症。
3. 掉幀(重復渲染同一幀數(shù)據(jù))
原因: 由于要等待離屏緩沖區(qū)渲染完成后蔼水, 再進行下一幀的繪制。就會出現(xiàn)這樣一個情況:當屏幕刷新時录肯,新的一幀沒有渲染完趴腋,它就只能重新渲染舊的幀,兩次刷新屏幕顯示的是同一幀论咏,這個現(xiàn)象叫做掉幀优炬。
解決方案:
- 為了優(yōu)化掉幀問題,引入了三級緩存技術(shù)厅贪,即又增加了一個離屏緩沖區(qū)蠢护。
- 在顯示屏幕緩沖區(qū) A 的同時,兩個離屏緩沖區(qū)也在同時的渲染接下來要顯示的兩個幀 B 和 C养涮。
- 當顯示 B 幀的時候葵硕,由于 C 幀是在A幀顯示的時候,就開始渲染贯吓,所以很可能 C 幀已經(jīng)渲染好了懈凹,這時候兩個離屏緩沖區(qū)可以開始渲染 D 幀和 E 幀。
-
這樣 CPU / GPU 不停的渲染接下來要顯示的兩幀悄谐,就可以大大緩解掉幀問題介评, 當然也不是完全的解決了掉幀問題,是合理的使用 CPU / GPU 來減少掉幀次數(shù)爬舰。