VSync的起源
顯示屏上一幀畫面的顯示過(guò)程,是像素自上而下逐行掃描的過(guò)程,如果在上一幀的掃描還沒(méi)有結(jié)束的情況下,屏幕又開(kāi)始掃描下一幀的像素,那么就會(huì)出現(xiàn)如下圖中撕裂(tearing)的情況。
這個(gè)問(wèn)題最初是在PC上被重視和解決的,GPU廠商開(kāi)發(fā)出了一種防止屏幕被撕裂的技術(shù)方案,全稱Vertical Synchronization(中文名垂直同步,簡(jiǎn)稱VSync)。基本思路就是在屏幕刷新之前向外提供一個(gè)信號(hào),主機(jī)端根據(jù)此信號(hào)選擇合適的策略完成畫面的刷新,避免數(shù)據(jù)刷新和屏幕掃描不匹配(撕裂)的情況發(fā)生。所以VSync信號(hào)也叫做TE信號(hào)或VBlank信號(hào)。
下圖展示了開(kāi)啟與關(guān)閉Vsync的狀態(tài)下,屏幕畫面的不同顯示情況。這里需要先說(shuō)明一下傳統(tǒng)的顯示架構(gòu),主要有三部分組成,第一部分負(fù)責(zé)渲染,包含CPU,GPU及一些系統(tǒng)模塊;第二部分叫做幀緩沖,實(shí)質(zhì)上是一塊內(nèi)存塊,渲染完的數(shù)據(jù)會(huì)被保存在這塊內(nèi)存中;第三部分是屏幕,用來(lái)繪制幀緩沖上的數(shù)據(jù)。一般來(lái)說(shuō)幀緩沖會(huì)有兩塊,一塊叫做backbuffer,用來(lái)寫入渲染數(shù)據(jù),一塊叫做frontbuffer,用來(lái)把渲染數(shù)據(jù)送給屏幕。這兩塊buffer的狀態(tài)是不斷變化的,也就是說(shuō)當(dāng)backbuffer被寫入完數(shù)據(jù)等待顯示時(shí),它就變成了frontbuffer,而當(dāng)frontbuffer的數(shù)據(jù)被顯示完畢之后,它就變成了backbuffer。
VSync off:
VSync on:
具體來(lái)說(shuō),硬件視角中的VSync其實(shí)就是一個(gè)電平信號(hào),Panel上有一個(gè)單獨(dú)的引腳,主機(jī)端需要有一個(gè)單獨(dú)的GPIO與之相連,獲取其信號(hào)變化;軟件視角中的VSync其實(shí)就是一個(gè)GPIO的中斷,一般是上升沿的中斷,軟件根據(jù)此中斷完成相應(yīng)的顯示邏輯。
-
Android
+關(guān)注
關(guān)注
12文章
3945瀏覽量
127927 -
PC
+關(guān)注
關(guān)注
9文章
2102瀏覽量
154656 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2804瀏覽量
77099
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
無(wú)鉛焊接的起源:
VSYNC、HSYNC、DOTCLOCK是如何計(jì)算的?
CDMA技術(shù)的起源
CDMA技術(shù)的起源
DIY的歷史起源
雙層索引的起源圖查詢方法
![雙層索引的<b class='flag-5'>起源</b>圖查詢方法](https://file.elecfans.com/web2/M00/49/75/poYBAGKhwLiAd1EpAAAX9pIz4Ng843.jpg)
基于圖的服務(wù)起源追蹤機(jī)制
![基于圖的服務(wù)<b class='flag-5'>起源</b>追蹤機(jī)制](https://file.elecfans.com/web2/M00/49/7F/poYBAGKhwL6AJ51kAAAXadCSO-I134.jpg)
簡(jiǎn)述Vsync信號(hào)和View繪制流程之間的關(guān)系
Andriod中Vsync的背景
![Andriod中<b class='flag-5'>Vsync</b>的背景](https://file1.elecfans.com/web2/M00/B1/A5/wKgZomVcY_6Adv55AAHRJXVruK4208.jpg)
VSync的虛擬化與同步
![<b class='flag-5'>VSync</b>的虛擬化與同步](https://file1.elecfans.com/web2/M00/B1/A6/wKgZomVcZq6ASqbxAABXzxwloso315.jpg)
Andriod中VSync的分發(fā)
![Andriod中<b class='flag-5'>VSync</b>的分發(fā)](https://file1.elecfans.com/web2/M00/AF/E3/wKgaomVcaU-ADZS8AAAMk6egSf0779.jpg)
VSync offset定義的方法
![<b class='flag-5'>VSync</b> offset定義的方法](https://file1.elecfans.com/web2/M00/AF/E3/wKgaomVcaweAVppaAABBsCFjiiE498.jpg)
評(píng)論