專利名稱:基于紋理的像素打包的制作方法
背景技術(shù):
計算機圖形學的發(fā)展,允許在二維空間(例如,計算機屏幕或監(jiān)視器)中顯示三維圖形對象(例如,在電子游戲中的角色)。電子游戲和其它使用三維圖形的應用程序向用戶十分逼真地顯示,且增加了用戶體驗的樂趣。用于生成三維圖形的一種技術(shù)包括對紋理的使用。紋理是二維的位圖,當在場景的三維呈現(xiàn)中繪制平面幾何時,通常用于模擬真實世界紋理細節(jié)(例如,木材、谷物、地毯等)。在某些情況中,該紋理由多個二維的像素組成。每一像素擁有位置、顏色、亮度和深度屬性。一旦被創(chuàng)建,該紋理可以被用來呈現(xiàn)多種類型的圖像,包括表示文本和符號的圖像。使用紋理用于呈現(xiàn)二維文本一般比其它文本呈現(xiàn)技術(shù)更令人希望,因為紋理允許文本被容易地以合適的方式設(shè)計、縮放和旋轉(zhuǎn)。
因為電子游戲除非視覺上令人影響深刻,否則市場上銷量不好,希望在一個場景中使用多種有吸引力的字體。從而,用于應用程序(例如,三維電子游戲)中的文本呈現(xiàn)的單個紋理可以包括字形的大的集合(例如,文本字符、符號和/或附和某一字體或文本樣式的圖像)。在某些情況中,字形可以被單獨著色或可以是具有黑色輪廓、黑色下拉陰影(drop-shadow)和/或抗混疊效果的白色字符。輪廓和下拉陰影特征一般能在低分辨率的顯示器(例如,電視機)上提高可讀性,尤其在背景色沒有提供很多對比度的情況下更是如此??够殳B降低了像素生成線的鋸齒效果,且包含在字形輪廓周圍使用灰色或輕微著色的像素。圖1示出使用抗混疊、輪廓描繪和下拉陰影特征的字形102的示例。為結(jié)合這些特征,紋理位圖中的每一像素通常是32比特,對每一顏色通道(例如,紅、綠、藍)使用8個比特,對用作透明度因數(shù)的alpha(阿爾法)通道使用8個比特。在大多數(shù)情況中,適中大小的字形集可以裝入一256×256的紋理位圖中。圖1也示出了512×256紋理位圖104的實例。
從紋理進行文本呈現(xiàn)一般涉及選擇匹配所需的字形駐留于該紋理中的位置的一組紋理坐標(例如,組成字母“G”的坐標)。在更復雜的系統(tǒng)中,對字體和類似的文本呈現(xiàn)解決方案的內(nèi)置支持簡化了在應用程序端的文本呈現(xiàn)。然而,這樣的內(nèi)置解決方案在電子游戲的語境中并不總是可用的。例如,當代的電子游戲控制臺不擁有對字體的內(nèi)置支持。同樣地,為個人計算機開發(fā)的游戲通常要求比個人計算機操作系統(tǒng)提供更高性能的文本呈現(xiàn)解決方案。
為這些原因,今天的電子游戲經(jīng)常提供它們自己的文本呈現(xiàn)支持。用于在電子游戲中文本呈現(xiàn)有兩種基本方法。在第一種方法中,計算機或控制臺的CPU直接在呈現(xiàn)目標上寫入比特。盡管該技術(shù)允許使用工業(yè)標準True Type字體呈現(xiàn)呈現(xiàn),但是存在關(guān)于高存儲器使用率和性能的眾多極端缺點。例如,因為不是所有的電子游戲控制臺都擁有足夠的存儲器來專用于這樣的潛在的大的字體文件,CPU經(jīng)常求助于高速緩存這些文件,這進一步地損害了運行時間性能。此外,大多數(shù)CPU不適合于呈現(xiàn)位圖。例如,典型的CPU呈現(xiàn)字體的速度比圖形處理單元(GPU)慢100到1000倍。
第二種方法是,將字體作為位圖化的紋理存儲,并將單個字形作為對準屏幕空間的四元組(screen-space aligned quad)來呈現(xiàn)(例如,使用GPU的紋理光柵化器)。該技術(shù)使用GPU的本身的功能來以與GPU相關(guān)聯(lián)的硬件的完全填充率(以每秒的像素數(shù)度量)來呈現(xiàn)基于位圖的字體。該技術(shù)的一個局限是,當使用大字符集(例如,Unicode字符集)時,它可能需要超過目前硬件能力的紋理大小并使用大量存儲器。
當為國際市場創(chuàng)作電子游戲時,現(xiàn)有的文本呈現(xiàn)技術(shù)的問題加劇。例如,包括中文文本的游戲可能需要大約5000-8000個字形。如果每一字形預先呈現(xiàn)至一紋理位圖的20×20像素部分,那么整個紋理位圖可能是1800×1800像素,即3.24M像素。因為大多數(shù)的游戲控制臺僅支持有限數(shù)量的紋理格式,當使用每像素8位的紋理時,最小空間需求是3.24MB。使用每像素16位的紋理(對每一紅、綠、藍和阿爾法通道分別使用4位),最小空間需求是6.48MB。因為典型的電子游戲控制臺僅擁有大約32-64MB物理存儲器和大約26-58的可用存儲器,將這些存儲器專用于文本和字體是不合理的。
發(fā)明內(nèi)容
用于呈現(xiàn)包括文本的三維圖形的方法和系統(tǒng),允許未壓縮的紋理位圖被壓縮。壓縮的紋理位圖可以包括可被解包為能被用于呈現(xiàn)文本符號和其它字形的輸出像素的值。壓縮的紋理位圖中的每一像素可以為多于一個的值存儲信息,包括對應于多種獨特符號的壓縮的像素的值。例如,壓縮的紋理位圖可以含有每一個像素至多存儲m個值(例如,4個值)的大小為n個比特的多個像素(例如,16位像素)。m個值中的每一個可含有大小至多為n/m個比特(例如,4位)的壓縮的值。多個值可以被存儲在一單個像素中,例如使用與該像素關(guān)聯(lián)的獨特的紅、綠、藍和阿爾法(RGBA)通道。
壓縮的紋理位圖可以被配置來用慣用的像素著色器來解包,諸如一般不執(zhí)行逐位運算的像素著色器。該解包可以包括使用像素著色器中的屏蔽操作將關(guān)聯(lián)于所需的值的像素分離。
在本發(fā)明的另一實施例中,壓縮的紋理位圖可以擁有每像素存儲大小為n/m個比特(例如2位的值)的m個(例如4個)壓縮的值的大小為n個比特的像素(例如8位像素)。壓縮的紋理位圖可以被配置來通過慣用的像素著色器來解包,諸如一般不執(zhí)行逐位運算的像素著色器。例如,該解包可以包括將取得的8位像素同諸如256色調(diào)色板中獲得的32位的值的一查找表中的映射值匹配。該查找到的匹配值可以被分離成單獨的子值來便于由像素著色器處理。例如,該查找到的值可以被分離成常規(guī)用于處理著色的像素的RGBA值。
在本發(fā)明的又一實施例中,壓縮的紋理位圖可含有每像素存儲n個1位(1-bit)值的大小為n個比特的像素(例如,8位像素)。壓縮的紋理位圖可以被配置來通過慣用的像素著色器來解包,諸如一般不執(zhí)行逐位運算的像素著色器。該解包可以包括將取得的像素同諸如256色調(diào)色板中獲得的32位的值的一查找表中的映射值匹配。該查找到的值可以被分離成單獨的子值來便于由像素著色器處理。例如,該查找到的值可以被分離成常規(guī)用于處理著色的像素的RGBA值。
圖1是示出一慣用紋理位圖的示例的框圖。
圖2是示出在其中本發(fā)明可在一實施例中實現(xiàn)的環(huán)境的示例框圖。
圖3是示出在一實施例中的從16位到4位的紋理打包例程的流程圖。
圖4是示出在一實施例中用于在壓縮的紋理位圖中存儲4位值的數(shù)據(jù)結(jié)構(gòu)的示例的框圖。
圖5是示出在一實施例中每像素16位的紋理位圖被壓縮至每像素4位的示例的展示和流程圖。
圖6是示出在一實施例中用于對被壓縮成每像素4位格式的紋理位圖解包的例程的流程圖。
圖7是示出在一實施例中可以被壓縮至每像素2位格式的字體字符的示例的展示圖。
圖8是示出在一實施例中從每像素8位被壓縮至每像素2位的紋理位圖的示例的展示圖。
圖9是示出用于解包被壓縮至每像素2位的紋理的例程的示例的流程圖。
圖10是示出在一實施例中被壓縮至每像素2位的字體的縮放的示例的展示圖。
圖11是示出在一實施例中被打包至每像素1位的紋理位圖的示例的展示圖。
圖12是示出在一實施例中對被打包至每像素1位的紋理位圖解包的例程的示例的流程圖。
在圖中,相同的參考標號標識相同或基本相似的元素或動作。為便于對任何特定元素或動作的討論,在參考標號中的最高的一位或多位指示該元素第一次被引入的附圖標號(例如,元素204關(guān)于圖2第一次被引入和討論)。
本揭示的一部分包含有要求版權(quán)的材料。版權(quán)所有者不反對按照其在(美國)專利商標局的專利文件或記錄中的形式對任何專利文檔或?qū)@_內(nèi)容(包括附圖)進行復制,但版權(quán)所有人保留其它所有權(quán)利。
具體實施例方式
本發(fā)明現(xiàn)在會關(guān)于多個實施例來描述。下列描述提供了對本發(fā)明的這些實施例的徹底的理解和使得能夠描述的特定細節(jié)。然而,本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明可以不需這些細節(jié)而實現(xiàn)。在其它示例中,為避免不必要的對本發(fā)明的實施例的描述的遮蔽,公知的結(jié)構(gòu)和功能沒有顯示或詳細描述。
在本描述中使用的術(shù)語旨在以其最廣闊合理的方式解釋,即使它被結(jié)合本發(fā)明的某些特定實施例的詳細描述而使用。甚至在下文強調(diào)了某些術(shù)語,但是任何術(shù)語旨在被以任何約束的方式解釋的,將如其在具體實施方式
部分中被公開地且特別地定義的那樣。
I.概述此處所描述的方法和系統(tǒng),允許對用來表示在呈現(xiàn)文本、符號和其它字形中使用的字體紋理的位圖的打包和解包。使用這樣的技術(shù),應用程序可以提供非常大的字形集,而不使由運行該應用程序的硬件提供的存儲器資源負載過重。例如,在某些實施例中,字體打包工具將每像素16位的字體位圖壓縮至每像素4位(具有包括用來生成在屏幕或其它顯示設(shè)備上顯示的一個輸出像素的信息的源像素)。在其它實施例中,字體打包工具將每像素8位的字體位圖壓縮至每像素2位。在另外其它實施例中,字體打包工具將每像素8位的字體位圖壓縮至每像素1位。該方法和系統(tǒng)也允許通過包含常規(guī)像素著色器的圖形處理單元來對壓縮的字體位圖解包。
II.代表性系統(tǒng)圖2和下述討論提供了對可在其中實現(xiàn)本發(fā)明的代表性環(huán)境的簡要的、大概的描述。盡管不是必需的,本發(fā)明的諸方面可在諸如由通用計算機(例如,服務器計算機、無線設(shè)備或個人/膝上型計算機等)執(zhí)行的例程等的計算機可執(zhí)行指令的通用語境中描述。相關(guān)領(lǐng)域的技術(shù)人員可以理解,本發(fā)明可以使用其它通信、數(shù)據(jù)處理或計算機系統(tǒng)配置來實現(xiàn),包括因特網(wǎng)設(shè)備、手持式設(shè)備(包括個人數(shù)字助理(PDA))、可穿戴計算機、所有形式的便攜式或移動電話、嵌入式計算機(包括耦合至車輛的那些)、多處理器系統(tǒng)、基于微處理器或可編程消費電子產(chǎn)品、機頂盒、網(wǎng)絡PC、小型機、大型機等。實際上,術(shù)語“計算機”、“主機”和“主計算機機”通??梢员唤粨Q使用,且指的是上述設(shè)備和系統(tǒng)中的任何一個,也可以是任何數(shù)據(jù)處理器。
本發(fā)明的諸方面可以收錄在被專門編程、配置或構(gòu)造來執(zhí)行在此處詳細解釋的一個或多個計算機可執(zhí)行指令的專用計算機或數(shù)據(jù)處理器中。本發(fā)明的諸方面也能夠在分布式計算環(huán)境下實現(xiàn),分布式計算環(huán)境中,任務由通過通信網(wǎng)絡連接的遠程處理設(shè)備執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中。
本發(fā)明的諸方面可以被存儲或分布在計算機可讀介質(zhì)上,包括磁性或光學可讀計算機盤,作為半導體存儲器、納米工藝存儲器、有機或光學存儲器或其它便攜式數(shù)據(jù)存儲介質(zhì)上的微碼來實現(xiàn)。實際上,計算機實現(xiàn)的指令、數(shù)據(jù)機構(gòu)、屏幕顯示和在本發(fā)明的諸方面之內(nèi)的其它數(shù)據(jù)可以被分布在因特網(wǎng)或其它網(wǎng)絡(包括無線網(wǎng)絡)上、在一段時間上位于傳播介質(zhì)(例如,電磁波、聲波等)上的傳播信號上,或可以在任何模擬或數(shù)字網(wǎng)絡(包交換、電路交換或其它方案)上提供。相關(guān)領(lǐng)域的技術(shù)人員可以認識到,本發(fā)明的一部分駐留在服務器計算機上,而對應的部分駐留在諸如移動設(shè)備的客戶計算機上。
參考圖2,可在其上實現(xiàn)紋理打包和解包技術(shù)的代表性環(huán)境包括游戲控制臺200。游戲控制臺可以包括CPU 202、數(shù)據(jù)存儲204、存儲器206和聲頻/視頻端口208、以太網(wǎng)端口210、電源端口212和一個或多個控制器端口214。此外,游戲控制臺200可以包括含像素著色器220的圖形處理單元(GPU)組件216。像素著色器220可以是使用常規(guī)設(shè)計的。例如,它可以提供即使有也極少數(shù)的逐位操作,且可以使用有限的指令集來控制。
在某些實施例中,GPU組件216處理由運行在游戲控制臺200上的游戲應用程序218提供的打包的和解包的紋理。所述實施例中的游戲應用程序218包括打包的字體紋理226。在某些實施例中,打包的字體紋理226在游戲應用程序開發(fā)階段被創(chuàng)建。該游戲應用程序的設(shè)計者可以使用設(shè)計系統(tǒng)222(包括打包工具224)來生成打包的字體紋理226。如圖所示,游戲設(shè)計系統(tǒng)222位于游戲控制臺外部。
打包的字體紋理226可以是位圖形式的,且可以包括一組字形(例如,文本字符、符號等)。當輸出時,每一字形可以由多個像素構(gòu)成,每一源像素包括用來生成在屏幕或其它顯示設(shè)備上顯示的一個輸出像素的信息。該位圖本身由多個像素構(gòu)成,每一像素含有多于一個的通道。該配置允許位圖的每一像素保存或表示多于一個的值。例如,打包的字體紋理226的某些像素可以包括多個4位的值、多個2位的值或甚至多個1位的值,如此處進一步描述那樣。從而,當被視為在顯示屏上的位圖時,打包的字體紋理226可以看起來擁有多個重疊的字形。
為了便于對生成輸出像素的源像素處理,GPU組件216可包括若干存儲解包紋理中使用的值的寄存器。例如,GPU組件216可以包括t0寄存器228用于存儲由像素著色器220在解包時從該紋理中取出的像素。在某些實施例中,t0寄存器228包括用于區(qū)分關(guān)于該像素各個通道的信息的空間。同樣地,GPU組件216可以包括r0寄存器230用于存儲像素信息。類似于t0寄存器228,r0寄存器230可以包括用于區(qū)分關(guān)于該像素的各值的空間。另外,GPU可以包含c0寄存器232和c1寄存器234用于存儲在解包中使用的常量(例如,掩碼值)。GPU組件216還可包含v0寄存器236,為當前像素存儲經(jīng)內(nèi)插的頂點顏色值。以這種方式,像素著色器220能夠給任何取出的和未壓縮的像素分配一顏色值。GPU組件216可以包括其它寄存器(例如,指令寄存器)(未示出)。
在
具體實施例方式
的下面部分提供紋理打包和解包的示例。例如,提供關(guān)于16位到4位壓縮、8位到2位壓縮和8位到1位壓縮的示例。這些示例使用框圖、展示圖和流程圖的結(jié)合來闡述。這些圖沒有顯示所有可能的數(shù)據(jù)結(jié)構(gòu)、配置、格式和例程,而是提供了對在該系統(tǒng)內(nèi)打包和解包紋理的理解。相關(guān)領(lǐng)域的技術(shù)人員可以是認識到,某些數(shù)據(jù)結(jié)構(gòu)、配置、格式和例程可以被重復、變化、省略或補充,且其它沒有示出的部分可以是容易被實現(xiàn)的。
III.紋理壓縮(1)每像素16位到每像素4位的壓縮圖3-6對應于打包和解包含有能夠被壓縮至4位而仍能保持諸如抗混疊、下拉陰影和輪廓描繪等特征的像素的字體紋理的技術(shù)。一般,每像素16位的紋理被用于含有彩色文本和/或?qū)⒆远x繪制的特征(例如,箭頭、圖形等)嵌入字體中的應用程序??墒褂酶鞣N格式來配置這樣的紋理。這種格式的一個示例是由微軟的DirectX 8類硬件提供的格式,其中像素的每一通道(例如,紅、綠、藍、阿爾法)被分配4個比特。該格式允許16個紅色的獨立值、16個綠色的獨立值,依此類推,對包括畫家著色的圖像在內(nèi)的大多數(shù)彩色圖像來說是足夠的。
圖3示出了用于將每像素16位紋理打包至每像素4位的例程300的示例。當結(jié)合諸如圖6所示解包例程600之類的互補的解包例程使用時,打包例程300可以保存所希望的原始紋理的特征(例如,抗混疊、輪廓描繪或下拉陰影),且允許使用著色字體。另外,打包例程300可以允許在相同的紋理位圖中的預著色/自定義的字形(然而,在某些實施例中,這樣的預著色/自定義的字形保持為每像素16位格式)。在某些實施例中,打包例程300中的部分由執(zhí)行逐位運算的打包工具執(zhí)行。
打包例程300通過使用灰度級來打包紋理,其中,黑色或透明作為黑色,白色作為白色,而顏色作為灰色深淺度。一般,打包例程300假定,從白到灰到黑,白色像素逐漸消失(基于對應的亮度值),而黑色像素從黑到半透明到透明逐漸消失。對16位黑、白和灰像素,像素的紅、綠、藍(RGB)通道包含同樣的值(例如,對白(15,15,15)),意味著表示任何一個灰色像素的灰度值(亮度)僅需單個4位的RGB值(范圍是十進制值0-15)。在某些實施例中,能夠在解包時,使用存儲在基礎(chǔ)頂點中的顏色信息被用在實時呈現(xiàn)系統(tǒng)中的調(diào)制技術(shù),將合適的顏色信息添加至灰色像素。
根據(jù)此方案,打包例程300可以對字形中的每一16位像素如下分配4位例程300分配第一個位來表示白/灰像素或者黑/透明像素。例程300分配第二個、第三個和第四個位來表示灰度亮度(對于白/灰像素)信息,或者阿爾法透明度信息(對于黑/透明像素)。這種格式的示例關(guān)于圖4示出。
返回參考圖3,在某些實施例中,打包例程300在框301處開始,在這里,它從原始紋理中取出第一個字形。在判定框302處,打包例程300檢查該取出的字形,來確定它是否是預著色/自定義的字形。在判定框302處,如果該取出的字形是預著色/自定義的字形,例程300前進至框303,在那里,打包例程300將該未壓縮的字形以其16位形式(沒有打包)嵌入至輸出紋理中,并設(shè)置標記指示該字形未打包。從框303,打包例程300前進至框311來確定該原始紋理是否包括可用于取出的剩余字形。
然而,如果,在判定框302處,該取出的字形不與預著色/自定義的字形相關(guān)聯(lián),打包例程300前進至框304處來取出該取出的字形的下一個像素。當取出下一個像素后,例程300前進至判定框305,在這里,它檢查取出的像素的RGB值是否全等于0(意味著,該取出的像素是黑色或透明的),全等于0則打包例程300前進至框306處,將4個可用的像素位的第一個設(shè)置為0。下一步,在框307處,打包例程300根據(jù)所取出的像素的阿爾法值設(shè)置后面三個像素位。例如,如果所取出的像素的阿爾法值為0(例如,對于完全透明的像素),那么打包例程300將后面三個像素位設(shè)置為(0,0,0)。但是,如果所取出的像素的阿爾法值比0大,那么該例程根據(jù)所取出的像素的4位阿爾法值的最高有效的三位使用范圍為001-111的二進制的阿爾法值來設(shè)置后面的三個像素位。(在后面,解包例程可以將這三位向左移動一格,用來提供二進制1111或十進制15的最大阿爾法值(即,不透明的黑色像素)。)打包例程300隨后前進至判定框310,在這里它檢查該原始紋理是否還有要取出的值。
然而,如果在判定框305處,所取出的像素的RGB值比0大(意味著,所取出的像素是白色的或有色的),那么打包例程300繼續(xù)前進至框308處,在這里它將4個可用的像素位的第一位設(shè)置為1。下一步,在框309處,打包例程300將剩余的三個像素位設(shè)置來表示范圍為二進制的000-111的亮度值。因為打包例程300將每個原始16位像素作為或者是白、灰或者是黑色對待,RGB值對每一像素都是相同的(例如,紅=1110,綠=1110,藍=1110)。這樣,分配的三位亮度值可以大致地對應對任何給定像素的三個4位RGB值中任何一個的最高有效的三位。在對字體紋理解包過程中,這三個位能夠被左移一格,這樣匹配原始16位像素的4位RGB值。
作為上述步驟的結(jié)果,來自于原始紋理的16位像素能夠以4位存儲于新紋理中。例如,打包例程300可以通過將該4位像素分配給對應于新的16位紋理中的一個像素的單個通道(例如,紅、綠、藍或阿爾法),將其嵌入至新的每像素16位的紋理位圖中。
例程300隨后繼續(xù)前進至判定框310,在那里,檢查是否存在關(guān)于該字形要取出的另外的像素。如果在判定框310處,存在要取出的另外像素,例程300返回至框304處,來取出下一像素。否則,該例程前進至判定框311處,確定紋理中是否存在要取出的另外的字形。基于該判定,例程300或者結(jié)束(如果不存在要取出的另外字形),或者返回至框301處,取出下一字形。
如圖5所示,在每像素16位的位圖502上運行打包例程300,可以獲得呈現(xiàn)為一連串重疊的字形的新紋理位圖504的結(jié)果,每一字形占用每一可用像素的唯一的4位通道。然而,如圖所示,任何對應于自定義的或預著色的字形的像素可以被保留在使用所有4個通道的16位格式。
用于解包諸如圖5所示的紋理位圖504之類的壓縮的紋理位圖的例程的示例,在圖6中示出。解包例程600可至少部分地在從包含該壓縮的紋理的應用程序(例如,電子游戲應用程序)接收指令的像素著色器中執(zhí)行。該像素著色器可以在與GPU組件(諸如游戲控制臺的GPU)相關(guān)聯(lián)的硬件中實現(xiàn)。從而,關(guān)于解包例程600描述的具體的像素著色器指令,遵循由所示實施例的特定像素著色器硬件所理解的協(xié)議。然而,本領(lǐng)域的技術(shù)人員可以理解,可以在多種不同類型的像素著色器(或其它硬件/軟件)中實現(xiàn)相似的或修改的例程,而不背離本發(fā)明的范圍。
在框601處,解包例程600從壓縮的字體紋理中取出16位的像素。例如,如下的像素著色器指令可以被用來取出和并加載一16位的像素至GPU的寄存器t0tex t0作為取出該16位像素和將其加載至寄存器t0的部分,解包例程600也可以指令該像素著色器來執(zhí)行一個操作來分離與所取出的像素相關(guān)聯(lián)的每個通道(例如,紅、綠、藍和阿爾法)。以這種方式,解包例程600能夠標識所取出像素的每一通道,例如,如下t0.a=alpha,t0.r=red,t0.g=green,t0.b=blue,其中,t0.a表示t0寄存器的阿爾法通道分量,t0.r表示t0寄存器的紅色通道分量,t0.g表示t0寄存器的綠色通道分量,而t0.b表示t0寄存器的藍色通道分量。在像素著色器寄存器大小與像素大小不匹配的某些實施例中,與所取出的像素相關(guān)聯(lián)的值可以按需擴展。例如,在擁有32位寄存器的像素著色器中,每一通道8位,16位的像素可以在該像素著色器中被擴展至32位,這樣該16位像素的每4位的值在其中被存儲為8位。
在取出16位像素并將其值存儲在t0寄存器的合適分量中后,解包例程600假定,所取出的16位像素包含關(guān)于4個“重疊的”字形(例如,該16位像素的每一通道包含一4位的值)的信息。從而,解包例程600繼續(xù)前進至框602處,在這里,例程600執(zhí)行另外的處理來分離含有所需字形的值的通道。例如,解包例程600可以使用點積(dp)指令來將每一16位像素與專門用來保存與其它三個通道相關(guān)聯(lián)的所需4位值的一掩碼值相結(jié)合。在一實施例中,用于執(zhí)行掩碼操作的像素著色器指令可以顯示如下dp4r0.a,t0.rgba,c0.rgba,其中,r0.a是當操作完成時將存儲所需4位值的輸出寄存器的通道,t0是包含所取出的16位像素的寄存器,而c0是保持該掩碼值的像素著色器常量(通常由包含該壓縮的紋理的應用程序提供)。例如,在一備選實施例中,其中像素著色器不支持4通道點積指令(dp4),該dp4指令可以由3通道點積指令(dp3)繼之以一乘和加(mad)指令替換,以將點積操作擴展到第4通道dp3 r0.a,t0.rgb,c0.rgbmad r0.a,t0.a,c0.a,r0.a.
按照上述指令,對應于所需字形的4位值被存儲在r0寄存器的阿爾法分量(r0.a)中。
解包例程600繼續(xù)前進至判定框603處,在這里例程600控制對目前存儲在r0.a的所需的4位值的測試,來確定它是否表示白/灰像素或黑/透明像素。如果在判定框603處,該4位值是白/灰像素(例如,1XXX),解包例程600前進至框604處,通過移除最高有效位,將剩余的三位左移一位,然后將產(chǎn)生的4位值存儲在RGB通道的每一個(例如,r0.r、r0.g、r0.b)中來設(shè)置相應的RGB值。
然而,如果在判定框603處,該4位值是黑/透明像素(例如,0XXX),那么解包例程600繼續(xù)前進至框605處,將4位值的RGB值的每一個(分別存儲在r0.r、r0.g、r0.b中)設(shè)置為0。解包例程600隨后通過移除最高有效位,將剩余的較低的位左移一位,并隨后在阿爾法通道(r0.a)中存儲產(chǎn)生的4位值來設(shè)置4位值的阿爾法值(存儲在r0.a中)。
在某些實施例中,在實現(xiàn)解包例程600中使用的像素著色器一般可能不執(zhí)行逐位運算。DirectX 8像素著色器是這樣的像素著色器的一個示例。在這樣的情況中,可以使用其它類型的操作和寄存器修改器來分離和測試位,并左/右移位。例如,一系列條件(cnd)指令和寄存器移位修改器可以被用來使像素著色器執(zhí)行上述關(guān)于框603-605描述的操作(例如,測試4位值的最高有效位,按需移位,以及在合適的RGBA通道中存儲輸出值)。從而,在某些實施例中,相應的像素著色器指令可如下cnd r0.rgb,r0.a,r0_bx2.a,zero.rgb+cnd r0.a,r0.a,one.a,r0.a在第二條指令之前的“+”符號向像素著色器指示,該條指令可以與前一條指令成對,允許該像素著色器同時執(zhí)行這兩條指令。如果硬件能夠同時執(zhí)行僅針對RGB的指令和僅針對阿爾法的指令,這樣的同時執(zhí)行是可能的。成對指令以這種方式可以提高性能。
在判定框606處,解包例程600確定,原始取出的像素(仍舊存儲在寄存器t0中)是否表示自定義字形的像素(在打包過程中使用其完全的每像素16位格式存儲在紋理中)或它是否包含關(guān)于四個“重疊的”字形的信息,每一字形的4位值分別存儲在16位像素的各自的RGBA通道中(如解包例程600在框602-605處假定的那樣)。某些像素著色器可以提供允許判定框606在框602-605中出現(xiàn)的處理之前執(zhí)行。例如,這樣的例程可以測試對應于所取出的像素的字形的標記是否在打包過程中被設(shè)置(例如,圖3的打包例程300的框303)。然而,所示實施例的像素著色器沒有為這樣的標記測試而配置,從而,在進行框602-605的處理后,使用線性內(nèi)插操作(lrp)在t0寄存器(包含原始取出的16位值,在自定義的字形的情況中使用)和r0寄存器(包含根據(jù)框602-605處理的值)之間縮放。在某些實施例中,用于線性內(nèi)插的像素著色器指令可以如下irp r0,c1.a,t0,r0該線性內(nèi)插指令被應用于所有4個RGBA通道,擴展為
r0.r=(c1.a)*t0.r+(1-c1.a)*r0.rr0.g=(c1.a)*t0.g+(1-c1.a)*r0.gr0.b=(c1.a)*t0.b+(1-c1.a)*r0.br0.a=(c1.a)*t0.a+(1-c1.a)*r0.a取決于c1.a的值,作為該線性內(nèi)插指令的結(jié)果,解包例程600或者將在r0寄存器中的RGBA值更新為等于t0的內(nèi)容(其中,c1.a=1)(框607),或者保留在r0中存儲的處理過的值用于輸出。
解包例程600繼續(xù)前進至任選框608,在這里,它對另外的白色或灰色像素運用著色。例如,解包例程600可以執(zhí)行基于所需輸出色彩的輸出調(diào)制。在所示實施例中,這可以涉及將r0中存儲的輸出值乘以包含所需色彩的信息的一頂點顏色值(例如,存儲在寄存器v0中)或像素著色器常量(例如,c2)。在框609處,解包例程600將存儲在寄存器r0的值作為輸出像素輸出。解包例程600隨后前進至判定框610,在這里它檢查來確定是否應該取出下一個像素來完成該字形。如果下一個像素應該被取出,那么解包例程600返回至框601處。否則,解包例程600結(jié)束(輸出存儲在寄存器r0中)。
在某些實施例中,上述解包例程600可以結(jié)合間隔和定位例程(未示出)來工作。間隔和定位例程可以參考含有如在應用程序中所使用的每一字形的間隔和邊界信息的另一個文件。例如,當呈現(xiàn)字母“A”時,像素著色器可以參考一張表來找出字母“A”在字體紋理中的邊界矩形。在使用解包例程600繪出該字母的所有像素后,根據(jù)該字母的間隔使繪制位置前進。
(2)每像素8位至每像素2位的壓縮圖7-10對應于用于打包和解包含有能夠被壓縮至像2位一樣少而仍能保持諸如抗混疊等的特征的像素的字體的技術(shù)。圖7示出含有這樣的字體的紋理位圖700的示例。對以這種格式配置的紋理,每一像素的顏色值可以是白色的。為了提供抗混疊效果,在每一字形外附近的白色像素可以被分配一透明值,以至于這樣的像素能夠顯示為漸漸融入于著色的背景中。
盡管這樣的位圖一般被保存為含有8位阿爾法值(提供256個不同的阿爾法值)的32位Targa文件,但是在某些實施例中,不同的阿爾法值的個數(shù)減少到4(例如,100%不透明(白色)、66%不透明、33%不透明以及透明)。該4個不同的阿爾法值隨后能夠被如下編碼至2位11RGB=白色,Alpha=100%不透明(白色)10RGB=白色,Alpha=66%不透明01RGB=白色,Alpha=33%不透明00RGB=白色,Alpha=0%(透明)打包成上述格式的紋理位圖(例如,使用執(zhí)行逐位運算的打包工具)隨后可以被使用在應用程序中(例如,電子游戲應用程序)。圖8提供每像素2位壓縮紋理位圖800的畫面的示例。
像通過將值分別打包至16位像素的RGBA通道而將16位像素打包至4位像素值的打包例程300一樣,2位打包例程創(chuàng)建含有對每一RGBA通道2位的8位紋理。同時,該2位打包例程創(chuàng)建一調(diào)色板(或其它形式的查找表組件),便于在應用程序運行時在常規(guī)的GPU像素著色器中解包該值。更具體地,該2位打包例程可以使用已被常規(guī)像素著色器所認可的調(diào)色板格式,諸如256色調(diào)色板,含有32位顏色值陣列。在某些實施例中,該查找調(diào)色板是算法化地生成的,這樣壓縮紋理中的每一2位值遵循下列映射RR RRRRRRRR00 0000000001 0101010110 1010101011 11111111GG GGGGGGGG00 0000000001 0101010110 1010101011 11111111BB BBBBBBBB00 00000000
01 0101010110 1010101011 11111111AA AAAAAAAA00 0000000001 0101010110 1010101011 11111111這樣,例如,如果字形的特定組合被用于生成擁有值00 10 11 10的8位像素,那么打包例程在打包過程中將該值分配給來自調(diào)色板的對應的32位顏色值(例如,00000000 10101010 11111111 10101010)。
圖9是示出提供對壓縮的每像素2位紋理不使用逐位運算進行解包(這樣,提供可由一般不執(zhí)行逐位運算的常規(guī)像素著色器/GPU執(zhí)行的解包)的例程900的流程圖。在某些實施例中,如上所述,解包例程900使用256色調(diào)色板作為查找工具。然而,本領(lǐng)域的技術(shù)人員可以認識到,其它實現(xiàn)是可能的,諸如相關(guān)紋理讀取(dependent texture read)實現(xiàn),其中解包例程從一紋理中取出值,并使用該值來計算紋理坐標,然后紋理坐標又被使用于從另一個紋理中取出值。
在框901處,解包例程900從壓縮的紋理中取出8位的像素,該8位的像素含有4個獨特的2位值(例如,打包的紋理的每個RGBA通道一個),如下RRGGBBAA在框902處,解包例程900從256色調(diào)色板中取出相應的32位值,該32位值含有4個獨特的8位值(例如,每個RGBA通道一個),如下RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA這樣,從8位像素中獲得的每一2位像素可被方便地翻譯和分離成4個8位值,每一RGBA通道一個,能夠由常規(guī)像素著色器容易地處理。因為這些4個8位值可以屬于4個獨立的字形,所以在框903處,解包例程900將屬于所需字形的8位值分開。例如,解包例程900可以執(zhí)行類似于圖6的dp4掩碼操作602的掩碼操作。在框904處,解包例程900使用該分開的8位值作為即將輸出的解包的像素的8位阿爾法(透明度)值。在框905處,解包例程900使用存儲在寄存器v0中的頂點顏色作為RGB通道的值。例如,解包例程900可以執(zhí)行類似于圖6的乘法操作608的乘法操作。
在框906處,解包例程900輸出該解包的像素。解包例程900隨后前進至判定框907,在這里它檢查來確定,是否應該取出下一像素來完成該字形。如果應該取出下一像素,那么解包例程900返回至框901處。否則,解包例程900結(jié)束。
盡管使用2位解包例程900呈現(xiàn)的文本可能缺少輪廓描繪和下拉陰影效果,但是這種效果可以通過多次呈現(xiàn)該文本來被包含。例如,帶有下拉陰影的文本第一次繪制為帶有2像素偏移量的黑色文本,第二次在其原始位置上繪制為白色(或彩色)。使用這種技術(shù)呈現(xiàn)的帶有輪廓和下拉陰影的文本的示例在圖10中示出。
圖10所示的2位打包位圖100中的字體是抗混疊的,所以圓邊有最小的“鋸齒”效果。如圖所示,而且該字體能很好地縮放,這是在顯示不同大小字體的游戲中使用所需的。即使當字體被打包至僅每像素2位,但是因為硬件紋理過濾在調(diào)色板查找后發(fā)生(例如,在查找后,每一值在一個獨立的RGBA通道中,且硬件分開過濾每一通道),所以字體縮放仍有可能。
在某些實施例中,可以通過使用能夠使用有限顏色集合(例如,從256色調(diào)色板中可用的顏色,即4種紅色、4種綠色、4種藍色以及阿爾法的4個值)繪制的圖像來將嵌入的預著色(例如,自定義)圖像包含在壓縮的紋理位圖中。
(3)每像素8位至每像素1位的壓縮在某些應用程序中,需要可能減少存儲器使用的每一步驟。在這種情況中,將每像素8位的字體打包為每像素1位的技術(shù)(而仍支持8,000+字符字體)可以提供有重要意義的優(yōu)點,盡管這帶有不能容易地支持抗混疊的可能缺點。
對1位的情況,字體打包例程可以將所有的著色像素置為1,將所有透明的像素置為0(或反之亦然)。在某些實施例中,字體打包例程8層深地打包符號,這樣,在紋理中的每一8位像素由屬于8個獨立符號的多達8個獨特的1位值共享。這種配置意味著,每一RGBA通道(每一通道被分配2位)可以包含兩個獨立字形的信息,總共4種可能的組合(00,01,10或11)。同時,該1位打包例程可以創(chuàng)建在一查找表(例如,256色調(diào)色板)中的映射,便于在應用程序運行時在GPU像素著色器中解包該值。例如,在某些實施例中,256色調(diào)色板是算法生成的,使得壓縮紋理中的每對1位值遵循下列映射
R1R2RRRRRRRR00 0000000001 0101010110 1010101011 11111111G1G2GGGGGGGG00 0000000001 0101010110 1010101011 11111111B1B2BBBBBBBB00 0000000001 0101010110 1010101011 11111111A1A2AAAAAAAA00 0000000001 0101010110 1010101011 11111111根據(jù)上述映射方案,壓縮紋理位圖中的每一8位像素,可以含有4組值(例如,R、G、B以及A),每組值含有表示不同字形的像素的兩個值(例如,R1R2G1G2B1B2A1A2)。圖11提供了每像素1位壓縮紋理位圖的形象的示例1100。
圖12是示出提供不使用逐位運算(這樣,允許由常規(guī)像素著色器/GPU進行的解包)的壓縮的每像素1位的紋理的解包的例程1200的流程圖。1位解包例程1200使用可以使用以來自原始(未壓縮)紋理的8位值為索引的256色調(diào)色板來實現(xiàn)的每像素查找表。然而,本領(lǐng)域的技術(shù)人員可以認識到,其它的實現(xiàn)是可能的,諸如相關(guān)紋理讀取實現(xiàn),其中例程從一紋理中取出值,使用該值來計算紋理坐標,紋理坐標又用于從另一紋理中取出值。
在框1201處,該1位解包例程1200從壓縮的紋理中取出一8位值,該8位值含有8個獨特的1位值(例如,每個RGBA通道2個)。例如,每一通道含有2位,每一個表示不同字形的一個像素(例如,R1R2G1G2B1B2A1A2)。盡管這些8個1位值中僅有一個對應于所需字形的一個像素,在某些實施例中,由解包例程1200進行的初始處理涉及處理所有8位。從而,在框1202處,例程1200從調(diào)色板中取出一對應的32位值,該32位值含有4個獨立的8位值(例如,RRRRRRRR,GGGGGGGG,BBBBBBBB,AAAAAAAA)。例如,當該映射被應用于含有位10 01 01 11的取出的8位值時,最后得到的32位值可以是10101010 01010101 01010101 11111111,在下列表格中由RGBA內(nèi)部值分解示出
在框1203處,解包例程1200從該32位值中識別4個RGBA通道中的一個來隔離開對應于所需字形的像素的8位內(nèi)部值。例如,解包例程1200可以執(zhí)行類似于圖6的dp4掩碼操作602的掩碼操作。此時,解包例程1200留下表示包含所需字形的像素在內(nèi)的2個像素的信息的8位值。例如,參考上述表格,如果該掩碼操作將與藍色通道相關(guān)聯(lián)的內(nèi)部值隔離開,那么解包例程1200留下對應于兩個可能字形的第一個的內(nèi)部值01010101。
在框1204處,解包例程1200可以按照它與兩個可能字形中的第一個有關(guān)來存儲和測試隔離開的內(nèi)部值。例如,解包例程1200可以在第一寄存器通道(例如,r0.a)中存儲8位內(nèi)部值,且測試該8位內(nèi)部值的最高有效位來檢查它對應于字形的著色部分還是字形的未著色部分。類似地,在框1205處,該解包例程可以按照它與兩個可能字形中的第二個有關(guān)來存儲和測試隔離開的內(nèi)部值(或該隔離開的內(nèi)部值偏移的形式)。例如,解包例程1200可以在第二存儲器通道(例如,r1.a)中存儲該8位內(nèi)部值,且測試第二最高有效位來檢查它對應于字形的著色部分或字形的未著色部分。用于執(zhí)行框1204和1205操作的像素著色器指令可以如下
cnd_x2 r1.a,r0.a,r0_bias.a,r0.a可以用偽代碼寫作r1.a=2*(r0.a?(r0.a-0.5),r0.a)在該像素著色器中,因為值0.5對應于二進制8位值10000000,將一個值減去0.5實際上就是去除了該位的高位。從而,上述偽代碼可以被翻譯為If the high-bit of r0.a is setThenSubtract r0.a by 0.5to remove the high-bitElseKeep r0.a as isShift result by one bit left and store in r1.a在框1206處,解包例程1200選擇或是對應于第一字形的值(例如,存儲在r0.a中的值)或是對應于第二字形的值(例如,存儲在r1.a中的值)。用于執(zhí)行該操作的像素著色器指令可以如下Irp r0.a,c1.a,r0.a,r1.a在框1207處,解包例程1200基于上述處理輸出或是著色的(例如,白色)或是未著色的像素。r0.a的高位用于設(shè)置透明度。用于執(zhí)行該操作的相應的像素著色器指令可以如下mov r0.rgb,v0.rgb+cnd r0.a,r0.a,one.a,zero.a.
盡管沒有示出為獨立的框,像2位解包例程900一樣,1位解包例程1200可以對著色的像素使用特定的顏色(例如使用頂點顏色應用技術(shù))。解包例程1200隨后前進至判定框1208,在這里它檢查來確定下一個像素是否應該被取出來完成該字形。如果應該取出下一像素,那么解包例程1200返回至框1201處。否則,解包例程1200結(jié)束。
使用1位壓縮可以提供顯著提高的存儲器節(jié)省。例如,含有8000個字符、每一個字符占用16×16像素的中文字體可以裝入僅僅256KB中。20×20像素的更大字符可以裝入400KB中。在某些實施例中,可能為文本繁重的情形(像會話,總共需要8000字符)保存1位字體,同時保存能夠為其它使用(例如,菜單和用戶界面)縮放的2位字體,這取決于字符的更小的子集。另外,如同使用2位壓縮的字體,能夠使用每像素1位的紋理位圖通過多次呈現(xiàn)該文本(例如,第一次作為含有2像素偏移量的黑色文本,第二次作為在原始位置上白色(或著色的)文本)來獲得輪廓描繪和/或下拉陰影效果。
IV.結(jié)論除非上下文明確需要,否則遍及說明書和權(quán)利要求,詞語“包含”、“包括”以及其類似物,應該以相對于排他或窮舉意義的包含的意義來解釋;即,使用“包含,但不限于”的意義。另外,詞語“此處”、“上述”、“下述”和類似意義的詞語,在本發(fā)明中使用時,應該指的是本發(fā)明的全部而不是本發(fā)明的任何特定部分。當權(quán)利要求使用詞語“或”關(guān)于兩個或多個項目的一列時,該詞語覆蓋對該詞語的所有下列解釋在該列中的任何項目、在該列中的所有項目,以及在該列中的項目的任何組合。
上述本發(fā)明的實施例的詳細描述,不旨在詳盡的或限制本發(fā)明使用上述揭示的精確形式。如相關(guān)領(lǐng)域的技術(shù)人員可以認識到,盡管本發(fā)明的特定實施例和示例被上述描述,但是它們被用于說明性的用途,多種等價的修改可以在本發(fā)明的范圍之內(nèi)。例如,盡管處理或框以給定順序提供,備選實施例可以執(zhí)行使用不同順序,以及某些處理和框被刪除、移動、添加、細分、結(jié)合和/或修改的步驟的例程或使用不同順序,以及某些處理和框被刪除、移動、添加、細分、結(jié)合和/或修改的框的系統(tǒng)。這些處理或框的每一個可以以多種不同的方式實現(xiàn)。而且,盡管處理和框有時被示出為連續(xù)地執(zhí)行,這些處理和框可以改為并行地執(zhí)行,或可以以不同的次數(shù)執(zhí)行。當語境允許時,上述具體實施方式
中使用單數(shù)或復數(shù)的詞語也可以分別包括復數(shù)或單數(shù)。
此處提供的本發(fā)明的講授,能夠被應用于其它系統(tǒng),不必是此處所述的系統(tǒng)。上述多個實施例的元素和動作能夠結(jié)合來提供更多實施例。
上述專利、申請和其它參考文獻,包括在填寫的文件中列出的任何文獻,通過引用包含在此。如果必要,本發(fā)明的諸方面能夠被修改來使用上述多個參考中的系統(tǒng)、功能和概念來提供對本發(fā)明的更多的實施例。
可以根據(jù)上述具體實施方式
來對本發(fā)明作這樣或那樣的修改。盡管上述說明書詳細描述了本發(fā)明的特定實施例,且描述了預期的最好模式,但是不管上述在文中如何詳細描述,本發(fā)明可以以多種方式實現(xiàn)。盡管被此處揭示的本發(fā)明包含,內(nèi)容共享系統(tǒng)、垃圾郵件控制和隱私管理技術(shù)的細節(jié)可以在其實現(xiàn)細節(jié)上有很大差異。如上所述,在描述本發(fā)明特定特性和方面時使用的特定術(shù)語不能被認作,意味著該術(shù)語在此處被重新定義來約束與該術(shù)語相關(guān)聯(lián)的本發(fā)明的任何特定的特征、特性或方面。一般,在下列權(quán)利要求中所使用的術(shù)語不能被解釋為將本發(fā)明限制于說明書中揭示的特定實施例,除非上述具體實施方式
部分明確地定義這樣的術(shù)語。從而,本發(fā)明的實際范圍不僅包含揭示的實施例,而且包含在權(quán)利要求下實現(xiàn)或?qū)嵤┍景l(fā)明的所有等價的方式。
盡管本發(fā)明的特定方面在下文中以特定權(quán)利要求的形式提供,但是發(fā)明人預期到本發(fā)明的諸多方面以任何數(shù)量的權(quán)利要求形式。例如,盡管本發(fā)明僅有一個方面被描述為在計算機可讀介質(zhì)中具體化,但是其它方面可以同樣地在計算機可讀介質(zhì)中具體化。從而,發(fā)明人保留在提交申請后追加另外的權(quán)利要求來為本發(fā)明的其它方面追求這樣的額外權(quán)利要求形式的權(quán)利。
權(quán)利要求
1.一種減少用于存儲紋理中的符號的比特數(shù)的方法,所述紋理用于呈現(xiàn)包括文本符號的三維圖形以在二維空間中顯示,所述方法包括接收包括文本符號的未壓縮紋理位圖(502),所述文本符號包括輪廓描繪特征、下拉陰影特征和抗混疊特征中的至少一個,其中,所述未壓縮紋理位圖(502)使用每紋理像素16位格式的像素;以及將所述未壓縮紋理位圖(502)打包成壓縮的紋理位圖(504),其中,所述壓縮的紋理位圖(504)使用4位格式和16位格式存儲像素信息,且其中,使用以4位格式存儲的像素信息呈現(xiàn)的文本符號保留任何輪廓描繪特征、下拉陰影特征以及抗混疊特征。
2.如權(quán)利要求1所述的方法,其特征在于,所述將未壓縮紋理位圖打包包括依照4位格式,將與第一文本符號相關(guān)聯(lián)的第一像素打包至16位像素的紅色通道中;依照4位格式,將與第二文本符號相關(guān)聯(lián)的第二像素打包至所述16位像素的綠色通道中;依照4位格式,將與第三文本符號相關(guān)聯(lián)的第三像素打包至所述16位像素的藍色通道中;以及依照4位格式,將與第四文本符號相關(guān)聯(lián)的第四像素打包至所述16位像素的阿爾法通道中。
3.一種用于在顯示包括三維文本的三維圖形的計算機化的應用程序中進行文本呈現(xiàn)的系統(tǒng),所述系統(tǒng)包括像素著色器組件(220),用于從存儲在所述應用程序中的壓縮的紋理位圖中取出第一像素,其中,所述第一像素與一選擇的符號表示相關(guān)聯(lián),且其中。所述紋理位圖包括多個像素,每個像素大小為n,且每個像素含有每像素m個通道,其中,所述多個像素中的每個像素被配置成存儲多達m個值,一組多個符號表示,包括所述選擇的符號表示,其中,所述一組多個符號表示中的每一符號表示是使用多個值定義的,所述多個值的每一個值存儲在所述紋理位圖的一像素的單個通道中,使得所述多個像素中至少一個像素存儲對應于多達m個不同符號表示的值;圖形處理單元(216),它被配置成處理取出的像素以將所需的值與所述m個通道中的一個隔離隔離,以及處理所隔離隔離的值來確定亮度值和透明度值中的至少一個;以及基于對所隔離隔離的值的處理來輸出一新的像素,其中,所述新像素表示所選符號表示的一個可顯示像素。
4.一種減少用于存儲紋理中的符號的比特數(shù)的方法,所述紋理用于呈現(xiàn)包括文本符號的三維圖形以在二維空間中顯示,所述方法包括接收包括文本符號的未壓縮紋理位圖(502),所述文本符號包括抗混疊特征,其中,所述未壓縮紋理位圖(502)使用含有每像素8位的格式的像素;以及將所述未壓縮紋理位圖(502)打包成壓縮的每像素8位的紋理位圖(800),其中,所述壓縮的每像素8位的紋理位圖(800)使用2位格式存儲像素信息,其中,對未壓縮紋理位圖(502)的打包包括將含有2位格式的多達4個的值組合成單個8位像素。
5.如權(quán)利要求4所述的方法,其特征在于,所述單個8位像素的多達4個的值中的每一個與一獨特的文本符號相關(guān)聯(lián)。
6.如權(quán)利要求4所述的方法,其特征在于,所述單個8位像素的多達4個的值中的每一個與一透明度因數(shù)相關(guān)聯(lián)。
7.如權(quán)利要求4所述的方法,其特征在于,所述使用壓縮的每像素8位的紋理位圖文呈現(xiàn)的文本符號保留抗混疊特征。
8.如權(quán)利要求4所述的方法,其特征在于,對所述未壓縮紋理位圖的打包包括創(chuàng)建單個8位像素到256色調(diào)色板中的32位值的映射,其中,所述映射在對所述8位像素的解包過程中使用。
9.如權(quán)利要求4所述的方法,其特征在于,對所述未壓縮紋理位圖的打包包括創(chuàng)建單個8位像素到256色調(diào)色板中的32位值的映射,其中,所述映射在對所述8位像素的解包過程中使用,其中,所述未壓縮紋理位圖還包括一個或多個預著色的嵌入字形,其中,包含所述一個或多個預著色的嵌入字形的像素在所述壓縮的紋理位圖中保留8位格式,且其中,除了256色調(diào)色板中定義的顏色之外,所述預著色的字形的顏色被包含在內(nèi)。
10.一種用于在二維空間中顯示包括三維文本的三維圖形的計算機化的應用程序中進行文本呈現(xiàn)的系統(tǒng),所述系統(tǒng)包括像素著色器組件(220),用于從存儲在所述應用程序中的壓縮的紋理位圖中取出第一像素,其中,所述壓縮的紋理位圖包括多個值,每個值大小為n/m比特,以及一組多個符號表示,其中,所述一組組多個符號表示中的每一符號表示包含多個像素,且其中,所述多個像素中的至少一個存儲對應于m個不同符號表示的值的信息;以及圖形處理單元(216),它被配置成將第一取出的像素與查找表中的映射值進行匹配,其中,所述映射值使用32個比特來表示,其中,所述映射值能夠被分成m個子值,且其中,所述m個子值中的每一個使用n/m個比特來表示,處理所述映射值以隔離隔離所述m個子值中的一個,以及基于所隔離隔離的子值,輸出一新像素,其中,所述新像素含有與所述子值相關(guān)聯(lián)的透明度因數(shù)。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述圖形處理單元包括用于存儲隔離所隔離的子值的副本的寄存器,其中,用于存儲隔離所隔離的子值的副本的寄存器包括用于包含紅色通道、綠色通道、藍色通道以及阿爾法通道的m個通道的存儲。
12.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述圖形處理單元包括用于存儲在隔離所述子值時用作隔離掩碼的常量的寄存器。
13.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述一組多個符號包括以一種或多種字體表示文本的字形。
14.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述圖形處理單元包括用于在處理過程中存儲所隔離隔離的像素的副本的寄存器,且其中,用于存儲隔離所隔離的像素的副本的寄存器包括用于包含紅色通道、綠色通道、藍色通道以及阿爾法通道的m個通道的存儲。
15.一種減少用于存儲紋理中的符號的比特數(shù)的方法,所述紋理用于呈現(xiàn)包括文本符號的三維圖形以在二維空間中顯示,所述方法包括接收包括文本符號的未壓縮紋理位圖(502),其中,所述未壓縮紋理位圖(502)使用含有每像素8位的格式的像素;以及將所述未壓縮紋理位圖(502)打包成壓縮的每像素8位的紋理位圖(1000),其中,所述壓縮的每像素8位的紋理位圖(1000)使用具有1位格式的壓縮的像素,其中,對所述未壓縮紋理位圖(502)的打包包括將含有1位格式的多達8個的值組合成單個8位像素。
16.如權(quán)利要求15所述的方法,其特征在于,所述多達8個的值的每一個提供了對應的壓縮的像素是著色還是透明的指示。
17.一種用于在顯示包括三維文本的三維圖形的計算機化的應用程序中進行文本呈現(xiàn)的系統(tǒng),所述系統(tǒng)包括像素著色器組件(220),用于從存儲在所述應用程序中的壓縮的紋理位圖中取出第一像素,其中,所述紋理位圖包括多個像素,每個像素大小為n個比特,以及一組多個符號表示,其中,所述一組組多個符號表示中的每一符號表示由多個值組成,且其中,所述多個像素中的至少一個存儲對應于n個不同符號表示的值的信息;以及圖形處理單元(216),它被配置成將所述第一像素與查找表中的可映射值進行匹配,其中,所述查找表中的可映射值能夠被分成多個通道,其中,所述多個通道中的每一個與一子值相關(guān)聯(lián);處理來自所述查找表的可映射值來隔離隔離所述子值中的一個;第一次處理隔離所隔離的子值來標識與第一像素相關(guān)聯(lián)的第一1位值;第二次處理隔離所隔離的子值來標識與第二像素相關(guān)聯(lián)的第二1位值;選擇所述第一1位值或所述第二1位值;以及基于所述第一1位值或所述第二1位值來生成輸出像素。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述圖形處理單元包括用于存儲所述第一1位值的第一寄存器和用于存儲所述第二1位值的第二寄存器。
19.一種包含用于在顯示三維圖形的計算機化的應用程序中呈現(xiàn)符號的紋理位圖的計算機可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括4位值,用于表示在所述紋理位圖中被配置為用于呈現(xiàn)的多個符號中的一個的像素大小的部分,其中,所述4位值包括第一位,它依據(jù)所述多個符號中的一個的像素大小的部分的顏色和透明度特征被置為高或低;第二位,它被置為高或低;第三位,它被置為高或低;第四位,它被置為高或低;其中,所述第二、三、四位一起組成與所述值所對應的符號的像素大小的部分相關(guān)聯(lián)的單個亮度值或單個透明度值。
20.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,如果所述像素大小的部分是白色、灰色或彩色的,那么所述第一位被置高。
21.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,如果所述像素大小的部分是黑色或透明的,那么所述第一位被置低。
22.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述第二、三、四位作為一個組被設(shè)置來表示單個亮度值。
23.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述第二、三、四位作為一個組被設(shè)置來表示單個透明度值。
24.一種包含用于在顯示三維圖形的計算機化的應用程序中呈現(xiàn)符號的紋理位圖的計算機可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括2位值,用于表示在所述紋理位圖中被配置為用于呈現(xiàn)的多個符號中的一個的像素大小的部分,其中所述2位值包括第一位,它依據(jù)所述多個符號中的一個的像素大小的部分的透明度特征被置為高或低;第二位,它依據(jù)所述多個符號中的一個的像素大小的部分的透明度特征被置為高或低;其中,所述第一、二位一起組成與所述2位值所對應的符號的像素大小的部分相關(guān)聯(lián)的單個透明度值。
25.如權(quán)利要求24所述的計算機可讀介質(zhì),其特征在于,所述第一和第二位一起被映射到查找表中的一個值,且其中,所述查找表中的值便于由一般不執(zhí)行逐位運算的像素著色器來處理所述2位值。
26.如權(quán)利要求24所述的計算機可讀介質(zhì),其特征在于,所述多個符號包括含有抗混疊特征的文本字符。
27.一種包含用于在顯示三維圖形的計算機化的應用程序中呈現(xiàn)符號的紋理位圖的計算機可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括1位值,用于表示在所述紋理位圖中被配置為用于呈現(xiàn)的多個符號中的一個的像素大小的部分,其中,所述1位值包括單個位,它依據(jù)所述多個符號中的一個的像素大小的部分是彩色還是透明而被置為高或低。
28.如權(quán)利要求27所述的計算機可讀介質(zhì),其特征在于,所述單個位能夠和表示所述紋理位圖中配置的所述多個符號中的其它符號的像素大小部分的位相結(jié)合,且其中,所述位的結(jié)合映射到查找表中的一個值,且其中,所述查找表中的該值便于由一般不執(zhí)行逐位運算的像素著色器來處理所述1位值。
29.如權(quán)利要求27所述的計算機可讀介質(zhì),其特征在于,所述多個符號包括含有透明背景的白色文本字符。
全文摘要
用于呈現(xiàn)包括文本在內(nèi)的三維圖形的方法和系統(tǒng),提供了壓縮的紋理位圖。該紋理位圖可以表示多個符號,每一符號包含多個像素。在紋理位圖中的每一像素可以為多于一個的符號存儲信息,包括對應于多個獨特符號的壓縮的像素。例如,壓縮的紋理位圖可以含有n位像素(例如,16位像素),每一像素至多存儲m(例如,4)個n/m位(例如,4位)壓縮的值?;蛘撸搲嚎s的紋理位圖可以含有n位像素(例如,8位像素),每一像素存儲m(例如,4)個n/m位(例如,2位)壓縮的值。同樣地,壓縮的紋理位圖可以含有n位像素(例如,8位像素),每一像素存儲m(例如,8)為1位值。壓縮的紋理位圖可以被配置來由諸如一般不執(zhí)行逐步運算的像素著色器的慣用像素著色器執(zhí)行解包。
文檔編號G06T9/00GK1770205SQ200510108869
公開日2006年5月10日 申請日期2005年9月30日 優(yōu)先權(quán)日2004年11月2日
發(fā)明者M·S·韋策爾, M·奧斯汀 申請人:微軟公司