專利名稱:一種層次版圖加速顯示的方法
技術(shù)領(lǐng)域:
本專利是一種層次版圖加速顯示的方法,針對層次版圖的顯示,屬于計算機(jī)輔助 設(shè)計中的視覺計算領(lǐng)域。
背景技術(shù):
隨著設(shè)計規(guī)模的增大,版圖所需要處理的數(shù)據(jù)越來越大,然而對于大規(guī)模數(shù)據(jù)的 顯示,則會受到硬件系統(tǒng)處理上限的限制而放緩,傳統(tǒng)的顯示方式極大的限制了版圖設(shè)計 的開發(fā)效率。因此,設(shè)計一個新的版圖顯示方法,使大規(guī)模的數(shù)據(jù)顯示速度不被系統(tǒng)所能夠 提供的環(huán)境限制成為了一個必然的需要。通過分析,版圖數(shù)據(jù)的組織很多時候都是具有層次性的。通常的方法是需要按照 層次調(diào)用,對版圖中的圖形逐一做相應(yīng)的坐標(biāo)轉(zhuǎn)換,然后再顯示在屏幕上。例如,一個400M 大小的設(shè)計,在完全展開之后可能會有幾個G的內(nèi)容。最終的展開的數(shù)據(jù)量決定了圖形繪 制的時間。本專利針對上面的情況,利用數(shù)據(jù)中的層次關(guān)系和數(shù)據(jù)重復(fù)的特點(diǎn),將開銷較大 的圖形繪制操作轉(zhuǎn)化為固定開銷的紋理貼圖操作,并在不同條件下選擇兩者中較快的操作 來達(dá)到層次版圖顯示加速的目的。紋理貼圖操作在有硬件支持的情況下速度要比逐個繪制 圖形具有更快的速度。同時我們可以將層次的數(shù)據(jù)在某些節(jié)點(diǎn)上打散,并繪制到一個紋理 圖中來減少數(shù)據(jù)查詢的操作,給紋理貼圖提供更好的調(diào)用時機(jī)。
發(fā)明內(nèi)容
本方法是在層次打散的基礎(chǔ)上、使用紋理貼圖的方法來提高層次版圖顯示速度的 方法。通常的層次版圖顯示流程中,會按照版圖層的順序,在每一層上采用深度遍歷的 方法,逐一取出各個層次中的圖形,然后根據(jù)調(diào)用的位置、朝向?qū)@些圖形進(jìn)行坐標(biāo)轉(zhuǎn)化, 再通過繪圖函數(shù)繪制成圖像呈現(xiàn)給使用者。當(dāng)一個單元在不同的地方被調(diào)用的時候,需要 多次取出這個單元的內(nèi)容,并對其中的圖形做坐標(biāo)轉(zhuǎn)化和繪制。因此,影響到顯示速度的因 素有兩個繪圖數(shù)據(jù)取得/轉(zhuǎn)換和繪制過程。在本方法中,處理的過程如下按照通常的DFS順序處理每個查詢到的引用,根據(jù)引用的單元、旋轉(zhuǎn)和當(dāng)前其所 在的層次對其進(jìn)行分類(以下的“引用”特指相同的單元、旋轉(zhuǎn)和所在層次);1.如果這個引用的這個調(diào)用是第一次出現(xiàn),那么構(gòu)建這個引用的紋理位圖,然后 將這個位圖貼到該位置上;如果當(dāng)前單元的父單元已經(jīng)建立了位圖,則把其位圖貼到其父 單元的位圖中;2.如果這個引用已經(jīng)出現(xiàn)過,那么直接將其所對應(yīng)的紋理位圖貼到引用的位置 上,同時也不再對其以下的層次進(jìn)行處理;對于層次嵌套的單元,由于其位圖已經(jīng)包含以下所有層次的內(nèi)容,因次,情況2中,不在需要對該單元以下的所有層次進(jìn)行處理。由此可知,本方法,減少了數(shù)據(jù)處理量,并 用固定開銷的紋理貼圖操作省略了對每個圖形的坐標(biāo)轉(zhuǎn)換操作。同時,由于顯示是按照逐 層的辦法處理每個圖層上的圖形的,其每次需要處理的層次關(guān)系并沒有發(fā)生變化,因此把 需要進(jìn)行貼圖的單元的引用記錄在緩存中,可以在處理每一個圖層時,直接將相應(yīng)的位圖 產(chǎn)生出來然后貼到需要的位置上。這樣,在這個緩存的大小可以容納當(dāng)前的貼圖需要的時 候,可以只進(jìn)行一次關(guān)于層次的查詢。綜上所述,按照本方法顯示一個層次版圖所需要的操作與實(shí)際存儲的數(shù)據(jù)量相 關(guān),而與其實(shí)際顯示的數(shù)據(jù)量無關(guān)。
下面結(jié)合附圖和實(shí)施例對本方法進(jìn)一步說明。圖1為一個版圖的引用層次。top為當(dāng)前頂層單元,A(20)表示A單元在level 1上被調(diào)用20次,B(5),C(100)同樣。圖2為繪制版圖的工作流程。圖3為嵌套位圖中的填充處理。
具體實(shí)施例方式發(fā)明內(nèi)容中的幾個主要步驟如下1.首先,按照DFS的順序,依次從頂層訪問每個Instance。例如在圖1中,依次為 top->A (20)->D->E->B->D->C->C->B(5)->D_>C(100);2.建立一個Instance Buffer用來存放DFS過程中找到的instance,每個 instance的坐標(biāo)轉(zhuǎn)換被記錄在其中。根據(jù)其引用的Cell、朝向(orientation)、所處的層次 不同,為其創(chuàng)建一個slot或者,將其鏈接到一個已經(jīng)存在的slot中;3.每個slot都唯一對應(yīng)一個位圖,表示它在當(dāng)前的圖層上的所有圖形。而其調(diào)用 的其他單元的內(nèi)容也在這個位圖之中(實(shí)質(zhì)上,相當(dāng)于打散了這個slot所對應(yīng)的cell)。例如A(20)的位圖中包括D、E、C、B的內(nèi)容,因此,在訪問完第一個level 1上的 A之后,其后的19個A,只要其朝向相同,都不必再訪問,而直接貼圖即可。在顯示層次大于 4的時候(全顯示),其總的數(shù)據(jù)訪問量為A,B, C,D,E各一次。然后,A貼圖20次,B貼圖 5次,C貼圖100次,就可以完成整個版圖的顯示。4.由于3中slot的位圖會包含其下所有層次的圖形,因此在位圖形成的過程中會 有層次嵌套,即,將另一個slot所對應(yīng)的位圖復(fù)制到其父單元中。按照逆拓?fù)涞捻樞蚺判?slot的話,則可以保證子單元的位圖一定在父單元的位圖之前形成。但由于采用的是DFS, 所以這個逆拓?fù)湫蛄袝匀恍纬伞?. Instance Buffer的大小是一定的,當(dāng)所有的instance都被訪問完之后,或者 buffer已經(jīng)用完的時候,需要將buffer中的內(nèi)容畫到屏幕上。依次按照slot的順序,將每 個連接在上面的instance調(diào)用,貼圖處理得到該圖層的顯示。6.實(shí)現(xiàn)中其他方面的考慮a)原則上,所有的重復(fù)單元調(diào)用都是通過貼圖的方式完成的,但有時候單元的內(nèi)容比較簡單,直接處理反而會比貼圖代價更小,這時可以在兩者間選擇代價較小的方法。b)在版圖顯示時,經(jīng)常會用某種圖形來填充圖層上的圖形,直接做位圖之間的嵌 套然后貼圖,會導(dǎo)致由于填充圖形的偏移量不同的偏差。這是可以將每個位圖一分為二,一 個是只記錄圖形的邊界,另一個只記錄填充的區(qū)域(使用實(shí)填充,實(shí)際上是記錄了需要填 充的區(qū)域)。二者分別進(jìn)行嵌套合并。當(dāng)需要將圖形顯示在屏幕上時,記錄填充區(qū)域的只需 要將記錄填充的位圖作為clip mask就可以得到正確的填充。圖3中,A調(diào)用了 B、C,因此 B和C的兩種位圖會分別貼圖到在SlotA的兩個位圖中。在繪制到屏幕的時候,由于SlotA 的Filling Bitmap只記錄了需要fill的區(qū)域,需要將這個位圖與涵蓋了 A所在區(qū)域的填 充圖形做與操作,即,將Filling Bitmap作為填充操作的clip mask。由于這種操作可能會 帶來性能上的開銷,因此應(yīng)盡可能的減少clip mask的調(diào)用次數(shù)(實(shí)際上,一個圖層可以只 具有一個Fill Bitmap,只需要在整個圖層都處理完之后進(jìn)行唯一的一次填充操作)。c)引入Instance Buffer的主要考慮是可以調(diào)整單元被處理的順序,使顯示貼 圖的調(diào)用過程更為有效。例如,只有當(dāng)一個單元的引用被完全包含在當(dāng)前顯示的窗口的時 候,對這個引用所得到的位圖才是有用的,才能被貼圖到其他的地方。而當(dāng)某個引用已經(jīng)包 含了該單元的全部內(nèi)容時,則不管其他引用是否全部包含在當(dāng)前顯示窗口內(nèi),都可以貼圖 完成。Instance Buffer的引入可發(fā)現(xiàn)這種情況。再如,輸出的時候可以按照slot的順序, 而不是instance插入的順序進(jìn)行貼圖,可以使盡可能的少切換位圖。
權(quán)利要求
1.本專利描述了一種利用紋理貼圖和層次打散來加速層次版圖顯示的方法,其具有一 下特征(1.)使用紋理貼圖處理被引用的單元,使同樣的單元不需要被重復(fù)查詢。 (2.)將一個做了紋理貼圖的單元做層次打散,使紋理貼圖包含其內(nèi)部引用單元的內(nèi) 容,達(dá)到減少數(shù)據(jù)的重復(fù)訪問。(3.)對嵌套紋理貼圖時的填充做了處理,使其不會產(chǎn)生不可控的顯示誤差; 要求保護(hù)同時具有以上3個特征的組合。
全文摘要
本發(fā)明敘述了一種利用紋理貼圖和層次打散加速層次版圖的顯示的方法。通常層次版圖在顯示時都要逐一將層次展開,并對被引用單元中的圖形做坐標(biāo)轉(zhuǎn)換,然后將這些圖形顯示出來。這樣的結(jié)果是,原本不大的數(shù)據(jù)在展開后可能會急速膨脹,使數(shù)據(jù)查詢和繪圖的工作量呈指數(shù)增加,造成顯示速度的降低。本方法利用層次版圖中數(shù)據(jù)重復(fù)的特征,在適當(dāng)?shù)那闆r下將版圖中引用單元的內(nèi)容顯示保存成位圖紋理,并用貼圖的辦法將這些內(nèi)容顯示出來。在選擇位圖生成對象的時候,會對單元進(jìn)行層次上的打散操作,使其位圖包含以下所有層次的內(nèi)容會被包含在該位圖中,從而使數(shù)據(jù)查詢不必再多次進(jìn)入到相同的單元內(nèi)部,達(dá)到了在層次樹上剪枝的效果,減少了需要查詢的內(nèi)容,從而提高顯示的速度。
文檔編號G06F17/50GK102142040SQ20101010288
公開日2011年8月3日 申請日期2010年1月28日 優(yōu)先權(quán)日2010年1月28日
發(fā)明者蘇毅 申請人:北京華大九天軟件有限公司