專利名稱:使用捕捉的圖形硬件指令的圖形渲染方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)圖形系統(tǒng),并特別涉及提供將渲染操作從主機(jī)處理器卸載到基于寄存器的圖形子系統(tǒng)以增加圖形渲染速度和效率的方法和系統(tǒng),圖形子系統(tǒng)能夠在需要時只需要正常主機(jī)處理器操作而進(jìn)行圖形渲染。
一般來說,計(jì)算機(jī)圖形圖象是通過將在存儲于稱為幀緩沖區(qū)的存儲器位置的象素定義(色度和顏色)傳輸至顯示屏而產(chǎn)生。當(dāng)前,多數(shù)顯示系統(tǒng)是基于光柵的,這意味著存儲在幀緩沖區(qū)中的一個值確定給定象素的電子束的色度和顏色,電子束以適合的頻率掃描顯示屏的熒光涂層內(nèi)表面。
將一組程序碼形式的圖象定義傳輸至能夠物理顯示在CRT上的一組象素值,并且接著將象素值掃描到CRT上的過程經(jīng)常被稱為“渲染”。在渲染中,處理器必須從應(yīng)用程序中取得圖形圖元的說明并將它們轉(zhuǎn)換成象素定義,其中圖形圖元是更復(fù)雜的圖象的基礎(chǔ)。
請求進(jìn)行圖形操作的應(yīng)用程序一般調(diào)用基本渲染函數(shù)以渲染圖元,例如,線,圓和多邊形。這些基本渲染函數(shù)是用低級代碼寫成的,并位于圖形庫中。已知的一組基本圖形函數(shù)是應(yīng)用程序員接口(API),以使程序員根據(jù)這些基本函數(shù)以例如C和Fortan的高級語言寫應(yīng)用程序,而不需要寫低級代碼。一些標(biāo)準(zhǔn)化和商業(yè)提供的API包括OpenGL,PHIGS(程序員分級圖形標(biāo)準(zhǔn)),和GKS(圖形內(nèi)核系統(tǒng))。
為了使圖形被渲染,應(yīng)用程序中的高級API說明必須被解釋并降低成硬件級代碼。之后,該硬件級代碼必須被執(zhí)行以進(jìn)行填充或修改幀緩沖區(qū)所需的實(shí)際物理輸入/輸出操作。
即使是簡單的圖象,這些任務(wù)也消耗很大部分的處理器時間和系統(tǒng)存儲器。但是,圖形應(yīng)用程序越來越復(fù)雜,要求復(fù)雜,真實(shí)的圖象以彩色,帶有照明,陰影和其他的方式被渲染。如果一定圖象要求被反復(fù)渲染,例如,在視頻游戲的情況下,對處理器時間和系統(tǒng)存儲器的高要求能夠拖慢圖形渲染,使用戶懊惱。
這樣,要求有一種渲染方法能夠?qū)⒅貜?fù)的任務(wù)從主機(jī)處理器卸載,使其可以進(jìn)行其他需要的任務(wù)。特別是,主機(jī)處理器周期和存儲器得以保留,并提高了渲染速度,如果要求在圖形應(yīng)用程序中從高級API說明中產(chǎn)生硬件可執(zhí)行指令的主機(jī)處理器操作對要求反復(fù)渲染的圖象只進(jìn)行一次操作,并且硬件可執(zhí)行指令可以在需要時被執(zhí)行以渲染該圖象。在現(xiàn)有技術(shù)中還沒有這種方法。
本發(fā)明提供一種從主機(jī)處理器卸載渲染任務(wù)至圖形子系統(tǒng)的方法和系統(tǒng),其中圖形子系統(tǒng)在需要時進(jìn)行渲染任務(wù)。在根據(jù)本發(fā)明的方法和系統(tǒng)中,由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)產(chǎn)生的圖形硬件的圖形指令在存儲器中被捕捉。一旦硬件指令被捕捉,它們可以根據(jù)需要在圖形子系統(tǒng)中執(zhí)行,只需要正常主機(jī)處理器操作下渲染圖象。
根據(jù)本發(fā)明的軟件響應(yīng)任何圖形應(yīng)用程序中的指令,圖形應(yīng)用程序定義被捕捉作為硬件指令的基本渲染函數(shù)序列。應(yīng)用程序中的指令一般由希望使用本發(fā)明提供的優(yōu)點(diǎn)的程序員編寫的,并且可以包括一系列API中的基本渲染函數(shù)的高級調(diào)用以渲染一個特定的圖象,這些函數(shù)由開始程序和結(jié)束程序標(biāo)識符界定。
根據(jù)最佳實(shí)施例,當(dāng)應(yīng)用程序執(zhí)行時,開始程序標(biāo)識符激活本發(fā)明的軟件。該軟件執(zhí)行指令以產(chǎn)生相應(yīng)于在開始程序和結(jié)束程序標(biāo)識符之間界定的基本渲染函數(shù)的高級調(diào)用的硬件指令。然后,當(dāng)該軟件遇到結(jié)束程序標(biāo)識符時,它向一個主機(jī)系統(tǒng)寄存累積存儲的硬件指令作為一個可執(zhí)行程序。
結(jié)果,每當(dāng)應(yīng)用程序要求圖象被渲染,它發(fā)出該寄存的可執(zhí)行程序的調(diào)用,并且在圖形子系統(tǒng)內(nèi)執(zhí)行存儲的硬件指令而渲染圖象,而只要求正常的主機(jī)處理器操作。這樣,主機(jī)處理器周期被保留而可用于其他任務(wù),并且降低了系統(tǒng)存儲器的要求,因?yàn)橛蓱?yīng)用程序指定的相應(yīng)于基本渲染函數(shù)的硬件指令只被生成一次。
圖1示出現(xiàn)有技術(shù)的圖形渲染系統(tǒng)的一般視圖;圖2示出實(shí)現(xiàn)本發(fā)明的系統(tǒng)的基本軟件和硬件部件;圖3示出根據(jù)本發(fā)明的捕捉例程的流程;圖4示出應(yīng)用本發(fā)明的一個應(yīng)用程序的例子。
圖1示出現(xiàn)有技術(shù)的圖形渲染系統(tǒng)的概念總圖。在圖1示出的系統(tǒng)中,主機(jī)操作系統(tǒng)5有圖形設(shè)備驅(qū)動軟件7,它響應(yīng)圖形應(yīng)用程序8中的高級圖形渲染指令,發(fā)出低級指令至圖形子系統(tǒng)6中的圖形加速器30。在圖形設(shè)備驅(qū)動器7的控制下,加速器30將象素定義寫入幀緩沖區(qū)35,幀緩沖區(qū)35被掃描至顯示設(shè)備40以物理顯示渲染圖象。
相反,圖2示出根據(jù)本發(fā)明的圖形渲染方法和系統(tǒng)的基本軟件和硬件部件。元件包括圖形子系統(tǒng)10,圖形子系統(tǒng)10包括一個隨機(jī)存儲器20,一個定制圖形處理器,即顯示列表處理器(DLP)25,一個加速器30,一個幀緩沖器25,和一個顯示設(shè)備40,例如CRT。DLP25能夠取回存儲于存儲器20中的硬件指令,并發(fā)出指令以控制加速器30。加速器30包括多個高速寄存器,它們能夠根據(jù)DLP25發(fā)出的指令使象素定義寫入幀緩沖器35。之后,象素定義從幀緩沖器35掃描至顯示設(shè)備40以產(chǎn)生圖象。
現(xiàn)參考圖2和圖3,用于實(shí)現(xiàn)本發(fā)明的特征的計(jì)算機(jī)可執(zhí)行指令在圖形設(shè)備驅(qū)動器15中實(shí)現(xiàn)。設(shè)備驅(qū)動器15包括捕捉例程50和一個API組17,即,一組用于渲染圖元的基本渲染函數(shù)。API中的每個函數(shù)包括一系列硬件級的計(jì)算機(jī)可執(zhí)行指令,首要寄存器寫入指令,以指定,例如,給定圖元的尺寸和顏色和它在幀緩沖器中的位置。
API17中的函數(shù)可以由高級程序中的指令激活,通過由它的唯一助記符號標(biāo)識符指定的一個函數(shù),例如,“Draw_Line”,“Draw_Circle”或“Fill_Circle”,并為其傳遞適合的參數(shù),例如線的長度,圓的直徑或填充顏色。
捕捉例程50包括計(jì)算機(jī)可執(zhí)行指令以響應(yīng)在主機(jī)系統(tǒng)5上執(zhí)行的高級應(yīng)用程序45內(nèi)的指令,識別被事先存儲在隨機(jī)存儲器02中的一系列API函數(shù)調(diào)用47作為硬件指令。高級程序內(nèi)的這些指令一般由程序員編寫至要求圖象被渲染的應(yīng)用程序中,以激活本發(fā)明提供的更先進(jìn)的功能。
高級應(yīng)用程序45內(nèi)激活本發(fā)明的功能的指令包括“Begin_Program”46和“End_Program”48標(biāo)識對,它們包含或界定一系列API函數(shù)調(diào)用47,它們由程序員編寫,作為由助記符號標(biāo)識符(與所需的參數(shù)一起)調(diào)用在設(shè)備驅(qū)動器15中提供的API組17內(nèi)的特定渲染函數(shù)。程序員任意編寫API序列,以產(chǎn)生所希望的圖象。Beg in_Program/End_Program界定對標(biāo)識被事先存儲在存儲器20中作為硬件指令的API序列。
當(dāng)應(yīng)用程序45中的Begin_Program指令46被執(zhí)行時,發(fā)出一個函數(shù)調(diào)用至設(shè)備驅(qū)動器代碼15中的捕捉例程50。圖3示出捕捉例程的基本流程。示出的序列被應(yīng)用程序45內(nèi)的Begin_Program指令46初始化。首先,如方框55所示,捕獲例程設(shè)置一個標(biāo)志指示設(shè)備驅(qū)動器15存儲由API函數(shù)調(diào)用47生成的硬件指令至存儲器20,而不是通過將它們發(fā)送至加速器30而執(zhí)行執(zhí)行硬件指令。這樣,如方框60所示,通過傳遞程序員指定的參數(shù)至API庫中的API函數(shù),并將API存儲到存儲器20中,在Begin_Program指令46以后的API函數(shù)調(diào)用47被估值以生成相應(yīng)的硬件指令。API包括完全機(jī)器可執(zhí)行寄存器指令以寫入幀緩沖器35,進(jìn)行由程序員在調(diào)用參數(shù)中指定的渲染函數(shù)。捕獲例程50為每個API函數(shù)調(diào)用47進(jìn)行方框60中指示的操作。在捕獲例程中,設(shè)備驅(qū)動器計(jì)算和記錄開始地址和存儲器20中存儲的指令的范圍。然后,如方框65所示,當(dāng)應(yīng)用程序45發(fā)出一個End_Program指令48時,捕獲例程復(fù)位由Begin_Program指令46設(shè)置的標(biāo)志,并在主機(jī)系統(tǒng)5寄存累積存儲的硬件可執(zhí)行指令作為一個可執(zhí)行程序?,F(xiàn)在該程序可以使用唯一助記碼標(biāo)識符“id”而被激活,助記碼標(biāo)識符“id”是包含由設(shè)備驅(qū)動器計(jì)算出的數(shù)字并返回至應(yīng)用程序45的變量。該“id”變量一般由程序員在Begin_Program指令46中給出一個有意義的名字。
設(shè)備驅(qū)動器為每個應(yīng)用程序45中的Begin_Program/End_Program對進(jìn)行上述的處理。可能有多個這樣的對;但是,一旦界定API序列47被轉(zhuǎn)換成硬件指令,存儲在存儲器20中并在主機(jī)系統(tǒng)5中寄存作為可執(zhí)行程序,它可以根據(jù)需要由圖形子系統(tǒng)10執(zhí)行,而不需要一般的主機(jī)處理器,即,設(shè)備驅(qū)動器,操作。如圖3所示,應(yīng)用程序45可以在顯示器以希望的頻率渲染一個圖形,這通過簡單地在Execute_Program49中指定它的分配的助記碼,“id”來完成。Execute_Program指令49使得DLP25讀出相應(yīng)于存儲在存儲器20中的硬件指令,并發(fā)出指令至加速器30。加速器執(zhí)行寄存的指令以填充幀緩沖器35。之后,象素定義從幀緩沖器35掃描至顯示設(shè)備40以產(chǎn)生所希望的圖象。
所需的唯一一個設(shè)備驅(qū)動器操作是在幀緩沖器35中定位圖象在Locate_Scene指令中指定位置,之后初始化Execute_Program指令49中指定的存儲的硬件指令以物理上渲染圖象。已不再需要進(jìn)行API函數(shù)序列所需的設(shè)備驅(qū)動器操作,它們每次在應(yīng)用程序需要時執(zhí)行,從而為其他操作釋放了主機(jī)處理器周期和執(zhí)行操作所需的存儲器。
以下示出本發(fā)明的應(yīng)用程序的一個例子,其中程序員希望為視頻游戲生成一個汽車的圖象。該汽車圖象需要重復(fù)生成。
一般地,程序員在一個有主機(jī)處理器,存儲器,讀/寫磁盤存儲器,和例如鍵盤和鼠標(biāo)的I/O設(shè)備的計(jì)算機(jī)系統(tǒng)上工作,該計(jì)算機(jī)系統(tǒng)允許用戶與操作系統(tǒng)和應(yīng)用程序進(jìn)行交互,應(yīng)用程序包括用于編寫和編輯軟件的文本編輯器。程序員將使用文本編輯器編寫或編輯包含由本發(fā)明的設(shè)備驅(qū)動器軟件識別的指令的源代碼。為實(shí)現(xiàn)本發(fā)明,該計(jì)算機(jī)系統(tǒng)一般進(jìn)一步要求圖形子系統(tǒng)包含如圖2所示的部件。
在視頻游戲的源代碼中,程序員一般編寫程序指令定義Begin_Program/End_Program對以界定API函數(shù)序列,渲染汽車圖象部件。例如,界定API函數(shù)序列以渲染汽車輪胎部件的偽碼可以如下<pre listing-type="program-listing"><![CDATA[htire=Begin_Program();//定義一個被存儲程序以渲染//一個原始的輪胎;Draw_Circle(100); //畫輪胎的輪廓;Fill_Circle(Black);//用黑色填充圓;Draw_Circle(10); //直接在輪胎的中間畫一個小的圓;Fill_Circle(Silver); //給它一個鉻色中心;End_Program(); //保存硬件指令以渲染輪胎;]]></pre>在這個例子中,根據(jù)本發(fā)明的方法,第一個指令“htire=Begin_Program()”標(biāo)識API函數(shù)序列的開始以轉(zhuǎn)換成硬件指令并存儲在存儲器中。助記碼“htire”是由程序員隨意指定的并表示一個被產(chǎn)生的包含有設(shè)備驅(qū)動器15計(jì)算的并用于識別和跟蹤被存儲的程序的數(shù)字的變量。
下面的指令,“Draw_Circle(100)”(請注意100在此是一個函數(shù)參數(shù)而不是附圖標(biāo)號),“Fill_Circle(Black)”和“Fill_Circle(Silver)”表示調(diào)用渲染圖元的API17中的函數(shù)。在此,API函數(shù)將渲染黑色圓圈,該圓圈中心有一個較小的銀色圓圈,表示一個輪胎。
最后一行,“End_Program()”,標(biāo)識被存儲的API序列的結(jié)尾。
視頻游戲源代碼被相似地編輯以界定API序列,渲染汽車的車身,車窗,保險(xiǎn)杠等等。
一般地,為了最好地實(shí)現(xiàn)本發(fā)明的優(yōu)點(diǎn),程序員確定將所有API序列如上所述預(yù)先存儲作為硬件指令,作為應(yīng)用程序執(zhí)行的開始或初始化階段。被存儲后用于執(zhí)行硬件指令的源代碼一旦存儲完這些硬件指令將位于這個初始化階段之后。在這個汽車的例子中,被存儲的硬件指令偽碼可以是如下<pre listing-type="program-listing"><![CDATA[Locate_Scene(front); //定位前輪胎畫在何處;Execute_program(htire); //在汽車的前面渲染整個輪胎;Locate_Scene(rear); //定位后輪胎畫在何處;Execute_program(htire); //在汽車的后面渲染整個輪胎;Locate_Scene(top); 定位汽車的車身畫在何處;Execute_program(hbody); //畫車身(“hbody”是預(yù)先存 //儲的程序,與“htire”相似]]></pre>在如上編輯以識別并執(zhí)行預(yù)存儲API序列后,視頻游戲源代碼被存儲在存儲設(shè)備中以在以后執(zhí)行。
圖4示出上述示例程序的執(zhí)行(未示出車身的渲染)。該程序作為主機(jī)系統(tǒng)5中的圖形應(yīng)用程序45執(zhí)行。指令“htire=Begin_Program”46的執(zhí)行產(chǎn)生捕獲例程50的一個函數(shù)調(diào)用,并初始化圖3示出的基本過程。正在討論的特定的例子的流程在圖4中示出。
首先,捕獲例程50設(shè)置標(biāo)志以指示相應(yīng)于API函數(shù)調(diào)用47的硬件指令是被存儲于存儲器20中而不是被執(zhí)行。這樣,如方框60a所示,API調(diào)用“Draw_Circle(100)”47a使得捕獲例程執(zhí)行指令以生成和存儲相應(yīng)的硬件指令。為此,捕獲例程傳遞程序員指定的定義所希望的圓半徑參數(shù)“100”,給基本渲染函數(shù)“Draw_Circle()”18,包含寄存的I/O指令的,并存儲寄存的指令至存儲器20。
之后,如方框60b所示,響應(yīng)下一個指令,“Fill_Circle(Black)”47b,捕獲例程生成一個硬件指令,通過傳遞顏色參數(shù)“Black”至基本渲染函數(shù)“Fill_Circle()”,用黑色填充圓,并存儲寄存的指令至存儲器20。
方框60c和60d與API指令47c和47d的響應(yīng)相似。
之后,應(yīng)用程序發(fā)出End_Program指令48,并且捕獲例程如方框65所示響應(yīng)。由Begin_Program指令設(shè)置的標(biāo)志被復(fù)位,并且在上述過程中存儲于存儲器20中的累積硬件指令在主機(jī)系統(tǒng)5中寄存為可執(zhí)行程序“htire”。
應(yīng)用程序45繼續(xù)執(zhí)行。渲染輪胎圖象所需的所有硬件級指令作為可執(zhí)行程序存儲于存儲器20中。結(jié)果,這樣,每當(dāng)應(yīng)用程序希望在顯示設(shè)備40上渲染輪胎時,它簡單地按希望的頻率發(fā)出“Execute_Program(htire)”指令49,而圖形子系統(tǒng)渲染輪胎而不需要除了如Locate_Scene指令70a和70b指定定位圖形以外的其它設(shè)備驅(qū)動器操作,并且之后初始化Execute_Program指令49指定的存儲的硬件指令以物理渲染圖象。響應(yīng)Execute_Program指令49,DLP25讀取存儲在存儲器20中相應(yīng)于的“htire”的硬件指令,并發(fā)出指令至加速器30。加速器執(zhí)行寄存的指令以填充幀緩沖器35。之后,象素定義從幀緩沖器35掃描至顯示設(shè)備40上以生成輪胎圖象。
在以上的汽車渲染例子中,Locate_Scene(front)70a和Locate_Scene(rear)70b偽碼指令表示指定幀緩沖器位置操作,而使用被捕獲硬件指令渲染輪胎。一個復(fù)雜的情況是汽車由在Locate_Scene指令中指定的位置上的輪胎,車身等組裝部件組成。
通過嵌套Execute_Program指令來渲染汽車也是可能的。例如,調(diào)用“hcar”的主程序由激活"btire","hbody"d等等的Execute_Program指令組成。這些Execute_Program指令被Locate_Scene_Object指令處理,它指定相對于主場景,一個對象在主場景的哪個位置進(jìn)行渲染。之后,當(dāng)"hcar"被捕獲時,整個汽車由單一一個Execute_Program(hcar)指令渲染。
如汽車渲染例子所示,根據(jù)上述的本發(fā)明的方法和系統(tǒng),本發(fā)明提供的一個優(yōu)點(diǎn)是能夠利用被捕捉的簡單的可重定位的子場景作為硬件指令而有效地合成一個復(fù)雜的場景。幀緩沖器中的主場景位置被指定,然后使用被捕捉的硬件指令迅速地渲染復(fù)雜場景而將子場景放入主場景中。
這個特征的細(xì)節(jié)可以由捕捉Locate_Scene操作本身并重定位子場景作為硬件指令而獲得。示意性例子在以下偽碼中示出<pre listing-type="program-listing"><![CDATA[//創(chuàng)建在右下角包含對角線的可重定位子場景hprog=Begin_Program() //初始化捕捉例程以創(chuàng)建調(diào)用//"hprog"的存儲的程序Locate_Scene_Object(20,20)//生成和存儲硬件指令以定位//相對于指定的主場景坐標(biāo)的//對象在坐標(biāo)(20,20)Draw_in_Object(0,0,10,10) //生成和存儲硬件指令以渲染 //10象素的對角線End_Program(hprog) //結(jié)束捕捉例程并在主機(jī)系統(tǒng)上 //寄存"hprog"作為一個可執(zhí)行程序]]></pre>當(dāng)如圖2和3所示對應(yīng)用程序45編碼和在主機(jī)系統(tǒng)5上執(zhí)行時,上述偽碼將創(chuàng)建一個在存儲器20中存儲的包含硬件指令的程序,當(dāng)由DLP25執(zhí)行時,它將在有相對于主場景的指定坐標(biāo)的迪卡爾(x,y)坐標(biāo)(20,20)的幀緩沖器位置渲染一個10象素對角線。
以下偽碼示出使用被捕捉程序"hprog"以有效地在主場景中重定位和渲染子場景的例子<pre listing-type="program-listing"><![CDATA[Locate_Scene(primary_scene,0,0) //定位一個子場景在主場 //景內(nèi)的坐標(biāo)(0,0)處Execute_Program(hprog) //在相對于(0,0)的(20,20)處使 //用捕獲的硬件指令渲染子//場景(10象素對角線)Locate_Scene(primary_scene,55,59)//定位子場景在主場 //景內(nèi)的(59,59)處Execute_Program(hprog) //使用捕獲的硬件指令在相對于 //(59,59)的(20,20)處渲染子場景]]></pre>當(dāng)在應(yīng)用程序45中執(zhí)行時,以上的偽碼例子將使得DLP25執(zhí)行捕獲的硬件指令“hprog”,在標(biāo)識為“主場景”的主場景內(nèi)在坐標(biāo)(20,20)和坐標(biāo)(75,79)處渲染包含10象素的對角線的子場景。
以上描述的本發(fā)明的概念有較寬的應(yīng)用范圍,且可用于從不同類型的由應(yīng)用程序員指定的高級計(jì)算機(jī)程序指令序列中生成存儲的可重用的硬件級指令。存儲的硬件指令可以在子系統(tǒng)上執(zhí)行,該子系統(tǒng)有主機(jī)操作系統(tǒng)要求的最小的操作,以減低對主機(jī)處理器周期和存儲器的需求。
如上所述,本發(fā)明可以更好地在圖形子系統(tǒng)的圖象設(shè)備驅(qū)動器中作為計(jì)算機(jī)可執(zhí)行指令實(shí)現(xiàn)。為此,設(shè)備驅(qū)動器代碼可以駐留在任何計(jì)算機(jī)可用介質(zhì)的適合的位置上,例如,在計(jì)算機(jī)的存儲器中,作為主機(jī)操作系統(tǒng)的完全鏈接子程序。當(dāng)未被實(shí)際完成時,該代碼位于可攜帶計(jì)算機(jī)可用介質(zhì)上,例如,磁帶,軟盤,硬盤,CD-ROM等等。
以上描述列舉和說明了本發(fā)明。此外,以上公開只是示出和說明了本發(fā)明的最佳實(shí)施例,可以理解,本發(fā)明能夠在不同的其它組合,修改和環(huán)境中使用,并可以結(jié)合以上的描述和/或本領(lǐng)域的現(xiàn)有技術(shù),在本發(fā)明概念的范圍內(nèi)作出改變和修改。這里的實(shí)施例還用于解釋實(shí)現(xiàn)本發(fā)明的最佳方式并使本領(lǐng)域的技術(shù)人員能夠以這些或其它實(shí)施例和特定應(yīng)用程序或使用本發(fā)明所需的不同的修改而利用本發(fā)明。這樣,以上描述不是為了將本發(fā)明限制在在此公開的范圍。而且,以下的權(quán)利要求書可以包括不同的實(shí)施例。
權(quán)利要求
1.一種圖形渲染的方法,包括以下步驟捕獲在存儲器中捕獲由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)而生成的硬件指令作為可執(zhí)行程序;和執(zhí)行在需要的時候在圖形子系統(tǒng)上捕獲的硬件指令以渲染圖象。
2.如權(quán)利要求1的方法,其中所述捕獲步驟包括以下步驟響應(yīng)通過生成相應(yīng)于所述渲染函數(shù)的硬件指令,響應(yīng)界定基本渲染函數(shù)序列的圖形應(yīng)用程序內(nèi)的指令;存儲在所述存儲器中存儲所述硬件指令;和定義定義所述存儲的硬件指令作為主機(jī)操作系統(tǒng)可執(zhí)行程序。
3.如權(quán)利要求1的方法,其中所述硬件指令通過傳遞用戶定義的參數(shù)至包含在這種函數(shù)的集合中的基本渲染函數(shù)而生成。
4.如權(quán)利要求1的方法,其中所述執(zhí)行步驟包括以下步驟利用圖形處理器從存儲器中發(fā)出捕獲的硬件指令;和利用圖形加速器接收所述捕獲的指令并寫入從捕獲的指令導(dǎo)出的象素信息至幀緩沖器,以渲染圖象。
5.一種進(jìn)行圖形渲染的計(jì)算機(jī)系統(tǒng),包括一個主機(jī)操作系統(tǒng);和一個圖形子系統(tǒng),包括進(jìn)行渲染操作的硬件;其中所述主機(jī)操作系統(tǒng)包括軟件,該軟件包括計(jì)算機(jī)可執(zhí)行指令,它響應(yīng)圖形應(yīng)用程序發(fā)出的指令,捕捉由基本渲染函數(shù)生成的圖形子系統(tǒng)的硬件指令在存儲器中作為一個可執(zhí)行程序,基本渲染函數(shù)是由圖形應(yīng)用程序調(diào)用的。
6.如權(quán)利要求5的計(jì)算機(jī)系統(tǒng),其中所述軟件捕獲所述硬件指令是通過通過生成相應(yīng)于所述渲染函數(shù)的硬件指令,響應(yīng)界定基本渲染函數(shù)序列的所述圖形應(yīng)用程序中的指令;存儲所述硬件指令至存儲器;和定義所述存儲的硬件指令作為一個主機(jī)操作系統(tǒng)的可執(zhí)行程序。
7.如權(quán)利要求5的計(jì)算機(jī)系統(tǒng),其中所述硬件指令是通過傳遞用戶定義的參數(shù)至從這種函數(shù)的集合中獲得的基本渲染函數(shù)。
8.如權(quán)利要求5的計(jì)算機(jī)系統(tǒng),其中進(jìn)行圖形渲染的所述硬件包括一個圖形處理器,從存儲器發(fā)出捕獲的硬件指令;和一個圖形加速器,接收所述捕獲的指令并寫入從所述捕獲的指令導(dǎo)出的象素信息至幀緩沖器,以渲染圖象。
9.一種實(shí)現(xiàn)計(jì)算機(jī)可執(zhí)行程序代碼以實(shí)現(xiàn)進(jìn)行圖形渲染的方法的計(jì)算機(jī)可用媒介,所述代碼包括響應(yīng)圖形應(yīng)用程序中的指令,以捕捉由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)生成的硬件指令在存儲器中作為一個可執(zhí)行程序。
10.如權(quán)利要求9的計(jì)算機(jī)可用媒介,其中所述代碼包括指令用于通過生成相應(yīng)于所述渲染函數(shù)的硬件指令,響應(yīng)界定基本渲染函數(shù)序列的所述圖形應(yīng)用程序中的指令;存儲所述硬件指令至存儲器;和定義所述存儲的硬件指令作為一個主機(jī)操作系統(tǒng)的可執(zhí)行程序。
11.如權(quán)利要求9的計(jì)算機(jī)可用媒介,其中所述硬件指令是通過傳遞用戶定義的參數(shù)至包含在這種函數(shù)的集合中的基本渲染函數(shù)。
12.如權(quán)利要求9的計(jì)算機(jī)可用媒介,其中所述代碼包括指令用于控制一個圖形處理器,從存儲器發(fā)出捕獲的硬件指令至一個圖形加速器。
13.一種執(zhí)行高級計(jì)算機(jī)程序指令序列的方法,使用可重用硬件級指令,這些指令在需要時在主機(jī)操作系統(tǒng)的子系統(tǒng)上執(zhí)行,包括以下步驟捕獲在存儲器中捕獲由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)而生成的硬件指令作為可執(zhí)行程序;和執(zhí)行在需要的時候在圖形子系統(tǒng)上執(zhí)行捕獲的硬件指令。
14.如權(quán)利要求13的方法,其中捕獲步驟包括以下步驟響應(yīng)通過生成相應(yīng)于所述渲染函數(shù)的硬件指令,響應(yīng)界定基本渲染函數(shù)序列的圖形應(yīng)用程序內(nèi)的指令;存儲在所述存儲器中存儲所述硬件指令;和定義定義所述存儲的硬件指令作為主機(jī)操作系統(tǒng)可執(zhí)行程序。
15.如權(quán)利要求13的方法,其中所述硬件指令通過傳遞用戶定義的參數(shù)至從這種函數(shù)的集合中獲得的硬件級函數(shù)而生成。
16.一種執(zhí)行圖形渲染的方法,包括以下步驟在圖形應(yīng)用程序中定義一個基本渲染函數(shù)序列,作為存儲器中被捕獲的硬件指令序列;執(zhí)行包含定義的序列的圖形應(yīng)用程序,以產(chǎn)生被捕獲硬件指令;和執(zhí)行捕獲的硬件指令以渲染圖象。
17.如權(quán)利要求16的方法,其中所示定義步驟包括界定標(biāo)識符之間的基本渲染函數(shù)序列以激活捕捉過程。
18.如權(quán)利要求17的方法,其中所述圖形應(yīng)用程序的執(zhí)行步驟是在有一個圖形子系統(tǒng)的主機(jī)操作系統(tǒng)上進(jìn)行的,并包括含有指令的軟件用于通過生成相應(yīng)于所述渲染函數(shù)的圖形硬件的硬件指令,響應(yīng)界定基本渲染函數(shù)序列的所述圖形應(yīng)用程序中的所述標(biāo)識符;存儲所述硬件指令至存儲器;和定義所述存儲的硬件指令作為一個主機(jī)操作系統(tǒng)的可執(zhí)行程序。
19.一種進(jìn)行圖形渲染的方法包括以下步驟在存儲器中捕獲由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)序列生成的硬件指令作為一個可執(zhí)行程序,所述序列定義一個子場景;為被渲染的所述子場景指定在主場景中的位置;和執(zhí)行所述捕獲的指令在被指定的位置渲染所述子場景。
20.一種計(jì)算機(jī)可用媒介,實(shí)現(xiàn)進(jìn)行圖形渲染方法的計(jì)算機(jī)可執(zhí)行程序,包括以下步驟在存儲器中捕獲由圖形應(yīng)用程序調(diào)用的基本渲染函數(shù)序列生成的硬件指令作為一個可執(zhí)行程序,所述序列定義一個子場景;為被渲染的所述子場景指定在主場景中的位置;和執(zhí)行所述捕獲的指令在被指定的位置渲染所述子場景。
全文摘要
一種計(jì)算機(jī)實(shí)現(xiàn)的方法和系統(tǒng),用于根據(jù)需要在圖形子系統(tǒng)上執(zhí)行圖形渲染。當(dāng)應(yīng)用程序在主機(jī)操作系統(tǒng)上執(zhí)行時,開始程序標(biāo)識符激活主機(jī)操作系統(tǒng)中圖形設(shè)備驅(qū)動器中的一個函數(shù)。該函數(shù)捕捉存儲器中應(yīng)用程序內(nèi)的渲染函數(shù)的調(diào)用作為圖形子系統(tǒng)的硬件指令。當(dāng)函數(shù)遇到結(jié)束程序標(biāo)識符,它在主機(jī)系統(tǒng)上登記被捕獲硬件指令作為一個執(zhí)行程序。應(yīng)用程序可以根據(jù)需要通過已登記的可執(zhí)行程序渲染圖象。
文檔編號G06T15/00GK1270366SQ0010492
公開日2000年10月18日 申請日期2000年3月30日 優(yōu)先權(quán)日1999年3月31日
發(fā)明者R·J·德維斯, P·M·尚利 申請人:國際商業(yè)機(jī)器公司