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的中斷,一般是上升沿的中斷,軟件根據此中斷完成相應的顯示邏輯。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
相關推薦
突然有個想法 RISC--V的起源是什么?
發表于 05-24 08:03
無鉛焊接的起源:由于環境保護的要求,特別是ISO14000的導入,世界大多數國家開始禁止在焊接材料中使用含鉛的成分。 日本在2004年禁止生產或銷售使用有鉛材料焊接的電子生產設備。歐美在2006年
發表于 08-11 14:21
一點關于混沌與控制起源的資料與大家分享。
發表于 03-01 22:06
你好我打算在sp605中實現sobel邊緣檢測(我有這個開發板)我想去尋找簡單的vga驅動程序我可以將R,G,B和HSYNC連接到J55中可用的四個I / O,但不能連接VGA所需的VSYNC,因為J55只有四個I / O.請建議我如何駕駛所有五個R,G,B,HSYNC和VSYN
發表于 10-29 08:13
與 LCDIFv2。 這是唯一的變化嗎-VIDEO_MUX->VID_MUX_CTRL.SET = VIDEO_MUX_VID_MUX_CTRL_PARA_LCD_SEL_MASK;VSYNC、HSYNC、DOTCLOCK 是如何計算的?
發表于 03-14 09:42
CDMA技術的起源
擴頻技術的起源要追溯到二戰時期,這種思想的初衷是防止敵方對己方通訊的干擾。我們知道,由于窄帶通訊采用的帶寬只
發表于 06-15 09:40
?961次閱讀
DIY的歷史起源
DIY起源與用法DIY是英文Do It Yourself的縮寫,可以正式譯為自己動手做,但通常不需詳譯人們也大都能理解其意義。DIY原
發表于 01-21 10:47
?3446次閱讀
為解決現有的起源圖查詢效率低和資源占用率高的問題,考慮起源信息和數據本身之間的關聯關系以及起源信息內部結構特點,提出了一種基于雙層索引結構的起源圖查詢方法。首先,面向
發表于 12-07 10:04
?0次下載
針對服務起源數據存儲在關系型數據庫和文檔型數據庫中無法提供高效的服務追蹤以及采用圖形數據庫存儲無法進行快速聚合運算等問題,提出了一種基于圖的服務起源追蹤機制。該機制以圖形數據庫存儲服務起源數據為
發表于 12-17 10:58
?0次下載
PCB經驗分享之噪聲的起源
發表于 02-11 15:15
?0次下載
vsync是有兩個信號的,
一個是vsync-app用于生成當前幀的數據;(CPU計算和GPU渲染)
一個用于消費數據(合成圖像到Display上,vsync-surface) 。
發表于 02-02 11:18
?846次閱讀
Android的顯示系統一直使用雙緩沖和VSync來防止屏幕畫面發生撕裂現象,這也是其他系統的常規操作。Android的不同之處是將VSync運用到繪制系統中,作為黃油計劃(Project
發表于 11-21 16:13
?331次閱讀
VSync的虛擬化 由上面的介紹可以知道,VSync其實起源于顯示屏,但是想想如果每個App和SurfaceFlinger都去從硬件驅動中直接監聽VSync,那未免有點太復雜了,而且耦
發表于 11-21 16:23
?686次閱讀
App與SurfaceFlinger是不同的進程,它們之間傳遞VSync的話涉及到進程間通信,而且VSync頻率很高,App很多,所以VSync的分發效率要很高才行。Linux進程間通信方式總共
發表于 11-21 16:32
?865次閱讀
VSync-offset/duration 虛擬化后的VSync還有一個好處,就是可以對VSync進行一些定制操作,offset就是其中之一。 接下來就是offset的定義,offset 分為兩大類
發表于 11-21 16:57
?1073次閱讀
評論