VSync的起源
顯示屏上一幀畫面的顯示過程,是像素自上而下逐行掃描的過程,如果在上一幀的掃描還沒有結束的情況下,屏幕又開始掃描下一幀的像素,那么就會出現如下圖中撕裂(tearing)的情況。
這個問題最初是在PC上被重視和解決的,GPU廠商開發出了一種防止屏幕被撕裂的技術方案,全稱Vertical Synchronization(中文名垂直同步,簡稱VSync)。基本思路就是在屏幕刷新之前向外提供一個信號,主機端根據此信號選擇合適的策略完成畫面的刷新,避免數據刷新和屏幕掃描不匹配(撕裂)的情況發生。所以VSync信號也叫做TE信號或VBlank信號。
下圖展示了開啟與關閉Vsync的狀態下,屏幕畫面的不同顯示情況。這里需要先說明一下傳統的顯示架構,主要有三部分組成,第一部分負責渲染,包含CPU,GPU及一些系統模塊;第二部分叫做幀緩沖,實質上是一塊內存塊,渲染完的數據會被保存在這塊內存中;第三部分是屏幕,用來繪制幀緩沖上的數據。一般來說幀緩沖會有兩塊,一塊叫做backbuffer,用來寫入渲染數據,一塊叫做frontbuffer,用來把渲染數據送給屏幕。這兩塊buffer的狀態是不斷變化的,也就是說當backbuffer被寫入完數據等待顯示時,它就變成了frontbuffer,而當frontbuffer的數據被顯示完畢之后,它就變成了backbuffer。
VSync off:
VSync on:
具體來說,硬件視角中的VSync其實就是一個電平信號,Panel上有一個單獨的引腳,主機端需要有一個單獨的GPIO與之相連,獲取其信號變化;軟件視角中的VSync其實就是一個GPIO的中斷,一般是上升沿的中斷,軟件根據此中斷完成相應的顯示邏輯。
-
Android
+關注
關注
12文章
3959瀏覽量
129184 -
PC
+關注
關注
9文章
2134瀏覽量
155796 -
信號
+關注
關注
11文章
2833瀏覽量
77704
發布評論請先 登錄
相關推薦
DLPC7541是如何設定TSTP輸出Vsync訊號?
無鉛焊接的起源:
VSYNC、HSYNC、DOTCLOCK是如何計算的?
DIY的歷史起源
雙層索引的起源圖查詢方法

基于圖的服務起源追蹤機制

簡述Vsync信號和View繪制流程之間的關系
Andriod中Vsync的背景

VSync的虛擬化與同步

Andriod中VSync的分發

VSync offset定義的方法

評論