一種縮短圖像延遲的方法、裝置和虛擬現(xiàn)實設備的制造方法
【專利摘要】本發(fā)明公開一種縮短圖像延遲的方法、裝置以及虛擬現(xiàn)實設備,該方法包括:將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知應用繪制下一幀圖像;在刷新當前幀圖像的剩余行內(nèi)容時,將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;當收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將該應用繪制的下一幀圖像的剩余行內(nèi)容更新到幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。本發(fā)明的技術方案不改變系統(tǒng)原有幀緩沖區(qū)的大小,通過控制將應用繪制的圖像更新到幀緩沖區(qū)的時機,來縮短圖像延遲,優(yōu)化了用戶體驗。
【專利說明】
一種縮短圖像延遲的方法、裝置和虛擬現(xiàn)實設備
技術領域
[0001]本發(fā)明涉及虛擬現(xiàn)實技術領域,具體涉及一種縮短圖像延遲的方法、裝置和虛擬現(xiàn)實設備。
【背景技術】
[0002]近年來,隨著虛擬現(xiàn)實(Virtual Reality,簡稱VR)技術的逐步成熟,各種虛擬現(xiàn)實設備陸續(xù)出現(xiàn)。因為Android開源的特性以及完善的生態(tài)系統(tǒng),很多虛擬現(xiàn)實設備都基于Android系統(tǒng)開發(fā)而成。
[0003]現(xiàn)有Android應用的顯示過程一般包含兩個部分:應用側繪制和系統(tǒng)側渲染。例如,Andro id應用調(diào)用SurfaceFlinger服務把經(jīng)過測量、布局和繪制后的Surf ace清染到顯示屏幕上。一般在繪制圖像的時候,都會采用一種稱為“雙緩沖”的技術。雙緩沖意味著要使用兩個緩沖區(qū)(SharedBufferStack),其中一個稱為FrontBuffer,另外一個稱為BackBuffer。顯不端 Di sp lay 處理 FrontBuf fer,CPU (Central Processing Unit,中央處理器)和GPU(Graphics Processing Unit,圖形處理器)處理BackBuffer?;陲@示刷新機制,圖像總是先在BackBuffer中繪制,然后再和FrontBuffer交換,清染到顯示屏幕上。
[0004]在虛擬現(xiàn)實系統(tǒng)中,有一個非常關鍵的指標就是運動到顯示的延遲,例如,從用戶頭部位置發(fā)生變化,到應用根據(jù)這個變化繪制出相應的圖像并最終在顯示屏上顯示出來所需要的時間。為了得到較佳的用戶體驗,這個時間必須非常小,讓用戶完全感覺不到是最好的。如果延遲太大的話,會讓用戶感覺圖像抖動以及出現(xiàn)眩暈感,用戶體驗很差。但是,因為Android系統(tǒng)并非為虛擬現(xiàn)實設備而設計,所以Android現(xiàn)有的圖像顯示導致了虛擬現(xiàn)實設備的圖像從渲染到顯示會出現(xiàn)比較大的延遲,用戶體驗不佳。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供了一種縮短圖像延遲的方法、裝置和虛擬現(xiàn)實設備,以解決采用Android的圖像顯示導致虛擬現(xiàn)實設備的圖像從渲染到顯示會出現(xiàn)比較大的延遲,用戶體驗不佳。
[0006]根據(jù)本發(fā)明的一個方面,提供了一種縮短圖像延遲的方法,該方法包括:
[0007]將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知應用繪制下一幀圖像;
[0008]在刷新當前幀圖像的剩余行內(nèi)容時,將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;
[0009]當收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將該應用繪制的下一幀圖像的剩余行內(nèi)容更新到幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。
[0010]可選地,預定行可根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間進行調(diào)整。
[0011]可選地,將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中包括:
[0012]將應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中,或者,將應用在系統(tǒng)的幀緩沖區(qū)中繪制下一幀圖像的前預定行內(nèi)容直接更新。
[0013]可選地,將應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中包括:
[0014]將應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中一次性更新到系統(tǒng)的幀緩沖區(qū)中;或者,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。
[0015]可選地,將應用在系統(tǒng)的幀緩沖區(qū)中繪制下一幀圖像的前預定行內(nèi)容直接更新包括:
[0016]對應用每次采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容更新到系統(tǒng)幀緩沖區(qū)中。
[0017]根據(jù)本發(fā)明的另一個方面,提供了一種縮短圖像延遲的裝置,該裝置包括:
[0018]刷新單元,用于將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知幀圖像繪制單元繪制下一幀圖像;
[0019]幀圖像繪制單元,用于根據(jù)刷新單元的通知繪制下一幀圖像;
[0020]幀圖像更新單元,用于在刷新單元刷新當前幀圖像的剩余行內(nèi)容時,將幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;并當刷新單元收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將幀圖像繪制單元繪制的下一幀圖像的剩余行內(nèi)容更新到幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。
[0021]可選地,刷新單元,具體用于根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間調(diào)整預定行。
[0022]可選地,幀圖像更新單元包括:第一更新子單元和第二更新子單元,
[0023]第一更新子單元,用于將幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中;
[0024]第一更新子單元,具體用于將幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中一次性更新到系統(tǒng)的幀緩沖區(qū)中,或者,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。
[0025]可選地,第二更新子單元,用于將幀圖像繪制單元在系統(tǒng)的幀緩沖區(qū)中繪制下一幀圖像的前預定行內(nèi)容直接更新;
[0026]第二更新子單元,具體用于對幀圖像繪制單元在繪制下一陣圖像時,將繪制目標設定為系統(tǒng)幀緩沖區(qū)且每次采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容直接更新到系統(tǒng)幀緩沖區(qū)中。
[0027]根據(jù)本發(fā)明的又一個方面,提供了一種虛擬現(xiàn)實設備,該虛擬現(xiàn)實設備包括:如本發(fā)明另一個方面縮短圖像延遲的裝置。
[0028]本發(fā)明的有益效果是:本發(fā)明的這種縮短圖像延遲的方法和裝置,首先,只需要使用一個前端幀緩沖區(qū)(即Frontbuffer)進行緩存,并且無需修改該幀緩沖區(qū)的大小,然后將這個幀緩沖區(qū)中的當前幀圖像按照從上到下的順序刷新到顯示屏幕上,由于當前幀圖像的部分內(nèi)容已經(jīng)刷新到了顯示屏幕上完成了顯示,所以之前被當前幀圖像的部分內(nèi)容占用的幀緩沖區(qū)空間就可以用下一幀圖像的部分內(nèi)容來替換,從而無需等待當前幀圖像刷新完畢即可將下一幀圖像的內(nèi)容更新到幀緩沖區(qū)中,縮短了圖像從繪制到顯示的處理時間,縮短了圖像延遲,優(yōu)化了用戶體驗。
[0029]其次,本發(fā)明的這種分段更新幀緩沖區(qū)是根據(jù)幀同步信號來實現(xiàn)的。即每次在當前幀的幀同步信號剩余時間內(nèi),將下一幀圖像的前一部分內(nèi)容更新到幀緩沖區(qū)中,由于,顯示驅動是根據(jù)幀同步信號開始讀取下一幀的,所以這時顯示驅動不會從幀緩沖區(qū)的第一行開始讀取下一幀,而是繼續(xù)讀取當前幀的剩余行內(nèi)容。當收到下一幀圖像的幀同步信號后,顯示驅動才開始讀取下一幀的第一行內(nèi)容,此時再將下一幀的剩余內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中。如此,也避免了使用一個幀緩沖區(qū)進行圖像刷新時可能出現(xiàn)的畫面撕裂問題,拓寬了虛擬現(xiàn)實設備的應用范圍。
[0030]另外,本發(fā)明還提供了一種虛擬現(xiàn)實設備,由于該虛擬現(xiàn)實設備包括了本發(fā)明的這種縮短圖像延遲的裝置,這樣,虛擬現(xiàn)實設備中的應用可以根據(jù)用戶的運動(如頭部運動)繪制出相應的圖像并實時快速的顯示到顯示屏幕上,從而提供較佳的用戶體驗,提高了產(chǎn)品的競爭力。
【附圖說明】
[0031]圖1是本發(fā)明一個實施例的一種縮短圖像延遲的方法的流程圖;
[0032]圖2是本發(fā)明一個實施例的一種縮短圖像延遲的裝置的結構框圖;
[0033]圖3是本發(fā)明一個實施例的一種虛擬現(xiàn)實設備的結構框圖。
【具體實施方式】
[0034]縮短圖像延遲的一種現(xiàn)有技術是:基于手機屏幕在使用VR應用時會橫向放置,屏幕的刷新順序為從左到右的特點,提出使用一個Frontbuffer進行清染。當屏幕左側(對應左眼顯示內(nèi)容)正在刷新時,更新屏幕右側圖像(對應右眼顯示內(nèi)容)對應的buffer緩存數(shù)據(jù),當屏幕右側正在刷新時,則更新屏幕左側圖像對應的buff er數(shù)據(jù),從而繞過系統(tǒng)軟件方式的顯示合成機制,縮短延遲。但是,這種技術僅適用于按照左右方向進行刷新的屏幕,而現(xiàn)在大多數(shù)虛擬現(xiàn)實設備使用的顯示屏幕都是按照從上到下的順序進行刷新的,無法使用這種現(xiàn)有技術進行渲染。并且,這種現(xiàn)有技術顯示刷新時還容易發(fā)生圖像撕裂問題,圖像撕裂是指顯示圖像由當前幀和前面幀兩部分組合而成的現(xiàn)象。
[0035]本發(fā)明的設計構思是:針對現(xiàn)有的Android顯示機制存在圖像從繪制到顯示的延遲導致虛擬現(xiàn)實設備用戶體驗不佳的問題,本發(fā)明直接使用Frontbuffer進行渲染來繞過系統(tǒng)的顯示合成機制,省略了緩沖區(qū)之間切換的時間以及SurfaceFlinger服務占用的處理時間,從而縮短了延遲。另外,針對現(xiàn)有技術顯示刷新時還容易發(fā)生圖像撕裂問題,本發(fā)明的技術方案提出根據(jù)幀同步信號分段更新幀緩沖區(qū)。這樣既縮短了圖像延遲,改善了用戶體驗,又使得虛擬現(xiàn)實設備可以采用按照從上到下進行刷新的顯示屏幕并且不會出現(xiàn)圖像撕裂,提高了產(chǎn)品的競爭力。
[0036]實施例一
[0037]圖1是本發(fā)明一個實施例的一種縮短圖像延遲的方法的流程圖,參見圖1,該縮短圖像延遲的方法包括步驟如下:
[0038]步驟Sll,將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知應用繪制下一幀圖像;
[0039]步驟S12,在刷新當前幀圖像的剩余行內(nèi)容時,將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;
[0040]步驟S13,當收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將該應用繪制的下一幀圖像的剩余行內(nèi)容更新到幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。
[0041]由圖1所示的縮短圖像延遲的方法可知,本實施例中不需要對系統(tǒng)現(xiàn)有前端幀緩沖區(qū)(即Frontbuffer)的大小進行修改,這樣就無需修改顯示驅動的輸出方式,可直接使用在任何提供了 Frontbuf f er的系統(tǒng)上,具有更好的適應性。另外,本實施例的方法利用幀同步信號在顯示驅動從上到下刷新當前幀的同時(即先更新前預定行的內(nèi)容,后更新剩余行內(nèi)容)將下一幀圖像分段更新到Frontbuf fer中。這樣,一方面,避開了現(xiàn)有技術的SurfaceFlinger軟件合成機制,節(jié)約了SurfaceFlinger服務占用的處理時間。并且無需等待當前幀刷新完畢,即可將下一幀圖像更新到Frontbuf fer中,也節(jié)約了下一幀圖像的等待時間,從而大大縮短了延遲,優(yōu)化了用戶體驗。另一方面,由于在一個幀緩沖區(qū)緩存時利用了幀同步信號進行控制,從而也不會出現(xiàn)圖像撕裂問題,使Android系統(tǒng)與虛擬現(xiàn)實設備更兼容。
[0042]實施例二
[0043]本實施例中是重點對縮短圖像延遲的方法的實現(xiàn)過程進行的說明,其他內(nèi)容參見本發(fā)明的其他實施例。該縮短圖像延遲的方法的一種具體實現(xiàn)方式如下:
[0044]步驟I)當前幀輸出到二分之一時,APP(Applicat1n,應用)通過清染或者時間扭曲Timewarp等方式生成下一幀要顯示的圖像,并將圖像存儲到一個臨時緩沖區(qū)中;
[0045]步驟2)在下一幀的VSync幀同步信號前,將下一幀圖像的上半部分內(nèi)容更新到Frontbuffer中;
[0046]步驟3)在下一幀的VSync幀同步信號后,系統(tǒng)開始輸出下一幀的上半部分,此時再將下一幀的下半部分圖像內(nèi)容更新到Frontbuf fer中。
[0047]需要說明的是,步驟I)中當前幀輸出到二分之一只是示意性的舉例,實際應用時應根據(jù)設置的預定行進行控制,而預定行則可以根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間進行調(diào)整,不限定于本實施例中所描述的當前幀圖像的一半。例如,一幀圖像可分為十行,那么預定行既可以設定為第五行,又可以設定為第七行。對此不做限制。也就是說,開始生成下一幀圖像的時間點可以根據(jù)實際情況進行調(diào)整,以盡可能接近下一次VSync幀同步信號的時間點為優(yōu),但需保證還有足夠時間繪制并更新到Frontbuffer中。
[0048]這里,步驟2)的,將下一幀圖像的上半部分內(nèi)容更新到Frontbuffer中也可以有兩種實現(xiàn)方式:一種方式是,從臨時緩沖區(qū)中將應用繪制完成并保存的下一幀圖像的前預定行內(nèi)容一次性更新到系統(tǒng)的幀緩沖區(qū)中。另一種實現(xiàn)方式是,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。也就是說,更新不一定是一次性更新,可以分成更多段,從上到下按序更新,以減少每一次更新所花費的時間。
[0049]舉例而言,一幀圖像分為十行,預定行為第五行,那么,步驟2中可以一次性將前5行內(nèi)容更新到幀緩沖區(qū)中。或者,將前5行內(nèi)容中的前3行內(nèi)容一起更新到幀緩沖區(qū)中,然后將前5行內(nèi)容中的后兩行內(nèi)容一起更新到幀緩沖區(qū)中。
[0050]需要說明的是,本實施例中說明了在更新前預定行的內(nèi)容時可以分成多段來更新。但是,本領域的技術人員能夠理解,在更新剩余行的內(nèi)容時同樣可以分成多段來更新,不限定于將剩余行內(nèi)容一次性更新到系統(tǒng)幀緩沖區(qū)中。
[0051]另外,步驟I)示意性的說明了App將繪制完成的下一幀圖像保存到了一個臨時緩沖區(qū)中。但需要說明的是,實際應用過程中,也可以不使用臨時緩沖區(qū),而是將下一幀圖像直接更新到系統(tǒng)幀緩沖區(qū)中,這種直接更新到系統(tǒng)幀緩沖區(qū)方式,實現(xiàn)方式是應用在繪制下一幀圖像的時候,將繪制目標設定為系統(tǒng)幀緩沖區(qū),而不設為臨時緩存區(qū),然后采用圖像裁剪(比如opengl的glScissor)對新繪制的圖像進行裁剪,從而每次僅更新一半(或其他預定大小)區(qū)域。實現(xiàn)邏輯和先繪制到臨時緩沖區(qū)再從臨時緩沖區(qū)更新到幀緩沖區(qū)是一樣的,通過裁剪函數(shù)可以控制每次更新的大小,例如,對應用每次采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容更新到系統(tǒng)幀緩沖區(qū)中。也就是說,不一定緩存App生成的圖像,而是每次采用同樣的參數(shù)和數(shù)據(jù)來生成新圖像,通過glscissor等方式來控制每次只更新Frontbuf fer的一部分。
[0052]以上可知,通過本實施例的這種縮短圖像延遲的方法,可以減少圖像從渲染到顯示的延遲時間,從而使得虛擬現(xiàn)實設備能夠提供更好的用戶體驗。
[0053]實施例三
[0054]圖2是本發(fā)明一個實施例的一種縮短圖像延遲的裝置的結構框圖,該縮短圖像延遲的裝置20包括:
[0055]刷新單元201,用于將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知幀圖像繪制單元202繪制下一幀圖像;
[0056]幀圖像繪制單元202,用于根據(jù)刷新單元201的通知繪制下一幀圖像;
[0057]幀圖像更新單元203,用于在刷新單元201刷新當前幀圖像的剩余行內(nèi)容時,將幀圖像繪制單元202繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;并當刷新單元201收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將幀圖像繪制單元202繪制的下一幀圖像的剩余行內(nèi)容更新到幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。
[0058]本實施例中,刷新單元201,具體用于根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間調(diào)整預定行。
[0059]本實施例中,幀圖像更新單元203包括:第一更新子單元和第二更新子單元,
[0060]第一更新子單元,用于將幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中;
[0061]第一更新子單元,具體用于將幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中一次性更新到系統(tǒng)的幀緩沖區(qū)中,或者,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。
[0062]本實施例中,第二更新子單元,用于將幀圖像繪制單元在系統(tǒng)的幀緩沖區(qū)中繪制下一幀圖像的前預定行內(nèi)容直接更新;第二更新子單元,具體用于對幀圖像繪制單元在繪制下一陣圖像時,將繪制目標設定為系統(tǒng)幀緩沖區(qū)且每次采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容直接更新到系統(tǒng)幀緩沖區(qū)中。
[0063]需要說明的是,本實施例中的縮短圖像延遲的裝置的工作過程是與前述縮短圖像延遲的方法的實現(xiàn)步驟相對應的,因而本實施例中對縮短圖像延遲的裝置的工作過程沒有描述的部分可以參見本發(fā)明前述實施例的相關說明,這里不再贅述。
[0064]實施例四
[0065]圖3是本發(fā)明一個實施例的一種虛擬現(xiàn)實設備的結構框圖,參見圖3,該虛擬現(xiàn)實設備30包括:如本發(fā)明另一個方面縮短圖像延遲的裝置301。該縮短圖像延遲的裝置301的實現(xiàn)原理和工作過程可以參見前述實施例三中對縮短圖像延遲的裝置20的詳細說明。
[0066]綜上所述,本發(fā)明的這種縮短圖像延遲的方法和裝置,首先,只需要使用一個前端幀緩沖區(qū)(即Frontbuffer)進行緩存,并且無需修改該幀緩沖區(qū)的大小,然后,將這個幀緩沖區(qū)中的當前幀圖像按照從上到下的順序刷新到顯示屏幕上,由于當前幀圖像的部分內(nèi)容已經(jīng)刷新到了顯示屏幕上完成了顯示所以之前被當前幀圖像的部分內(nèi)容占用的幀緩沖區(qū)空間就可以用下一幀圖像的部分內(nèi)容來替換,從而無需等待當前幀圖像刷新完畢即可將下一幀圖像的內(nèi)容更新到幀緩沖區(qū)中,縮短了圖像從繪制到顯示的處理時間,縮短了圖像延遲,優(yōu)化了用戶體驗。
[0067]其次,本發(fā)明的這種分段更新幀緩沖區(qū)是根據(jù)幀同步信號來實現(xiàn)的。即每次在當前幀的幀同步信號剩余時間內(nèi),將下一幀圖像的前一部分內(nèi)容更新到幀緩沖區(qū)中,由于,顯示驅動是根據(jù)幀同步信號開始讀取下一幀的,所以這時顯示驅動不會從幀緩沖區(qū)的第一行開始讀取下一幀,而是繼續(xù)讀取當前幀的剩余行。當收到下一幀圖像的幀同步信號后,顯示驅動開始讀取下一幀的第一行內(nèi)容,此時再將下一幀的剩余內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中。如此,也避免了使用一個幀緩沖區(qū)進行圖像刷新時可能出現(xiàn)的畫面撕裂問題,拓寬了虛擬現(xiàn)實設備的應用范圍。
[0068]另外,本發(fā)明實施例還提供了一種虛擬現(xiàn)實設備,由于該虛擬現(xiàn)實設備包括了本發(fā)明的這種縮短圖像延遲的裝置,這樣虛擬現(xiàn)實設備中的應用,可以根據(jù)用戶的運動(如頭部運動)繪制出相應的圖像并實時快速的顯示到顯示屏幕上,從而提供較佳的用戶體驗,提高了產(chǎn)品的競爭力。
[0069]以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。
【主權項】
1.一種縮短圖像延遲的方法,其特征在于,該方法包括: 將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知應用繪制下一幀圖像; 在刷新當前幀圖像的剩余行內(nèi)容時,將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容; 當收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將該應用繪制的下一幀圖像的剩余行內(nèi)容更新到所述幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。2.根據(jù)權利要求1所述的方法,其特征在于,所述預定行可根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間進行調(diào)整。3.根據(jù)權利要求1或2所述的方法,其特征在于,所述將該應用繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中包括: 將所述應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中,或者,將所述應用待繪制的下一幀圖像的前預定行內(nèi)容直接更新在系統(tǒng)的幀緩沖區(qū)中。4.根據(jù)權利要求3所述的方法,其特征在于,所述將所述應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中包括: 將所述應用繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中一次性更新到系統(tǒng)的幀緩沖區(qū)中;或者,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。5.根據(jù)權利要求3所述的方法,其特征在于,所述將所述應用待繪制的下一幀圖像的前預定行內(nèi)容直接更新在系統(tǒng)的幀緩沖區(qū)中包括: 對所述應用每次采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容更新到系統(tǒng)幀緩沖區(qū)中。6.一種縮短圖像延遲的裝置,其特征在于,該裝置包括: 刷新單元,用于將當前幀圖像按照從上到下的順序從系統(tǒng)的幀緩沖區(qū)刷新到顯示屏幕上,并當當前幀圖像刷新到預定行時,通知幀圖像繪制單元繪制下一幀圖像; 所述幀圖像繪制單元,用于根據(jù)刷新單元的通知繪制下一幀圖像; 幀圖像更新單元,用于在所述刷新單元刷新當前幀圖像的剩余行內(nèi)容時,將所述幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容更新到系統(tǒng)的幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的預定行內(nèi)容;并當所述刷新單元收到下一幀圖像的幀同步信號后開始刷新下一幀圖像的前預定行內(nèi)容時,將所述幀圖像繪制單元繪制的下一幀圖像的剩余行內(nèi)容更新到所述幀緩沖區(qū)中,替換當前幀圖像已經(jīng)顯示的剩余行內(nèi)容。7.根據(jù)權利要求6所述的裝置,其特征在于,所述刷新單元,具體用于根據(jù)下一幀圖像的幀同步信號的到達時間,應用繪制圖像的時間,以及更新所需的時間調(diào)整所述預定行。8.根據(jù)權利要求6所述的裝置,其特征在于,所述幀圖像更新單元包括:第一更新子單元和第二更新子單元, 所述第一更新子單元,用于將所述幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中更新到系統(tǒng)的幀緩沖區(qū)中; 所述第一更新子單元,具體用于將所述幀圖像繪制單元繪制的下一幀圖像的前預定行內(nèi)容從臨時緩沖區(qū)中一次性更新到系統(tǒng)的幀緩沖區(qū)中,或者,按從上到下的順序將下一幀圖像的前預定行內(nèi)容分多次更新到系統(tǒng)的幀緩沖區(qū)中。9.根據(jù)權利要求8所述的裝置,其特征在于, 所述第二更新子單元,用于將所述幀圖像繪制單元待繪制的下一幀圖像的前預定行內(nèi)容直接更新在系統(tǒng)的幀緩沖區(qū)中; 所述第二更新子單元,具體用于對所述幀圖像繪制單元在繪制下一陣圖像時,將繪制目標設定為系統(tǒng)幀緩沖區(qū)且采用同一幀圖像的參數(shù)和數(shù)據(jù)繪制的預定行內(nèi)容,利用裁剪函數(shù)進行裁剪,保留每次新繪制的內(nèi)容直接更新到系統(tǒng)幀緩沖區(qū)中。10.一種虛擬現(xiàn)實設備,其特征在于,該虛擬現(xiàn)實設備包括:權利要求6-9中任一項所述縮短圖像延遲的裝置。
【文檔編號】G06F3/14GK106095366SQ201610403732
【公開日】2016年11月9日
【申請日】2016年6月7日
【發(fā)明人】李立綱
【申請人】北京小鳥看看科技有限公司