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