專利名稱::用于遠程可視合成的協(xié)議的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及電子數(shù)據(jù)處理,尤其涉及管理計算機系統(tǒng)中的圖形和控制信息流。
背景技術(shù):
:基于數(shù)字多媒體、在數(shù)字設(shè)備上觀看的數(shù)字格式的視頻和音頻合成、以及諸如圖像和動畫的數(shù)字媒體在性能和產(chǎn)量上正在快速增長。當(dāng)今制造的幾乎每一臺個人計算機都包括某些形式的多媒體。諸如照相機、錄影機、電話、電視等數(shù)字產(chǎn)品的銷售在穩(wěn)定增長。當(dāng)因特網(wǎng)的成長在穩(wěn)定快速地繼續(xù)時,多媒體在因特網(wǎng)領(lǐng)域內(nèi)也變得越來越流行。這些基于計算機技術(shù)的持續(xù)發(fā)展已不僅導(dǎo)致性能的增強,而且還導(dǎo)致這種計算機設(shè)備的用戶對性能有了更高的期望。本行業(yè)已經(jīng)以CDROM盤、通信調(diào)制解調(diào)器、以及更快的視頻和音頻卡來響應(yīng)增長速度。增加的用戶期望則不僅擴展到硬件能力,還擴展到數(shù)據(jù)的處理能力。例如,在諸如多媒體和音頻壓縮的領(lǐng)域中,對數(shù)據(jù)進行處理從而使它被處理成穩(wěn)定和持續(xù)的流。該數(shù)據(jù)可在諸如電視會議、游戲、數(shù)字視頻盤(DVD)、專業(yè)音頻、電話的領(lǐng)域中使用,也可在對音頻、視頻、或音頻和視頻進行數(shù)字處理的其它領(lǐng)域中使用。呈現(xiàn)(rendering)數(shù)據(jù)幾乎總是需要系統(tǒng)中各個模塊之間的某些處理形式。例如,一視頻片斷可能需要在專用硬件模塊中解碼、在另一硬件模塊中位圖化視頻字段、在軟件模塊中數(shù)字濾波音頻、由另一軟件模塊插入副標頭、由軟件模塊解析音頻數(shù)據(jù)以跳過無聲時段等等。要使流傳送工作,必須將數(shù)據(jù)處理成穩(wěn)定流然后呈現(xiàn)為音頻和/或視頻。然而,如果數(shù)據(jù)未進行足夠快的處理,數(shù)據(jù)的表示就不流暢了。在常規(guī)的客戶機-服務(wù)器呈現(xiàn)中,數(shù)據(jù)在服務(wù)器上得到處理,并以離散虛擬的幀的形式向在其上呈現(xiàn)幀的客戶機發(fā)送。即使呈現(xiàn)條目中沒有改變,每個幀仍然都包含呈現(xiàn)該幀所需的全部數(shù)據(jù)和信息。例如,即使幀與相鄰幀完全相同,每個動畫幀仍然具有要呈現(xiàn)該幀的全部數(shù)據(jù)和信息。結(jié)果,數(shù)據(jù)的傳送消耗了大量的可用帶寬。該帶寬消耗減少了服務(wù)器可支持的客戶機數(shù)量。另外,不能利用客戶機上的硬件來處理數(shù)據(jù)。例如,處理數(shù)據(jù)的服務(wù)器不具有使用客戶機硬件的硬件特征的能力,諸如3D通信加速器。
發(fā)明內(nèi)容本發(fā)明提供了創(chuàng)建和控制遠程裝置上合成的方法和協(xié)議。該協(xié)議使服務(wù)器和其它裝置能夠利用遠程裝置的處理能力,來合成遠程顯示裝置上的視覺內(nèi)容。這使服務(wù)器能處理多個客戶機,因為服務(wù)器無需處理用以真正呈現(xiàn)合成的功能(例如繪、畫、動畫等等)。這導(dǎo)致能夠發(fā)揮更多客戶機側(cè)硬件的能力,諸如客戶機的3D硬件加速管道以及客戶機CPU。例如,客戶機能處理動畫功能,它使服務(wù)器能夠向客戶機發(fā)送描述動畫功能的信息,而不是發(fā)送組成整個動畫效果的單個靜態(tài)幀。協(xié)議提供基本的髙層命令包,使應(yīng)用程序能夠在媒體上傳送在客戶機裝置上創(chuàng)建合成的命令。這些包的有效載荷可包含用于使裝置上的組件創(chuàng)建合成的真正命令。請求應(yīng)用程序發(fā)送創(chuàng)建合成服務(wù)、創(chuàng)建呈現(xiàn)目標和呈現(xiàn)環(huán)境、創(chuàng)建合成節(jié)點、創(chuàng)建合成節(jié)點的資源、以及呈現(xiàn)合成的命令包。來自請求應(yīng)用程序的包是資源命令包和控制包。資源命令包被路由到客戶機使的相關(guān)資源。使用控制包來控制合成狀態(tài)并維護客戶機上的文本字形高速緩存。通知包被發(fā)送回請求應(yīng)用程序。參照附圖閱讀說明性實施例的以下詳述,本發(fā)明的附加特征和優(yōu)點將顯然。盡管所附權(quán)利要求書以特性陳述了本發(fā)明的特征,參照附圖閱讀以下詳細說明書,本發(fā)明及其對象和優(yōu)點可得到最佳的理解圖1是一般示出本發(fā)明駐留其中的示例性計算機系統(tǒng)的框圖2a是示出兩個代碼分段之間編程接口的簡化框圖2b是示出兩個代碼分段之間編程接口可選實施例的簡化框圖3a是示出兩個代碼分段之間編程接口的簡化框圖,其中該代碼分段具有分成多個離散通信的通信,示出了分解(factoring)的概念;圖3b是示出兩個代碼分段之間編程接口可選實施例的簡化框圖,其中該代碼分段具有分成多個離散通信的通信,示出了分解的概念;圖4a是示出兩個代碼分段之間編程接口的簡化框圖,其中該代碼分段具有略去、添加、或重新定義的某些方面,示出了重新定義的概念;圖4b是示出兩個代碼分段之間編程接口可選實施例的簡化框圖,其中該代碼分段具有略去、添加、或重新定義的某些方面,示出了重新定義的概念;圖5a是示出兩個代碼分段之間編程接口的簡化框圖,其中該代碼分段具有使兩個代碼模塊的某些功能合并,從而它們之間的接口改變形式,示出了串聯(lián)編碼的概念;圖5b是示出兩個代碼分段之間編程接口可選實施例的簡化框圖,其中該代碼分段使兩個代碼模塊的某些功能合并,從而它們之間的接口改變形式,示出了內(nèi)編碼的概念;圖6a是示出兩個代碼分段之間編程接口的簡化框圖,其中通信通過間接地將該通信分成多個離散通信來完成,示出了分離的概念;圖6b是示出兩個代碼分段之間編程接口可選實施例的簡化框圖,其中通信通過間接地將該通信分成多個離散通信來完成,示出了分離的概念;圖7a是示出動態(tài)地重寫代碼以用其它東西替換編程接口而獲取相同結(jié)果的簡化框圖,其中示出了重寫的概念;圖7b是示出動態(tài)地重寫代碼以用其它東西替換編程接口而獲取相同結(jié)果的可選實施例的簡化框圖,其中示出了重寫的概念;圖8是一般示出本發(fā)明在其中操作的示例性環(huán)境的框圖9是一般示出本發(fā)明在其中操作的可選示例性環(huán)境的框圖io是示出根據(jù)本發(fā)明教導(dǎo)創(chuàng)建一合成的步驟的流程圖。具體實施例方式本發(fā)明提供服務(wù)器將合成處理的各方面卸載到客戶機的能力。這導(dǎo)致服務(wù)器側(cè)可升級性的增加。通信協(xié)議的高層描述性質(zhì)導(dǎo)致比用直接模式模型發(fā)送數(shù)據(jù)的情形少得多的數(shù)據(jù)和信息被發(fā)送到客戶機中用于呈現(xiàn)數(shù)據(jù)。在描述本發(fā)明細節(jié)之前,將描述本發(fā)明可在其中實現(xiàn)的示例性裝置和本發(fā)明可在其中操作的環(huán)境的縱覽。參照附圖,其中相似標記號指向相似元件,本發(fā)明被示為在適當(dāng)計算環(huán)境中實現(xiàn)。盡管不是必需的,本發(fā)明將在由諸如客戶機工作站或服務(wù)器的計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的一般環(huán)境中進行說明。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)具體抽象數(shù)據(jù)結(jié)構(gòu)的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。此外,本領(lǐng)域技術(shù)人員將理解本發(fā)明可在其它計算機系統(tǒng)配置中實踐,包括手持式裝置、多處理器系統(tǒng)、基于微處理器的或可編程的消費品電器、網(wǎng)絡(luò)PC、迷你計算機、大型計算機等等。本發(fā)明還可在任務(wù)由經(jīng)通信網(wǎng)絡(luò)鏈接遠程處理裝置執(zhí)行的分布式計算環(huán)境中實踐。在分布式計算環(huán)境中,程序模塊可被置于本地和遠程存儲器存儲設(shè)備中。圖1示出了本發(fā)明可在其上實現(xiàn)的適當(dāng)?shù)挠嬎阆到y(tǒng)環(huán)境100的示例。該計算系統(tǒng)環(huán)境100僅是適當(dāng)計算環(huán)境的一個示例,并非旨在提出對本發(fā)明使用或功能性范圍作任何限制。計算環(huán)境100也不應(yīng)被解釋為對示例性操作環(huán)境100中所示的任一組件或其組合有任何依賴性或任何需求。本發(fā)明也可在很多其它通用或?qū)S糜嬎阆到y(tǒng)環(huán)境或配置中操作。適于本發(fā)明使用的眾所周知的計算系統(tǒng)、環(huán)境、和/或配置的示例包括,但不限于,個人計算機、服務(wù)器計算機、手持式或膝上型裝置、書寫板裝置、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程消費品電器、網(wǎng)絡(luò)PC、迷你計算機、大型機、包括任一種以上系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。本發(fā)明可以計算機可執(zhí)行指令的一般環(huán)境進行說明,諸如由計算機執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行具體任務(wù)或?qū)崿F(xiàn)具體抽象數(shù)據(jù)結(jié)構(gòu)的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。本發(fā)明還可在任務(wù)由經(jīng)通信網(wǎng)絡(luò)連接的遠程處理裝置執(zhí)行的分布式計算環(huán)境中實踐。在分布式計算環(huán)境中,程序模塊可置于包括存儲器存儲設(shè)備的本地和遠程計算機存儲介質(zhì)中。參照圖1,實現(xiàn)本發(fā)明的示例性系統(tǒng)包括以計算機iio形式的通用計算裝置。計算機110的組件可包括,但不限于,處理單元120、系統(tǒng)存儲器130以及把包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可能是若干總線結(jié)構(gòu)類型中的任何一種,包括存儲器總線或存儲器控制器、外圍總線、以及使用多種總線架構(gòu)的任一種的本地總線。作為示例,而非限制,這些架構(gòu)包括工業(yè)標準架構(gòu)(ISA)總線、微信道架構(gòu)(MCA)總線、增強型ISA(EISA)總線、視頻電子標準協(xié)會(VESA)局部總線和也稱為Mezzanine總線的外圍部件互連(PCI)總線。計算機110通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是能被計算機110訪問的任何可用介質(zhì),并包括易失性和非易失性介質(zhì)、可移動和不可移動介質(zhì)。作為示例,而非限制,計算機可讀介質(zhì)可包括計算機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以任何方法或技術(shù)實現(xiàn)、用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的易失性和非易失性介質(zhì)、可移動和不可移動介質(zhì)。計算機存儲介質(zhì)包括但不限于RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字化多功能光盤(DVD)或其它光學(xué)存儲技術(shù)、磁盒、磁帶、磁盤存儲器或其它磁性存儲設(shè)備、或任何其它可用于存儲所需信息并可由計算機110訪問的介質(zhì)。通信介質(zhì)通常在諸如載波或其它傳輸機制的已調(diào)制數(shù)據(jù)信號中體現(xiàn)計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它數(shù)據(jù),且包括任何信息輸送介質(zhì)。術(shù)語"已調(diào)制數(shù)據(jù)信號"意指在信號中用對信息編碼方式設(shè)置或改變其一個或多個特征的信號。作為示例,而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直線連接的有線介質(zhì),和諸如聲學(xué)、射頻、紅外線和其它無線介質(zhì)的無線介質(zhì)。以上任何介質(zhì)的合成也應(yīng)包括在計算機可讀介質(zhì)的范圍中。系統(tǒng)存儲器130包括諸如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132的易失性和/或非易失性存儲器形式的計算機可讀介質(zhì)。包含有助于計算機110如起動時在元件間傳送信息的基本例程的基本輸入/輸出系統(tǒng)(BIOS)133通常存儲在ROM131中。RAM132通常包含可被處理單元120立即訪問和/或當(dāng)時正被操作的數(shù)據(jù)和/或程序模塊。作為示例,而非限制,圖l示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137。計算機110還可包括其它可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)。作為示例,圖1圖示了讀取和寫入不可移動、非易失性磁性介質(zhì)的硬盤驅(qū)動器141,讀取和寫入可移動、非易失性磁盤152的磁盤驅(qū)動器151,讀取和寫入可移動、非易失性光盤156,諸如CD-ROM或其它光學(xué)介質(zhì)的光盤驅(qū)動器155。其它也用在示例性計算環(huán)境中的可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)包括,但不限于,如磁帶、閃存卡、數(shù)字化視頻光盤、數(shù)字化錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器141通常通過諸如接口140的不可移動存儲器接口與系統(tǒng)總線121連接,而磁盤驅(qū)動器151和光盤驅(qū)動器155通常通過諸如接口150的可移動存儲器接口與系統(tǒng)總線121連接。如上所述并如圖1所示的驅(qū)動器及其相關(guān)聯(lián)的計算機存儲介質(zhì)為計算機110提供計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、和其它數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146、和程序數(shù)據(jù)147。注意這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136、和程序數(shù)據(jù)137相同或不同。在此給予操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146、和程序數(shù)據(jù)147的數(shù)字不同至少說明他們是不同的副本。用戶可通過輸入裝置如鍵盤162、通常是指鼠標、跟蹤球或觸摸板等的定位裝置161、話筒163、以及書寫板或電子數(shù)字化儀164向計算機110輸入命令和信息。其它輸入裝置(未示出)可包括游戲桿、游戲墊、衛(wèi)星接收器、掃描儀等等。這些和其它輸入設(shè)備常常通過與系統(tǒng)總線耦合的用戶輸入接口160與處理單元120相連,但也可通過諸如并行端口、游戲端口或通用串行總線(USB)的其它接口連接。監(jiān)視器191或其它類型的顯示設(shè)備也可通過諸如視頻接口190的接口與系統(tǒng)總線121相連。監(jiān)視器191還可與觸摸屏面板等等集成。注意監(jiān)視器和/或觸摸屏面板可物理地與裝有計算裝置110的外殼相耦合,諸如書寫板類型的個人計算機。另外,諸如計算裝置110的計算機還可包括諸如揚聲器197和打印機196的其它輸出設(shè)備,它們通過輸出外圍接口194等等相連。計算機110可以在使用與一臺或多臺遠程計算機,諸如遠程計算機180的邏輯連接的網(wǎng)絡(luò)化環(huán)境中運行。遠程計算機180可以是個人計算機、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等裝置或其它公共網(wǎng)絡(luò)節(jié)點,而且通常包括上述與個人計算機110相關(guān)的許多或全部組件,盡管在圖1中僅圖示了存儲器存儲設(shè)備181。圖1中所描繪的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可包括其它網(wǎng)絡(luò)。這樣的網(wǎng)絡(luò)化環(huán)境在辦公室、企業(yè)范圍計算機網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)上是常見的。例如,計算機系統(tǒng)110可包括數(shù)據(jù)源自的源機器,而遠程計算機180則可包括目標機器。當(dāng)用于LAN網(wǎng)絡(luò)化環(huán)境中時,計算機IIO通過網(wǎng)絡(luò)接口或適配器170與局域網(wǎng)171連接。當(dāng)用于WAN網(wǎng)絡(luò)化環(huán)境中時,計算機IIO通常包括調(diào)制解調(diào)器172或其它用于在廣域網(wǎng)173,諸如因特網(wǎng)中建立通信的裝置??梢允莾?nèi)置式或外置式的調(diào)制解調(diào)器172與系統(tǒng)總線121通過用戶輸入接口160或其它適當(dāng)機制連接。在網(wǎng)絡(luò)化環(huán)境中,與計算機110相關(guān)的程序模塊或其一部分可存儲在遠程存儲器存儲裝置中。作為示例,而非限制,圖1示出了駐留于遠程計算機180中的遠程應(yīng)用程序185。應(yīng)當(dāng)理解,所示網(wǎng)絡(luò)連接是示例性的,且其它用于在計算機間建立通信連接的技術(shù)也可以使用。應(yīng)注意,編程接口(或更簡稱為接口)可被視為使一個或多個代碼分段能與一個或多個其它代碼分段通信,或能訪問其所提供的功能性的任意機制、進程、和協(xié)議。或者,編程接口可被視為一系統(tǒng)組件的能夠與其它組件的一個或多個機制、方法、函數(shù)調(diào)用、模塊等通信耦合的一個或多個機制、方法、函數(shù)調(diào)用、模塊、對象等。前面句子中的術(shù)語"代碼分段"旨在包括一個或多個指令或代碼行,并包括例如代碼模塊、對象、子程序、函數(shù)等等,無論所應(yīng)用的是何種術(shù)語,或者是否單獨編譯代碼分段,或者代碼分段是否被提供為源、中間體、或?qū)ο蟠a,或者是否在運行時系統(tǒng)或進程中利用代碼分段,或者它們是否位于同一機器或不同機器或分布在多個機器上,或者代碼分段所表示的功能是否整個地在軟件中、硬件中、還是硬件和軟件的合成中實現(xiàn)。在概念上,編程接口一般可如圖2a或2b所示。圖2a示出接口1為第一代碼分段和第二代碼分段通信的通道。圖2b示出包括接口對象II和12的一接口,使得系統(tǒng)的第一和第二代碼分段能通過媒體M通信。在圖2b的視圖中,可將接口對象II和12視為同一系統(tǒng)的獨立接口,也可視為對象II和12加上媒體M組成了接口。盡管圖2a和2b示出了雙向流和流每一側(cè)上的接口,某些實現(xiàn)可僅具有單向的信息流(或如以下所述的無信息流),或者可僅在一側(cè)具有接口對象。作為示例,而非限制,諸如應(yīng)用程序編程接口(API)、進入點、方法、函數(shù)、子程序、遠程過程調(diào)用、以及組件對象模型(COM)接口的術(shù)語,都被包括在編程接口的定義中。這種編程接口的各個方面可包括第一代碼分段向第二代碼分段傳送信息(其中在最廣泛意義上使用"信息",并包括數(shù)據(jù)、命令、請求等)的方法;第二代碼分段接收信息的方法;以及信息的結(jié)構(gòu)、序列、語法、組織、模式、信息的定時、和內(nèi)容。這樣,不管媒體是有線、無線、或兩者合成,只要信息以接口定義的方式傳輸,基層的傳輸媒體本身對接口的操作就不重要了。在某些情況中,信息不在常規(guī)意義上的一個方向或兩個方向上傳遞,因為當(dāng)一代碼分段僅訪問由第二代碼分段執(zhí)行的功能時,信息傳遞可通過另一機制(例如信息置于與代碼分段之間與信息流分開的緩存器、文件等)進行或者不存在。任意或所有這些方面在給定情況中可能是重要的,例如,取決于代碼分段是否是松散耦合或緊密耦合配置中系統(tǒng)的一部分,因此該列表應(yīng)被視為是說明性且非限制的。該編程接口的概念對本領(lǐng)域技術(shù)人員是眾所周知的,且在本發(fā)明以上詳細描述中顯然。然而,可有實現(xiàn)編程接口的其它方法,并且除非被確切排除,它們也將被包括在本說明書結(jié)束處陳述的權(quán)利要求書中。這些其它方法會顯得比圖2a和2b的簡化視圖更深奧或更復(fù)雜,但即便如此它們?nèi)詧?zhí)行完成相同總體結(jié)果的相似功能。我們將簡要描述編程接口的部分說明性任選實施例。A.分解通過將通信分成多個離散通信可間接地完成從一個代碼分段到另一代碼分段的通信。這在圖3a和3b中進行示意描述。如圖所示,可根據(jù)可劃分功能組來描述某些接口。因而,可分解圖2a和2b的接口功能以獲取同樣的結(jié)果,正如數(shù)學(xué)上可提供24,或者為2x2x3x2。相應(yīng)地,如圖3a所示,可劃分由接口1提供的功能以將該接口的通信轉(zhuǎn)換成多個接口接口1A、接口1B、接口1C等而獲取同樣的結(jié)果。如圖3b所示,可再次將接口I1提供的功能劃分成多個接口Ila、Ilb、Ilc等而獲取同樣的結(jié)果。類似地,從第一代碼分段接收信息的第二代碼分段的接口12也可被分解成多個接口I2a、12b、12c等。在分解時,包括在第一代碼分段中的接口數(shù)量不需要匹配包括在第二代碼分段中的接口數(shù)量。在圖3a和3b的任一情形中,接口1和II的功能實質(zhì)分別與圖2a和2b的一樣。接口的分解也可遵從結(jié)合、交換、以及其它數(shù)學(xué)屬性使得分解難以識別。例如,操作的順序在某些應(yīng)用中并不重要,且因而由接口實現(xiàn)的功能可在到達接口之前由另一代碼或接口很好地實現(xiàn),或者由系統(tǒng)的獨立組件執(zhí)行。此外,編程領(lǐng)域技術(shù)人員可理解,有各種各樣獲取同樣結(jié)果而作不同函數(shù)調(diào)用的方法。B.重新定義在某些情形中,略去、添加、或重新定義編程接口的某些方面(例如參數(shù))而仍完成所要結(jié)果是可能的。這如圖4a和4b所示。例如,假設(shè)圖2a的接口l包括一函數(shù)調(diào)用Square(input,precision,output),它包括三個參數(shù)input(輸入),precision(精度)和output(輸出),并從第一代碼分段發(fā)往第二代碼分段。如果中間參數(shù)precision在給定情形中無關(guān)緊要,如圖4a所示,則可略去它甚至用meaningless(無意義)參數(shù)替換它(在此情形中)。也可添加不重要的additional(附加)參數(shù)。在任一情形中,只要在輸入由第二代碼分段進行square(平方)之后返回輸出,就可獲得square的功能。對計算機系統(tǒng)某些下游部分或其它部分precision可以是非常好的有意義的參數(shù);然而,一旦認為precision對于計算square的有限目的而言是不必要的,則替換或略去它。例如,替代傳送有效的precision值,可傳送諸如生日的無意義值而不會不利地影響結(jié)果。類似地,如圖4b所示,由接口Il'替換接口Il,它進行了對接口略去或添加參數(shù)的重新定義。接口I2可類似地被替換為接口12',它進行了略去不必要參數(shù)或在其它地方進行處理的參數(shù)的重新定義。此處的要點是,在某些情形中,編程接口可包括某些目的所不需要的一些方面,諸如參數(shù),因此可略去或重新定義它們,或者在其它地方進行處理用于其它目的。C.串聯(lián)編碼合并兩個獨立代碼模塊的部分或所有功能從而使它們之間的"接口"改變形式也是可行的。例如,可將圖2a和2b的功能分別轉(zhuǎn)換成圖5a和5b的功能。在圖5a中,先前圖2a的第一代碼分段和第二代碼分段被合并成一包含它們的模塊。在此情形中,代碼分段仍然可互相通信,但接口則被調(diào)整為更適于單個模塊的形式。因而,例如,正式的調(diào)用和返回語句不再必要,但是依照接口1的類似處理或響應(yīng)仍然有效。類似地,如圖5b所示,圖2b的接口I2的一部分可被寫入I1內(nèi)以形成接口I1'。如圖所示,接口12被劃分成I2a和I2b,而接口部分I2a被編碼在接口II內(nèi)以形成接口Il'。作為具體示例,考慮圖2b的接口II執(zhí)行函數(shù)調(diào)用square(i叩ut,output),它在由第二代碼分段處理用input傳送的值(以平方之)之后由接口I2接收,并用output傳送回平方后的值。在此情形中,由第二代碼分段(平方input)執(zhí)行的處理無需調(diào)用接口就可由第一代碼分段執(zhí)行。D.分離通過將通信分成多個離散通信可間接地完成從一個代碼分段到另一代碼分段的通信。這在圖6a和6b中進行示意描述。如圖6a所示,提供一個或多個中間件(分離接口,因為它們從原始接口中分離功能和/或接口功能)以轉(zhuǎn)換第一接口接口1上的通信以使它們遵從一不同接口(在此情形中為接口2A、接口2B和接口2C)??蛇@樣完成例如,有己安裝的應(yīng)用程序基礎(chǔ)根據(jù)接口l協(xié)議被設(shè)計為與操作系統(tǒng)通信,但是隨后操作系統(tǒng)被更改成使用一不同接口(在此情形中為接口2A、接口2B和接口2C)。要點是,由第二代碼分段使用的原始接口被更改,從而它不再與第一代碼分段使用的接口兼容,且因而使用一中間體使得新舊接口兼容。類似地,如圖6b所示,可將分離接口DI1引入第三代碼分段以接收來自接口II的通信,并引入分離接口DI2以將接口功能傳送給例如經(jīng)重新設(shè)計與DI2—起工作的接口12a和I2b,而仍提供同樣的功能結(jié)果。類似地,DIl和DI2可一起工作以將圖2b接口II和12的功能翻譯成一新操作系統(tǒng),而仍提供同樣的或相似的功能結(jié)果。E.重寫另一可能變體是動態(tài)地重寫代碼以用其它東西替換接口功能而仍提供同樣的總體結(jié)果。例如,可有一系統(tǒng),其中以中間語言(例如微軟IL、JavaByteCode等)呈現(xiàn)的代碼分段被提供給執(zhí)行環(huán)境中的運行時(JIT)編譯器或解釋器(諸如由.Net框架、Java運行時環(huán)境、或其它類似運行時類型環(huán)境所提供的)??删帉慗IT編譯器以動態(tài)轉(zhuǎn)換從第一代碼分段到第二代碼分段的通信,即讓它們遵從第二代碼分段(原始或不同的第二代碼分段)所需的一不同接口。這在圖7a和7b中描述。如圖7a所示,該方法類似于上述分離情形??蛇@樣完成例如,其中已安裝的應(yīng)用程序基礎(chǔ)根據(jù)接口1協(xié)議被設(shè)計為與操作系統(tǒng)通信,但是隨后操作系統(tǒng)被更改成使用一不同接口??墒褂肑IT編譯器以遵從已安裝了基礎(chǔ)的應(yīng)用程序到操作系統(tǒng)新接口在運行中的通信。如圖7b所示,動態(tài)地重寫接口的方法可被應(yīng)用于動態(tài)分解,或用其它方法改變接口。還要注意,用于通過任選實施例獲取與接口相同或相似結(jié)果的上述情形也可以各種方法合成,串行地和/或并行地,或者用其它介入代碼。因而,以上呈現(xiàn)的任選實施例并非互相排斥,而是可以加以混合、匹配和合成以產(chǎn)生與圖2a和2b所示一般情形相同或等效的情形。還要注意,由于使用大多數(shù)編程結(jié)構(gòu),有許多未在此描述的可獲取接口相同或相似功能的其它類似方法,但雖然如此仍可由本發(fā)明的精神和范圍來表示,即,要注意,在接口值之下的接口至少代表部分功能,并使能有利結(jié)果。在以下描述中,本發(fā)明將參照一個或多個計算機所執(zhí)行的操作的和動作符號表示來描述,除非另有指明。這樣,可以理解,這種經(jīng)常被稱為是計算機可執(zhí)行的動作和操作,包括由以結(jié)構(gòu)化形式表示數(shù)據(jù)的電子信號計算機的處理單元進行的操縱。這種操縱轉(zhuǎn)換數(shù)據(jù)或?qū)⑵浔3衷谟嬎銠C存儲器系統(tǒng)的單元中,這可用本領(lǐng)域技術(shù)人員眾所周知的方式來重新配置或以其它方式改變計算機的操作。保持數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是具有由數(shù)據(jù)格式定義的特定屬性的存儲器物理單元。然而,盡管本發(fā)明在前述環(huán)境中進行描述,但這并非旨在作出限制,因為本領(lǐng)域技術(shù)人員將理解此后所述的各種動作和操作也可在硬件中實現(xiàn)。現(xiàn)在參照圖8,示出了本發(fā)明在其中操作的示例性環(huán)境200。應(yīng)用程序202、204駐留在服務(wù)器206上。窗口管理器208使人操作、組織窗口,并執(zhí)行諸如移動窗口、調(diào)整窗口尺寸、去除窗口、用標題欄或其它使以上操作簡易化的條目裝飾窗口等的操作。應(yīng)用程序202、204創(chuàng)建了可視樹以指示應(yīng)用程序如何顯示一條目(例如文本文檔、圖形、動畫等)??梢晿浔硎居蓤D形系統(tǒng)呈現(xiàn)給媒體(例如顯示器、打印機、平面等)的一數(shù)據(jù)結(jié)構(gòu)。當(dāng)呈現(xiàn)可視樹時,可視樹中的數(shù)據(jù)是在使用應(yīng)用程序時用戶在顯示屏的應(yīng)用程序區(qū)域看到的"情景"。應(yīng)用程序202、204保留對它們相應(yīng)視覺樹的控制,以控制在顯示裝置(例如監(jiān)視器191)上發(fā)生在應(yīng)用程序顯示區(qū)域的事件。應(yīng)用程序202、204通過接口228向進行中合成循環(huán)呈現(xiàn)其可視樹輸出。該輸出被用以建立應(yīng)用程序可視樹的子樹。該子樹被合成為一平面,而該平面被呈現(xiàn)給窗口管理器208用于桌面合成。然后窗口管理器208基于顯示屏上應(yīng)用程序的可視性來評估將要顯示的和不會顯示的,而基于該評估創(chuàng)建了一組合成樹214、216。合成樹獨立于可視樹而被呈現(xiàn)。合成樹包括從可視樹編譯的用戶將在顯示裝置上見到的所有元素。例如,如果創(chuàng)建了文檔的可視樹,合成樹將是要顯示的那部分文檔。本發(fā)明允許遠程創(chuàng)建和操作合成樹,而無需在服務(wù)器上創(chuàng)建合成樹。盡管本發(fā)明根據(jù)遠程創(chuàng)建和操作合成樹來描述,可以理解可使用本發(fā)明在圖8服務(wù)器上創(chuàng)建并呈現(xiàn)各合成。現(xiàn)在參照圖9,服務(wù)器206上的應(yīng)用程序202、204在客戶機裝置220上顯示。盡管僅示出了一客戶機裝置,可以理解可使用任何數(shù)量的客戶機裝置。通過使用包的信道232,應(yīng)用程序202、204和窗口管理器208使用接口228經(jīng)網(wǎng)絡(luò)230分別與合成模塊222-226通信??蛇B同單個應(yīng)用程序領(lǐng)域使用的合成模塊數(shù)量按需可為任意數(shù)量。注意服務(wù)器206和客戶機220無需通過網(wǎng)絡(luò)或任意其它方式連接,相反,數(shù)據(jù)可通過能由服務(wù)器平臺寫入而由客戶機平臺讀取的任何媒體來傳送。在一實施例中,包用遠程數(shù)據(jù)協(xié)議來封裝,以向客戶機220發(fā)送創(chuàng)建合成樹214、216的信息。每個包中置入標識符以標識哪個合成模塊222-226是該包的目標。組件234將包多路分離,并將包發(fā)送給模塊222-226的適當(dāng)?shù)淖兓犃?40、242、244。本發(fā)明的裝置無關(guān)協(xié)議向應(yīng)用程序和客戶機提供通過信道232與服務(wù)器的接口以合成內(nèi)容。內(nèi)容的類型包括資源命令包和控制包。資源類型包括筆、畫刷、位圖、字形、視頻片斷、幾何圖形(橢圓、長方形、方框、圓等)、動畫、存儲等。合成節(jié)點是客戶機應(yīng)用程序可用的空間容量的基本單元??蛻魴C創(chuàng)建其合成服務(wù)上的合成節(jié)點。一合成節(jié)點可包含一個或多個資源??偸怯幸粋€表示屏幕內(nèi)容或桌面的根合成節(jié)點。有一個或多個表示屏幕以外合成的合成節(jié)點。在以下描述中,將通過典型的調(diào)用序列來描述裝置無關(guān)協(xié)議。通信是異步的。使用了特定的連接、重新連接、以及斷開語義。應(yīng)用程序202、204、208分別與存在于客戶機220上的合成模塊222、224通信。通常單個連接會起動并在應(yīng)用程序的使用壽命期間保持,因為連接和斷開連接是昂貴的操作,且與客戶機上合成模塊的通信可能比較頻繁。保持連接的成本比重復(fù)斷開和連接的成本低得多。服務(wù)器應(yīng)用程序202、204、208和合成模塊222-226之間的通信是以包形式進行的。服務(wù)器應(yīng)用程序202、204、208與客戶機220連接,并開始發(fā)送包。包可以是資源包、控制包、以及批處理包。使用資源包來創(chuàng)建資源和更新資源。使用控制包來控制合成狀態(tài)并在客戶機220上維護一文本字形位圖緩存器。使用批處理包來原子化地應(yīng)用多個更改。一創(chuàng)建批命令被發(fā)送給客戶機220以指示一批處理的開始。合成模塊積累請求直至批處理被"終止"。通過發(fā)送批處理結(jié)束/呈現(xiàn)包結(jié)束該批處理。此時,合成服務(wù)開始處理命令。合成服務(wù)中的變化隊列保持批處理化結(jié)構(gòu)以便確保各變化原子化地發(fā)生?,F(xiàn)在參照圖10,示出了創(chuàng)建和控制合成的步驟。將使用服務(wù)器應(yīng)用程序202來描述這些步驟。本領(lǐng)域技術(shù)人員理解可使用任意代碼分段。創(chuàng)建一合成模塊(步驟300)。合成模塊負責(zé)呈現(xiàn)已創(chuàng)建的連接的合成。創(chuàng)建產(chǎn)生一資源命令的一呈現(xiàn)目標,該資源命令創(chuàng)建一呈現(xiàn)目標資源(步驟302),并且創(chuàng)建與呈現(xiàn)目標資源相關(guān)聯(lián)的呈現(xiàn)環(huán)境(步驟304)。呈現(xiàn)目標是用于呈現(xiàn)資源的目的地目標。創(chuàng)建一合成節(jié)點(步驟306)。然后創(chuàng)建資源(步驟308)并呈現(xiàn)合成(步驟310)。合成利用了簡單和復(fù)合資源的組合以便向目標呈現(xiàn)內(nèi)容。簡單資源是自包含的,且對任何其它資源沒有直接的依賴。復(fù)合資源指其它依賴性資源。復(fù)合資源的一個示例是"描繪數(shù)據(jù)"資源。"描繪數(shù)據(jù)"資源由可隨后引用諸如畫刷、筆、或幾何圖形描述的其它資源的描繪指令的保留列表組成。使用描繪數(shù)據(jù)資源來編碼在其它資源幫助下執(zhí)行的描繪操作。描繪數(shù)據(jù)資源與合成節(jié)點相關(guān)聯(lián),它們具有在空間上本地化這些描繪操作的任務(wù)。當(dāng)需要更新一合成時,發(fā)送一更新命令(步驟312)。更新可添加資源或更新資源。可能需要刪除特定的合成并創(chuàng)建新的合成。例如,如果合成是文本文檔,如果關(guān)閉文本文檔則刪除該合成。如果要刪除該合成,向合成服務(wù)發(fā)送一解除命令(步驟314)。動畫在平臺上是滲透性的。通過使客戶機能采取估算和展現(xiàn)動畫的全部責(zé)任,本發(fā)明在一實施例中提供了可縮放的動畫。這在許多情形中是滿足需要的,特別是在動畫較復(fù)雜或動畫目標需要未經(jīng)加速的一組操作(諸如鑲嵌式鋪裝)發(fā)生時。對于某些低成本、高可視性的用戶接口效果,諸如動漫,允許這些操作在一鏈合成過程中發(fā)生是有意義的。在此情形中,應(yīng)用程序202將采樣高層動畫函數(shù),并向合成服務(wù)提供一系列與資源相關(guān)聯(lián)的經(jīng)時間標記的值作為請求。這些表示資源要進行動畫的間隔,以及該間隔保持活動的時間線的兩個端點。應(yīng)用程序202發(fā)送更新資源包以更新一資源值。注意該序列掩飾了基層的復(fù)雜性。合成模塊將經(jīng)時間標記的值標準化為合成服務(wù)的全局時間線,而合成管理器(未示出)在合成到呈現(xiàn)目標期間將更新塊插入適當(dāng)資源。對于每個已合成幀,合成模塊將估算資源的間隔以導(dǎo)出瞬時值。既然己描述了編程接口的總體結(jié)構(gòu),將描述資源和控制命令包。使用控制包來控制合成狀態(tài)并維護由客戶機220上合成模塊使用的字形緩存器??氐踀包是Resource—Command—Null、Resource—Command—Release、Resource—Command_Shutdown、Resource—Command—Synchronize、Resource—Command—Status、Resource—Command—Add_Glyph_Bitmaps、Resource_Command一Free—Glyph—Bitmaps、以及Resource—Command—Flush—Queue。Resource—Command—Release釋放了一資源。Resource—Command—Shutdown關(guān)閉了合成模塊并刪除了與該合成模塊相關(guān)聯(lián)的一切。Resource—CommancLSynchronize刪除與該合成模塊相關(guān)聯(lián)的一切以開始刷新。Resource—Command—Status向合成模塊發(fā)送一狀態(tài)消息。Resource—Command—Add—Glyph_Bitmaps向字形緩存器添加位圖。Resource_Command—Free_Glyph—Bitmaps從字形緩沖器移除位圖。Resource_Command_Flush—Queue排空變化隊列。維持一從客戶機220向服務(wù)器206傳回通知包的通知隊列。它們可以是以下類型Notification—Resource—Deleted、Notification一Shutdown、Notification—Synchronize、Notification—Status、以及Notification—Error。使用資源命令包來呈現(xiàn)資源。資源可被定義為"用于呈現(xiàn)要求不同分辨率和/或物理裝置的不同實現(xiàn)的一情景的所需要的任一對象;在一合成樹上使用多次的;或者可獨立于其用戶通過動畫而變化的"。資源能夠串行化本身、應(yīng)用更新、并提供特定分辨率和裝置的實現(xiàn)。資源類型包括空、存儲、描繪數(shù)據(jù)、位圖、字形、頂點、時間線、雙重動畫、色彩動畫、點動畫、長方形動畫、尺寸動畫、雙重動畫集、色彩動畫集、點動畫集、長方形動畫集、尺寸動畫集、變換、雙重、色彩、點、長方形、尺寸、梯度、畫刷、圖、幾何圖形、筆、視頻、Composition—Node、Composition—Context、圖f象、Hwnd—Composition—Target、以及Intermediate—Composition—Target。使用Hwnd一Composition一Target來向窗口呈現(xiàn)。使用Intermediate—Composition—Target用于屏幕以外的呈現(xiàn)。通常無需回調(diào),發(fā)送給合成模塊的資源就可以由合成模塊直接實現(xiàn)。如果不可直接實現(xiàn),發(fā)送所需實現(xiàn)。要實現(xiàn)類似"文本"和"圖像"的資源是昂貴的(根據(jù)處理開銷)并因此轉(zhuǎn)換成在合成樹上使用的適當(dāng)"準備呈現(xiàn)"形式。將資源轉(zhuǎn)換成準備呈現(xiàn)形式節(jié)約了在合成模塊中合成的開銷。如果需要任何對用戶代碼的回調(diào),資源也可被轉(zhuǎn)換成適當(dāng)?shù)?準備呈現(xiàn)"形式??捎珊铣赡K有效地鑲嵌式鋪裝成正確分辨率的其它類似"幾何圖形"資源在需要時由合成模塊本身實現(xiàn)。通常資源被分成一些類型,諸如繪圖資源、值資源、以及結(jié)構(gòu)資源。繪圖資源是由描繪層定義的對象,且可直接由該層使用。繪圖資源的示例包括描繪數(shù)據(jù)、位圖、圖像、字形、幾何圖形、以及畫刷。具有很低并給定描繪成本的繪圖資源可在直接來自與裝置和分辨率無關(guān)的資源數(shù)據(jù)的合成期間得以實現(xiàn)。幾何圖形是簡單的繪圖資源,因為它在合成模塊的合成循環(huán)中可有效地鑲嵌式鋪裝成所需的最終分辨率。相反,復(fù)雜的繪圖資源需要復(fù)雜的計算、對用戶代碼的回調(diào)、或者輸入/輸出以產(chǎn)生實現(xiàn)。在一實施例中,復(fù)雜的繪圖資源不由合成模塊實現(xiàn)。相反,適當(dāng)?shù)膶崿F(xiàn)由應(yīng)用程序202、204和/或服務(wù)器206在合成之前提供。"圖像"是復(fù)雜資源的一個示例。圖像從盤上讀取、解碼、以適當(dāng)分辨率采樣、并進行過濾。值資源表示由另一資源使用的簡單的可變或動態(tài)值。值資源的示例是雙重、點、色彩、以及變換。例如,描繪數(shù)據(jù)資源可指要畫線的點資源,其中點之一期望通過動畫或應(yīng)用程序的強制指向而變化。如果值資源可變動,則值資源包含定義該值如何隨時間變化的動畫間隔數(shù)據(jù)。結(jié)構(gòu)資源是在合成過程中起作用的對象,但并非直接是呈現(xiàn)的一部分。這些對象被實現(xiàn)為資源,從而它們可通過變化隊列參與更新,并使用值資源來更新間隔值。經(jīng)標識的結(jié)構(gòu)資源包括合成節(jié)點。一般而言,必須在被使用之前實現(xiàn)資源。實現(xiàn)可被稱為"適于給定分辨率的并準備由特定裝置使用的資源表示"。實現(xiàn)的一個示例是經(jīng)鑲嵌式鋪裝成三角形的具有特定分辨率和變形的幾何圖形,并可能已載入到視頻卡上的頂端緩存。實現(xiàn)在合成模塊中按需創(chuàng)建,或者在服務(wù)器206上創(chuàng)建并傳送給合成模塊。如果所需資源實現(xiàn)未發(fā)現(xiàn)或創(chuàng)建,則通過通知隊列將通知在服務(wù)器206上排隊。該通知指示資源句柄、變換、以及所需裝置、以及所使用實現(xiàn)的任何變形。包具有如下所示的結(jié)構(gòu)MIL—PACKET_TYPEpacketType;HMIL一RESOUHGEresHandle;MIL—RESOURCE—TYPEtype;DWORDsize;hitmarshalType',其中MiLPacket一Type是批處理包、控制包、或者資源包之一。HMIL—Resource句柄必須具有資源的適當(dāng)類型。這些句柄標記必須用于資源、環(huán)境、或合成節(jié)點(例如compnode)。Mil一ResourceJType是如上所述的資源類型(例如位圖、變形、幾何圖形等)。附加于包的是用以指令合成服務(wù)執(zhí)行任務(wù)的命令。這使得第三方供應(yīng)商提供自己的代碼以操作其合成服務(wù)。一種這樣的實現(xiàn)如下。//HRESULTCMilResourceBrushSolidColorData::MarshalDataCorestructBrushSolidColorPacketM工Ii一COLORFcolr'-HMIIj一RESOURCEhColor/}一/*HRESULTCMilResourceBrushSolidColorData::MarshalDataCore(IMilTransporpEncoder)HRESULThr-S—OK;Assert(NULL!=pEncoder)'-//CallbasemethodbeforeourownCMilResourceBrushData::MarshalDataCore(pEncoder)pEncoder->AddColor(&(m一brushSolidData,color))〖pEncoder->AddResource(m一brushSolidData.hColor),-Cleanup:RRETURN(hr);//HRESULTCMilResourceBrushLinearGradient::MarshalstructBrushLinearGradientPacket:Packetintbrushtype=MilUceBrushTypeliinearGradientfloatAlpha,.HMIL一RESOURCEhTransform/floatbeginPoint3t〖floatbeginPointy,'HM工Ii一RESOURCEhBeginPoint/floatendPointx,'floatendPointyHMIIi一RESOURCEhEndPoint;intwrapMode'-HM工Ij一RESOURCEhG:radient'-intbGammaCorrectintbAdjustToObject//CMilResourceBrushData::MarshalDatastructBrushDataPacket:Packetintbrushtype,'doubledblOpacity'-HM工L一RESOURCEhOpacity'-HM工L二RESOURCEhTransform,'<table>tableseeoriginaldocumentpage19</column></row><table>intmarshalType-MilAnimatedValueMarshalAux;HMIL—RESOURCEhAnimationCollectiori;intoffsetToValue/intsizeOfValue-sizeof(TValue〉intoffsetToBaseValueintsizeOfBaseValue=sizeof(TValue)zstructMasterAnimationCollectionPacket:PacketintcAnimationsHM工、RESOURCEh.andleArray;//for(riAnimation',0;nAnimation<m—cAnimations;nAnimation++)〃{//pEncoder->AddResource(m—rghAnimations[nAnimation])7—〃}structMasterAnimationPacket:Packetintanimtype=MilAnimationCopyHMIL—RESOURCEhTimeline///m一animationData.WriteData(pEncoder);//TMilMasterValue<TValue,ResType>::SendUpdatePacket(structMasterValueUpdatePacketjPacketintvalueType-MilValueMarshalin仁auxType=MilValueMarshalAux'.in仁size,'//sizeof(TValue)//resrvememoryforvaluecopy,structTMilAnimationDataPacket:Packetint:animationTypeintinterpolationMethod'-BYTEf工sAdditive,'BYTEfIsAccumulating'-UINTcValues;//nextspacevaluesandkeytimes.//pEncoder->AddMemory(m一rgValues,size:of(TValue)*tn—cValues)〃pEncoder->AddMetuory(m—rgKeyTimes,sijzeof(double)*m一cValues),BYTEfHasKeySplinePoints丁一//Next:spaceforsplinepoints,//if(m—rgKeySplinePoints)〃{—//pEncoder->AddByte((BYTE)TRUE);//pEncoder->AddMemory(//m—rgKeySplinePoints,//sizeof(MIL—2DPOINTD)*2*(m—cValues-1));〃}—一//else〃(〃pEncoder"AddByte((BYTE)FALSE);〃}structBitmapUpdatePixelsPacket:Packetintbitmaptype=MilBi仁mapUpdatePixels;intprectX,'intprectY'.intprectWidth,'intprectHeightU工NTstride,'UINTcbSize'.//pixelsafterthisstructBitmapAddDirtyRectPacket:PacketUINTbitmaptype=MilBitmapAddDirtyRect))UINTprectX,.U工NTprectY,-UINTprectWidth'.UINTprectHeight;structSitmapMarshalPixelsPacket:PacketU工OTbitmaptype=MilBitmapCopyintprectX/intprectY'-intprectWidth',intprectHeightjUINTstride;UINTformat;UINTcbSize;//pixelsafterthis)structRenderDataMarshalPacket:Packetintrenderdatatype=MilRenderDataCopyUINTnHandleCount'-U工NTnByteCount///handlesanddatafollow,//CMasterCompositionContext::SetRootstructCompositionContextSetRootPacket:PacketUINTco觀andType-CONTEXT—SETROOTHM工IiCOMPNODEhRoot,—//CMasterCompositionNode::SetPropertystructCompositionNodeSetPropertyPacket:Packet<一U工NTcommandType-CCompositionCommand::NODE—SETPROPERTY,'HMIL—RESOURCEhResource'.—//commandmemtnoryhere.//CMasterCompositionNode::InsertChildAtstructCompositionNode工nsertChildAtPacket:PacketU工NTcommandType=CCompositionCo腿and::NODE—INSERTCHILD'-HMIL—COMPNODEhChild'-UINTiPosition'-//CMasterCompositionNode::Ren\oveChi1dstructCompositionNodleRemoveChildPacket:PacketUINTco誦andType-CCompositionCommand::NODE—REMOVECH工IjD,'HMIL—COMPNODEhChild/—}一//CMasterCompositionNode::MarshalstructCompositionNodeMarshalPacket:PacketUINTcommandType=CCompositionCo飄and::NODE—CREATE,'HMIL—RESOURCEhTransform;-—HM工L:RESOURCEhClip));HM工L二RESOURCEhRenderData'-HMIL—RESOURCEhAlpha'-UINTchildCount'-//handleshere//CMilResourceGeometry::MarshalEmptystructGeometryMarshalEmptyPacket:PacketU工NTgeomType///CMilResourceGeometry::MarshalIjiiiestructGeometryMarshalljinePacket:PacketiritpGeonVType,'HMIIj—RESOURCEhTransformRes;doublePointlX'-doublePointlY'.HM工L一RESOURCEhPointlResdoublePoint2X,-doublePoint2Y,'HMILRESOURCEhPoint2Res;//CMilResourceGeometry::MarshalRectanglestructGeometryMarshalRectangle:PacketintpGeomTypeHM工Ij一RESOURCEhTransformRes'-doubleRectX,.doubleRectY'-doubleRectWidth'.doubleRectHeight'-HM工Ij—RESOURCEhRectRes,'doubleRadiusX'.HM工L一RESOURCEhRadiusXResdoubleRadiusY'-doubleRadiusYRes'.//CMilResourceGeometry::MarshalEllipsestructGeometryMarshalEllipsePacketintpGeomTypeHMIIj一RESOURCEhTransformResdoubleCenterX,-doubleCenterY',HMIL一RESOURCEhCenterRes'-doubleRadiusX,-HM工L一RESOURCEhRadiusXRes,.doubleRadiusY,-HM工Ii一RESOURCEhRadiusYRes;}一//CMilResourceGeometry::MarshalPathstructGeometryMarshstlPath:PacketintpGeomType;HM工L—RESOURCEhTransformRes丄ntFil工Mode,-intCountzintSize;//pathdataappendedhere,//pEncoder->AddMemory(pGeom->FigureData,pGeom->Size》//HRESULTCMilResourceGeometry::MarshalCollectionstructGeometryMarshalCollectionPacket:PacketintpGeomType,'HMIIj—RESOURCEhTransformRes7intCombineMode'-intcount///handleshere://for(U工NTi=0,'i<p<3eotn->Count;i")〃{//pEncoder->AddResource(pGeom->Resources[i]),-〃/}//HRESULTCGlyphCacheMasterManager::UpdateResource(boolfAddBitmaps)structUpdateGlyphCachePacket:PacketMIIj—UPDATE—GLYPHCACHEus'.ARRAY—RECORDglyphlndeces;//UINTarrayofindeces.AllocatedwithAddAxrayARRAY一RECORDglyphBitmaps〖]//numtTerofentriesisnrofglyphlndecesARRAY—RECORDno:rmAdvancedWidth,-//numberofentriesisnrofARRAY—RECORDfontFileName}—//HRESUI/TCMilMasterGlyphRun::DoMarshalstructGlyphRunMarshalPacket:PacketGliYPHRUN—MARSHAL—TYPEglyphRunType;M工L—CREA^E一GLYPh5uNcreateStruct;USHORTGlyphlndeces[],-DOUBLEAdvanceWidths[〗,-WCHARUnicodeString[〗7MIL—2DPO工NTFGlyphOffsets[〗USHORTCharacterToGlyphMap[〗WCHARFontFileName[〗;〃HRESULTCMilMasterGlyphRun:--MarshalRealizationstructGlyphRunRealizationPacket|PacketGLYPHRUN—MARSHAL—TYPEglyphRunType7DOUBLEscaleX,*DOUBLEscaleY,'//HRESULTCMilMasterGlyphRun::MairshEilGeometryHandlestructGlyphRunMarshalGeometryHandlePacket:PacketGIjYPHRUN—MARSHAL—TYPEglyphRunTypeHMIIi—RESOURCEhGeometry/}一//CMilResourcePen::SetWidthstructPenSetWidthPacket:PacketintpenCommand=CMilPenData::MilPenSetWidth'.doublewidth,.//CMilResourcePen::MarshalstructPenMarshalPacket:PacketintpenCommand=CMilPenData::MilPenCopy/HM工L一RESOURCEhBrushRes;HMILi—RESOURCEhWidthRes'.doublewidth,-doubletniterLimit,'BYTEstartCap;BYTEendCap;BYTEdashCap,BYTEj0inCap7//CMasterHWndRenderTarget:-MarshalstructHWndRenderTargetMarshalPaclcet:PacketinttargetCommand-CCompositionCommand:-HWNDRT—CREATE'-HMIL—CONTEXTm一hCompositionContext<formula>formulaseeoriginaldocumentpage25</formula>U工NTintervalCount///copymemoryhere.//pEncoder-:>AddMemory(&ct,sizeof(MIL—CREATE—TIMELINE))//CMilMasterTimeline::SendAddlntervalPacketstructTimelineAddlntervalPacket:Packetinttype-MilTimelineAddlnterval;//copyintervalmemoryhere//pEncoder->AddMemory(pti,sizeof(MIL—TIME—INTERVAL));}'—//CMilMasterTimeline::SendClearPacketstructTimelineSendClearPacket:Packetinttype=MilTimelineClear;//CMilMasterTimeline::SendEnablePacketstructTimelineSeridEnablePacket:Packetinttype-MilTimelineEnablezHM工:LRESOURCEhParentTimeLine;〃CMilMasterTimeline::SendDisablePacketstructTimelineSendDisablePacket:Packetinttype-MilTimelineDisable,*//HRESULTCMilRescurceTransform::MarshalIdentitystructTransformMarshalldentityPacketPacketinttransType=MilTransforiu工cientity;//HRESULTCMilResourceTransform::MarshalMatrix3x2structTransformMarshalMatrix3x2Packet:PacketinttransType=MilTransformMatrix3x2doubleS一lldoubledoubles:2idoubleS:22doubleDX;doubleDY;//HRESULTCMilResourceTransform::MarshalMatrix4x4structTransformMarshalMatrix4x4Pacicet:PacketinttransType=MilTransformMatrix4x4floatcoef[16〗,"http://HRESULTCMilResourceTransform::MarshalT:ranslatestructTransformMarshalTranslatePacket:PacketinttransType=MilTransformTranslatedoubleOffsetX;HM工L一RESOURCEOffsetXRes/doubleOffsetY'-HMIL—RESOURCEOffsetYRes'-}一//HRESULTCMilResourceTransform::Ma.rshalScalestructTransformMarshalSealePaclcet:PacketinttransType-MilTransformScale;doubleScaleX'.HM工Ij一RESOURCEhScaleXRes'-doubleScaleY/HM工Ii一RESOURCEhScaleYRes);doubleCerxterX'.doubleCenterY/HMIL—RESOURCEhCenterRes'-}一//HRESULTCMilResourceTransform::MarslialRotatestructTransformMarshalRotatePacket:PacketinttransType-MilTransformRotate,'doubleAngle/HMIL—RESOURCEhAngleRes'-doubleCenterX,'doubleCenterY,.HMILRESOURCEhCenterRes//HRESULTCMilResourceTransform:'■MarshalSkewstructTransformMarshalSkewPacket:PacketinttransType=MilTransformSkew,.doubleAngleX/HMIL—RESOURCEhAngleXRes'.dobleAngleY,.HMIL—RESOURCEhAngleYRes;doubleCenterX,'doubleCenterY,*HMILRESOURCEhCenterResstructTransformMarshalCollection:PacketkinttransType=MilTransformCollection,'intCount,'//reservememoryforcollectionhandles//for(UINTi=0,'i<pTrans->Comit;i++)〃{//pEricoder->AddResource(pTrans"Resources[i]),'〃)—執(zhí)行步驟300到314的指令示例如下。在該示例中,創(chuàng)建合成模塊和呈現(xiàn)目標。然后發(fā)送批處理打開控制包。發(fā)送要創(chuàng)建合成節(jié)點、描繪數(shù)據(jù)資源、以及合成環(huán)境的命令。根節(jié)點在合成環(huán)境上設(shè)置,而合成環(huán)境在hwnd目標上設(shè)置。此時,合成節(jié)點、合成環(huán)境、描繪數(shù)據(jù)資源、根節(jié)點以及hwnd目標相關(guān)聯(lián)。然后創(chuàng)建資源。資源是幾何圖形資源、原彩色畫筆資源、以及筆資源。然后發(fā)送更新包以更新筆、把橢圓添加到幾何圖形資源中、并畫出幾何圖形。然后畫出經(jīng)填充的長方形,描繪數(shù)據(jù)在合成節(jié)點上設(shè)置,并更新合成節(jié)點。為了刪除該合成,發(fā)送資源釋放命令以釋放資源,并去除合成裝置。main()MilCompositionDevice—Create(&g一hCompositionDevice)//Createsthedevice->generatesaconnectpacket.//handledbycompositionproxythatcreatesaclientcompositiondeviceforthisconnection.MilResource一HWndRenderTarget一Create(&g_hRenderTarget)//createarendertargetgeneratesaresourcecommandtocreate匕herendertargetresource,Mi1CompositionDevice—CreateBatch(&hBatch)'-//Opensabatchgeneratesabatchopencontrolpacket//handledbyclientcompositiondevice.MilResource—CompositionNode—CreatehRootNode);//createacompositionnode->generatesaresourcecommandpackettocreateacompositionnode.MilResource—RenderData—Create(&g一hRenderData);//createarenderdataresource->generatesaresourcecommandpackettocreatearenderdata.MilResource—CompositionContext—CreatehCompositionContext);//createacompositioncontextcommand->generatesaresourcecommandpackettocreateacompositioncontext.MilCompositionContext—SetRootNode(g—hCompositionContext,g—hRootNode,h"tch);//settherootnodeonthecompositioncontext->generatesaresourcecommandtosettherootnodeonthecontext//packetishandledbycompositioncontextresourceMilResource—HWndRenderTarget—SetCompisitionContext(g一hRenderTarget,g_hCompositionContext,hBatch)),'//setthecompositioncontextonthehwndtarget->generatesaresourcecommandpackettosetthecompcontextonhwndtarget//packetishandledbythehwndtargetresource.MilResource—Geometry—Create(&hGeometry》//createageometryresource->generatesaresourcecommandpacketthatcreatesageometryresource.MilResource一SolidBru'sh一Create(&hSolidBrush)'-//createasolidbrushresource->generatesnopacket.MilResource—SolidBrush—Update(hSolidBrush,——1.0,NULL,&color,g—hColor,hBatch)///setthecoloronthesolid->generatesaresourcecommandpacketthatcreatesabrushresourcewiththegivencolor,MilResource—Pen—Create(&g一hPen)//createapenresource->generatesaresourcecommandpacketthatcreatesthepenresource,MilResource—Pen一Update(g—hPen,hSolidBrush,g一hPenWidth,MilPenCapFlat,MilPenCapFlat,MilPenCapFlat,Mi1PenJoinMiter,10,0,NULIi,0.0,NULL,hBatch)//updatethepen->generatesapenupdatepacket//handledbythepenresourceMilGeotnetry一UpdateEllipse(hGeometry,NULL,—100-0,NULIi,50.0,NULL,100.0,100,Q,NULL,hBatch);//updatethegeometrytocontainanellipsupdatepacket*"〃geometryresource、>generatesageometryhandledbytheMilRenderData—DrawGeometry(g—hRenderData,hSolidBrush,hGeometry)//drawthegeomet:rytotherenderdata->generatesarenderdataupdatepackettodrawthegeometry//handledbytherenderdataMilRenderData—FillRectangle—InlineSolidBrush(g—hRenderData,200,200,300,300,colory》;//drawafilledrectangleusingaspecifiedbrushtotherenderdata->generatesarenderdataupdatepacket〃handledbytherenderdataresourceMilCompositionNode—SetRenderData(g一hRootNode,g—hRenderData,hBatch),-//setstherenderdataonacompositionnode->generatesacompositionnodeupdatepacket〃handledbythecompnoderesourceMilBatch—Commit(hBatch)//generatesabathclose/commitpacket.//'handledbyclientcompositiondevice.//thisisthenotificationprocessingloopdoWaitOnEvents();MilCompositionDevice—ProcessNotifications(g一hCoxupositiont)evice);//hereweinternallyprocessnotificationpacketscomingfromtheclientcompositiondevice.}while(compositionstillrunning:controlledbylayerusingthecompositor),'//alltheresourcereleasecallsgenerateresourcedestroypacketsandqueueflushcontrolpackets.//handledbyclientcompositiondevice.MilResource—Release(g一hCompositionContext)MilResource—Release(g一hRootNode),'MilResource—Release(g—hHandleTable,g一hRenderData)MilResource一Release(g一hPen)MilResource—Release(g一hColor》MilResource—Release(g—hPenWidth)'-MilResource一Release(g—hITarget)MilCompositionDevice一Destroy(g—hCotnpositionDevice)'-//onexitingtheloopweshutdown<formula>formulaseeoriginaldocumentpage31</formula><formula>formulaseeoriginaldocumentpage32</formula>權(quán)利要求1.一種在裝置上呈現(xiàn)一組合成的方法,其特征在于,所述方法包括以下步驟發(fā)送一創(chuàng)建合成節(jié)點包,用于創(chuàng)建一合成;發(fā)送至少一創(chuàng)建資源包,以創(chuàng)建用于呈現(xiàn)所述合成的資源;以及發(fā)送至少一呈現(xiàn)更新包,以創(chuàng)建所述合成。2.如權(quán)利要求1所述的方法,其特征在于,還包括發(fā)送一創(chuàng)建描繪數(shù)據(jù)資源包,以創(chuàng)建一描繪數(shù)據(jù)資源的步驟。3.如權(quán)利要求1所述的方法,其特征在于,還包括發(fā)送一批處理打開包以打開一批處理過程的步驟。4.如權(quán)利要求3所述的方法,其特征在于,還包括以下步驟發(fā)送多個創(chuàng)建資源包;發(fā)送至少一個資源更新包;以及發(fā)送一結(jié)束/呈現(xiàn)批處理包。5.如權(quán)利要求1所述的方法,其特征在于,還包括發(fā)送一釋放命令以釋放一資源的步驟。6.—種數(shù)據(jù)結(jié)構(gòu),其特征在于,包括一第一字段,具有一包類型;一第二字段,具有一句柄,所述句柄匹配所述包類型;一第三字段,具有匹配所述包類型的資源類型和命令類型之一;以及一第四字段,具有一命令。7.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述包類型是控制包和資源命令包之一。8.如權(quán)利要求7所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述控制包和資源命令包之一包括所述控制包、所述資源命令包、以及一批處理包中之一。9.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述句柄包括資源句柄、環(huán)境句柄、以及合成節(jié)點句柄之一。10.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述資源類型和命令類型之一包括資源類型,所述資源類型包括存儲、位圖、變換、幾何圖形以及筆之一。11.如權(quán)利要求IO所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述資源類型還包括動畫類型。12.如權(quán)利要求11所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述動畫類型包括雙重動畫、色彩動畫、點動畫、長方形動畫、以及尺寸動畫之一。13.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述資源類型包括合成節(jié)點、以及合成環(huán)境之一。14.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述控制類型包括釋放資源的釋放一資源類型、關(guān)閉一裝置的關(guān)閉類型、以及刪除裝置上所有的同步類型之一。15.如權(quán)利要求6所述的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述控制類型包括將位圖添加到字形緩存器的添加字形位圖類型、從所述字形緩存器移除位圖的釋放字形位圖類型、以及排空變化隊列的排空隊列類型之一。16.—種在裝置上呈現(xiàn)合成的方法,其特征在于,所述方法包括以下步驟響應(yīng)于接收一創(chuàng)建合成節(jié)點包,創(chuàng)建一合成節(jié)點;響應(yīng)于接收至少一個創(chuàng)建資源包,創(chuàng)建至少一個用于呈現(xiàn)所述合成的資源;以及響應(yīng)于接收至少一個呈現(xiàn)更新包,創(chuàng)建所述合成。17.如權(quán)利要求16所述的方法,其特征在于,還包括響應(yīng)于接收一創(chuàng)建描繪數(shù)據(jù)資源包,創(chuàng)建一描繪數(shù)據(jù)資源的步驟。18.如權(quán)利要求16所述的方法,其特征在于,還包括響應(yīng)于接收一批處理打開包打開一批處理過程的步驟。19.如權(quán)利要求18所述的方法,其特征在于,還包括響應(yīng)于接收一結(jié)束/呈現(xiàn)批處理包,處理至少一創(chuàng)建資源包和至少一資源更新包的步驟。20.如權(quán)利要求16所述的方法,其特征在于,還包括響應(yīng)于接收一釋放命令,釋放一資源的步驟。21.如權(quán)利要求16所述的方法,其特征在于,還包括響應(yīng)于接收一命令包,發(fā)送一通知的步驟。全文摘要揭示了在遠程裝置上創(chuàng)建和控制合成的方法和協(xié)議。該協(xié)議使服務(wù)器和其它裝置能夠利用遠程裝置的處理能力,來呈現(xiàn)遠程裝置上的合成,從而增加服務(wù)器的可升級性并發(fā)揮遠程裝置的處理能力。該協(xié)議用處理這些命令所需的信息的有效載荷,來提供高層命令包以向遠程裝置傳送資源命令包和控制包。文檔編號H04L29/08GK101411164SQ200480001334公開日2009年4月15日申請日期2004年7月26日優(yōu)先權(quán)日2003年10月23日發(fā)明者D·B·柯蒂斯,G·D·斯偉德伯格,O·D·溫克雷亞努,P·C·戴偉申請人:微軟公司