專利名稱:基元組成的制作方法
基元組成相關(guān)申請(qǐng)交叉引用 不適用。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響社會(huì)的許多方面。實(shí)際上,計(jì)算機(jī)系統(tǒng)處理信息的能力已經(jīng)改變了我們的生活和工作方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)之前由人工執(zhí)行的大量工作(例如,字處理、計(jì)劃安排和記賬)。最近,計(jì)算機(jī)系統(tǒng)已經(jīng)實(shí)現(xiàn)相互藕接并且與其他電子設(shè)備互連以形成有線和無(wú)線計(jì)算機(jī)網(wǎng)絡(luò),計(jì)算機(jī)系統(tǒng)和其他電子設(shè)備可以通過(guò)這些計(jì)算機(jī)網(wǎng)絡(luò)傳輸電子數(shù)據(jù)。因此,許多計(jì)算機(jī)任務(wù)的執(zhí)行跨多個(gè)不同的計(jì)算機(jī)系統(tǒng)和/或多個(gè)不同的計(jì)算環(huán)境分布。許多應(yīng)用(包括操作系統(tǒng)級(jí)應(yīng)用和終端用戶應(yīng)用)包括用于向用戶顯示信息和用于接收用戶輸入的圖形用戶接口。盡管歷史上多數(shù)圖形用戶接口在呈現(xiàn)用戶接口時(shí)使用的 計(jì)算資源相對(duì)簡(jiǎn)單,但是許多軟件開(kāi)發(fā)人員現(xiàn)在希望做出更為復(fù)雜的用戶接口來(lái)提供豐富的用戶體驗(yàn)。例如,許多軟件開(kāi)發(fā)人員現(xiàn)在希望使用難于呈現(xiàn)的圖形用戶接口元素(例如采用透明度、動(dòng)畫、三維圖形等用戶接口元素)來(lái)創(chuàng)建豐富、靈敏和流暢的用戶接口。近年來(lái),具有有限資源和嚴(yán)格功耗要求的便攜式計(jì)算設(shè)備(例如,智能手機(jī)、PDA、便攜式媒體播放器、平板計(jì)算機(jī)等)變得日益普及。這些設(shè)備中的一些可以集成觸摸式用戶輸入,這樣有助于使這些設(shè)備的使用更加直觀。為這些用戶設(shè)備設(shè)計(jì)用戶接口的開(kāi)發(fā)人員尤其熱衷于通過(guò)制作豐富、靈敏和流暢的用戶接口來(lái)最大化這些設(shè)備上用戶接口的效能。但是,由于這些設(shè)備存在資源和電池壽命有限的問(wèn)題,因此,開(kāi)發(fā)人員很難在保持用戶接口靈敏度和呈現(xiàn)可靠幀率的同時(shí),為這些設(shè)備做出極為生動(dòng)且畫面吸引人的用戶接口。
發(fā)明內(nèi)容
實(shí)施例可以包括用于在用戶接口(UI)線程中執(zhí)行基元組成的功能。通過(guò)在UI線程中組成諸如圖形處理單元(GPU)數(shù)據(jù)結(jié)構(gòu)之類的基元,用戶接口框架能夠減少負(fù)責(zé)處理動(dòng)畫,處理輸入和呈現(xiàn)幀的單獨(dú)的組成線程的工作負(fù)載。這樣轉(zhuǎn)而增強(qiáng)將用戶接口框架擴(kuò)展到具有相對(duì)有限資源的計(jì)算設(shè)備(例如移動(dòng)設(shè)備、平板計(jì)算機(jī)、嵌入式設(shè)備等)的能力。例如,在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行基元組成的計(jì)算機(jī)系統(tǒng)在Π線程中遍歷(walk)程序的用戶接口層次結(jié)構(gòu)。所述用戶接口層次結(jié)構(gòu)描述程序的用戶接口元素。根據(jù)遍歷用戶接口層次結(jié)構(gòu),UI線程直接生成表示Π層次結(jié)構(gòu)的至少一部分的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。所述Π線程將這些靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到單獨(dú)的組成線程,所述單獨(dú)的組成線程保留靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)以便在生成用戶接口的多個(gè)視頻幀期間重復(fù)使用。因此,所述組成線程分別重復(fù)使用從UI線程接收的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)以便呈現(xiàn)多個(gè)視頻幀中的每個(gè)視頻幀。這包括組成線程針對(duì)多個(gè)視頻幀中的每個(gè)視頻幀,根據(jù)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出GPU數(shù)據(jù)和GPU命令以及將所述數(shù)據(jù)和命令發(fā)送到GPU來(lái)呈現(xiàn)。提供此“發(fā)明內(nèi)容”以便以簡(jiǎn)化的形式引入將在下面的“具體實(shí)施方式
”中進(jìn)一步描述的概念選擇。此“發(fā)明內(nèi)容”并非旨在標(biāo)識(shí)所要求保護(hù)的主題的主要特征或本質(zhì)特征,也并非旨在用于幫助確定所要求保護(hù)的主題的范圍。本發(fā)明的其他特征和優(yōu)點(diǎn)將在下面的描述中說(shuō)明,并且通過(guò)描述,至少部分地理解,或者可以通過(guò)實(shí)踐本發(fā)明來(lái)理解。本發(fā)明的特征和優(yōu)點(diǎn)可以通過(guò)所附權(quán)利要求中具體指出的工具和組合來(lái)實(shí)現(xiàn)和獲得。通過(guò)下面的描述和所附權(quán)利要求,可以更全面地理解本發(fā)明的這些和其他特征,或者可以通過(guò)實(shí)踐本發(fā)明來(lái)理解本發(fā)明的這些和其他特征,如下文中說(shuō)明的那樣。
為了說(shuō)明可以獲取本發(fā)明的上述和其他優(yōu)點(diǎn)與特征的方式,將參考附圖中示出的本發(fā)明特定實(shí)施例呈現(xiàn)上面簡(jiǎn)單描述的本發(fā)明的更具體的描述。應(yīng)該理解,這些附圖僅描繪本發(fā)明的典型實(shí)施例,因此不能被視為限制本發(fā)明的范圍,將使用附圖通過(guò)更多特征和細(xì)節(jié)描述和闡述本發(fā)明,在所述附圖中。圖I示出使用用戶接口線程和組成線程呈現(xiàn)用戶接口的示例計(jì)算機(jī)體系結(jié)構(gòu)。圖2示出使用用戶接口線程中的基元組成呈現(xiàn)用戶接口的示例計(jì)算機(jī)體系結(jié)構(gòu)。圖3示出使用基元組成呈現(xiàn)程序的用戶接口的示例方法的流程圖。
具體實(shí)施例方式實(shí)施例可以包括用于在用戶接口(UI)線程中執(zhí)行基元組成的功能。通過(guò)在Π線程中組成諸如圖形處理單元(GPU)數(shù)據(jù)結(jié)構(gòu)之類的基元,用戶接口框架能夠減少負(fù)責(zé)處理動(dòng)畫、處理輸入和呈現(xiàn)幀的單獨(dú)的組成線程的工作負(fù)載。這樣轉(zhuǎn)而增強(qiáng)將用戶接口框架擴(kuò)展到具有相對(duì)有限資源的計(jì)算設(shè)備(例如移動(dòng)設(shè)備、平板計(jì)算機(jī)、嵌入式設(shè)備等)的能力。例如,在一個(gè)或多個(gè)實(shí)施例中,執(zhí)行基元組成的計(jì)算機(jī)系統(tǒng)在Π線程中遍歷程序的用戶接口層次結(jié)構(gòu)。所述用戶接口層次結(jié)構(gòu)描述程序的用戶接口的元素。根據(jù)遍歷用戶接口層次結(jié)構(gòu),UI線程直接生成表示UI層次結(jié)構(gòu)的至少一部分的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。所述Π線程將這些靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到單獨(dú)的組成線程,所述單獨(dú)的組成線程保留靜態(tài)GI3U數(shù)據(jù)結(jié)構(gòu)以便在生成用戶接口的多個(gè)視頻幀期間重復(fù)使用。因此,所述組成線程分別重復(fù)使用從Π線程接收的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)以便呈現(xiàn)多個(gè)視頻幀中的每個(gè)視頻幀。這包括組成線程針對(duì)多個(gè)視頻幀中的每個(gè)視頻幀,根據(jù)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出GPU數(shù)據(jù)和GPU命令以及將所述數(shù)據(jù)和命令發(fā)送到GPU來(lái)呈現(xiàn)。本發(fā)明的實(shí)施例可以包括或使用專用或通用計(jì)算機(jī),所述計(jì)算機(jī)包括諸如一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器之類的計(jì)算機(jī)硬件,如下面更詳細(xì)介紹的那樣。本發(fā)明范圍內(nèi)的實(shí)施例還包括物理和其他計(jì)算機(jī)可讀介質(zhì)以便傳送或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)。此類計(jì)算機(jī)可讀介質(zhì)可以是任何能夠由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問(wèn)的可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。因此,通過(guò)舉例而非限制,本發(fā)明的實(shí)施例可以包括至少兩種明顯不同的計(jì)算機(jī)可讀介質(zhì)計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)和傳輸介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)包括RAM、ROM、EEPROM、CD-ROM、DVD-ROM、固態(tài)驅(qū)動(dòng)器(“SSD”)(例如,基于RAM)、閃存、相變存儲(chǔ)器(“PCM”)、其他類型的存儲(chǔ)器、其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備,或任何其他可以用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置以及可以由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的介質(zhì)。將“網(wǎng)絡(luò)”定義為能夠在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)通過(guò)網(wǎng)絡(luò)或其他通信連接(硬連線、無(wú)線,或者硬連線或無(wú)線的組合)將信息傳輸或提供給計(jì)算機(jī)時(shí),計(jì)算機(jī)完全將連接視為傳輸介質(zhì)。傳輸介質(zhì)可以包括能夠用于承載計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置以及能夠由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述各項(xiàng)的組合也應(yīng)該包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。進(jìn)一步,當(dāng)?shù)竭_(dá)各種計(jì)算機(jī)系統(tǒng)組件時(shí),可以將計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置自動(dòng)從傳輸介質(zhì)傳送到計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)(或反之亦然)。例如,通過(guò)網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可以在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中緩存,然后最終傳送到計(jì)算機(jī)系統(tǒng)中的計(jì)算機(jī)系統(tǒng)RAM和/或低易失性計(jì)算機(jī) 存儲(chǔ)介質(zhì)(設(shè)備)。因此,應(yīng)該理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)可以包括在也(或甚至主要)使用傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。計(jì)算機(jī)可執(zhí)行指令例如包括指令和數(shù)據(jù),當(dāng)指令和數(shù)據(jù)在處理器上執(zhí)行時(shí),導(dǎo)致通用計(jì)算機(jī)、專用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備執(zhí)行某個(gè)功能或功能的組。所述計(jì)算機(jī)可執(zhí)行指令例如可以是二進(jìn)制文件、諸如匯編語(yǔ)言之類的中間格式指令,或甚至源代碼。盡管已經(jīng)采用特定于結(jié)構(gòu)特征和/或方法學(xué)行為的語(yǔ)言描述了主題,但要理解,在所附權(quán)利要求中定義的主題并不一定限于上面的所述特征或操作。相反,所述特征和操作作為實(shí)現(xiàn)權(quán)利要求的示例形式公開(kāi)。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)現(xiàn),這些環(huán)境具有許多類型的計(jì)算機(jī)系統(tǒng)配置,包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、“上網(wǎng)本”計(jì)算機(jī)、平板計(jì)算機(jī)、消息處理器、手持設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程的消費(fèi)電子、網(wǎng)絡(luò)PC、微型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、媒體設(shè)備、尋呼機(jī)、路由器、交換機(jī)等。本發(fā)明還可以在分布式系統(tǒng)環(huán)境中實(shí)現(xiàn),其中通過(guò)網(wǎng)絡(luò)(由硬連線數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路或通過(guò)硬連線和無(wú)線數(shù)據(jù)鏈路的組合)鏈接的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)二者執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。許多計(jì)算機(jī)系統(tǒng)包括針對(duì)圖形信息的處理和呈現(xiàn)進(jìn)行優(yōu)化的計(jì)算機(jī)硬件。例如,某些計(jì)算機(jī)系統(tǒng)包括一個(gè)或多個(gè)GPU,這些GPU針對(duì)圖形信息的處理和呈現(xiàn)進(jìn)行優(yōu)化,例如將變換和紋理應(yīng)用于多邊形以呈現(xiàn)場(chǎng)景。GPU通常包括并行處理體系結(jié)構(gòu),其可以同時(shí)處理大量與圖形相關(guān)的任務(wù)以在幀緩沖區(qū)中構(gòu)建場(chǎng)景,從而在顯示設(shè)備上顯示。為了做出高質(zhì)量圖形,許多計(jì)算機(jī)系統(tǒng)至少在可用存儲(chǔ)器數(shù)量、一般處理能力和GPU復(fù)雜性方面已經(jīng)變得越來(lái)越強(qiáng)大和復(fù)雜。利用GPU,某些計(jì)算機(jī)系統(tǒng)現(xiàn)在能夠?qū)崟r(shí)制作擬真和高幀速率的流暢圖形。開(kāi)發(fā)人員可以在開(kāi)發(fā)用于操作系統(tǒng)級(jí)應(yīng)用以及用戶級(jí)應(yīng)用的用戶接口時(shí)利用GPU的效能。一種呈現(xiàn)用戶接口的方法是提供在邏輯上將應(yīng)用功能和圖形呈現(xiàn)功能分離的用戶接口框架。例如,第一任務(wù)可以處理可能無(wú)界的應(yīng)用功能(例如,用戶接口布局任務(wù)、執(zhí)行應(yīng)用代碼、處理網(wǎng)絡(luò)通信、執(zhí)行復(fù)雜計(jì)算),而第二任務(wù)可以執(zhí)行大致有界的呈現(xiàn)功能(例如,執(zhí)行呈現(xiàn)管道以及另外準(zhǔn)備GPU數(shù)據(jù)結(jié)構(gòu)以便由一個(gè)或多個(gè)GPU處理)。
例如,圖I示出了通過(guò)使用Π線程和組成線程便利用戶接口呈現(xiàn)的示例計(jì)算機(jī)體系結(jié)構(gòu)100。參考圖1,計(jì)算機(jī)體系結(jié)構(gòu)100包括UI線程102、組成線程112和GPU線程122。盡管在此描述為“線程”,但將理解,Π線程102、組成線程112和/或GPU線程122可以包括任務(wù)、過(guò)程,或任何其他編程或邏輯分離單元。UI (或應(yīng)用)線程102被配置為針對(duì)使用UI線程102的程序104 (例如,操作系統(tǒng)級(jí)程序或終端用戶應(yīng)用程序)的用戶接口維護(hù)用戶接口層次結(jié)構(gòu)106。UI線程102本身可以生成用戶接口層次結(jié)構(gòu)106,或它可以從其他地方接收用戶接口層次結(jié)構(gòu)106的全部或部分。例如,可以根據(jù)生成用戶接口的編程代碼的執(zhí)行和/或根據(jù)表示用戶接口的標(biāo)記(例如,可擴(kuò)展應(yīng)用標(biāo)記語(yǔ)言(XAML))的解析來(lái)生成接口層次結(jié)構(gòu)106。用戶接口層次結(jié)構(gòu)106可以被配置為使用任何適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)(例如,樹(shù)形結(jié)構(gòu))表示用戶接口的元素,例如Π控件(例如,按鈕、列表框、網(wǎng)格、文本框等)、圖像、矢量圖形、視頻、隨時(shí)間推移修改用戶接口的動(dòng)畫等。UI線程102可以被進(jìn)一步配置為通過(guò)修改用戶接口層次結(jié)構(gòu)106以及通過(guò)響應(yīng)于用戶接口事件(例如,與用戶接口交互的用戶輸入,例如觸摸輸入(即,觸摸手勢(shì)) 、指點(diǎn)設(shè)備輸入和/或鍵盤輸入;接收數(shù)據(jù);從其他過(guò)程接收信號(hào);等等)而執(zhí)行應(yīng)用代碼,來(lái)實(shí)現(xiàn)與用戶接口的交互。UI線程102還被配置為偶爾遍歷用戶接口層次結(jié)構(gòu)106以生成針對(duì)用戶接口的組成信息(例如,在每次執(zhí)行Π線程102期間,根據(jù)定義的間隔,響應(yīng)于用戶接口層次結(jié)構(gòu)106中的改變)。例如,在Π線程102遍歷用戶接口層次結(jié)構(gòu)106期間或響應(yīng)于Π線程102遍歷用戶接口層次結(jié)構(gòu)106,UI線程102可以將以層次結(jié)構(gòu)表示的用戶接口元素轉(zhuǎn)換為一個(gè)或多個(gè)描述用戶接口元素的組成結(jié)構(gòu)108。在某些實(shí)施例中,組成結(jié)構(gòu)108可以將場(chǎng)景的用戶接口元素描述為多個(gè)多邊形。因此,組成結(jié)構(gòu)108可以包括描述多邊形頂點(diǎn)、紋理、顏色、梯度、照明信息、應(yīng)用于多邊形的屏蔽,和/或裁剪信息等的信息。根據(jù)組成結(jié)構(gòu)108,Π線程102可以被配置為偶爾將組成數(shù)據(jù)110發(fā)送到組成線程112以便由組成線程112進(jìn)一步處理,從而準(zhǔn)備在GPU線程122中由GPU 124呈現(xiàn)。組成數(shù)據(jù)110可以包括用于用戶接口層次結(jié)構(gòu)106的初始組成結(jié)構(gòu)108和/或由用戶接口層次結(jié)構(gòu)106中的改變引起的組成結(jié)構(gòu)108的更新。組成線程112被配置為接收組成數(shù)據(jù)110,并將組成數(shù)據(jù)110“組成”到可以由GPU124處理/呈現(xiàn)的GPU基元(B卩,示出的GPU數(shù)據(jù)結(jié)構(gòu)118)。如圖所示,組成線程112被配置為維護(hù)組成層次結(jié)構(gòu)114,組成層次結(jié)構(gòu)114以組成結(jié)構(gòu)108中的組成數(shù)據(jù)110的形式幾乎完全鏡像用戶接口層次結(jié)構(gòu)106。每次執(zhí)行組成線程112線程時(shí),它被配置為遍歷組成層次結(jié)構(gòu)114并在遍歷時(shí)收集組成數(shù)據(jù),并將收集的組成數(shù)據(jù)饋送給呈現(xiàn)管道116。呈現(xiàn)管道116轉(zhuǎn)而將收集的組成數(shù)據(jù)組成到GPU數(shù)據(jù)結(jié)構(gòu)118 (例如,頂點(diǎn)緩沖區(qū)、索引緩沖區(qū)、紋理、著色器等)。根據(jù)新生成的GPU數(shù)據(jù)結(jié)構(gòu)118,組成線程112被配置為將GPU數(shù)據(jù)和命令120發(fā)送到GPU線程112,GPU線程112轉(zhuǎn)而在GPU 124中呈現(xiàn)由GPU數(shù)據(jù)結(jié)構(gòu)118表示的用戶接口場(chǎng)景并填充幀緩沖區(qū)126。呈現(xiàn)管道116可以包括一系列生成GPU數(shù)據(jù)結(jié)構(gòu)118的可編程和/或不可編程組件。例如,呈現(xiàn)管道116可以包括著色器(例如,頂點(diǎn)、像素、幾何)、光柵器、混合器等的組合。呈現(xiàn)管道可以從組成層次結(jié)構(gòu)114接收組成數(shù)據(jù)(例如,頂點(diǎn)數(shù)據(jù))作為輸入,并使組成數(shù)據(jù)經(jīng)過(guò)每個(gè)管道組件以生成GPU數(shù)據(jù)結(jié)構(gòu)118。轉(zhuǎn)換可以包括將一個(gè)或多個(gè)變換(例如,模型、相機(jī)、透視)應(yīng)用于頂點(diǎn)數(shù)據(jù)以便在2D或3D空間中定位一個(gè)或多個(gè)多邊形;將紋理、顏色、梯度等映射到頂點(diǎn)數(shù)據(jù);以及任何其他適當(dāng)?shù)娜蝿?wù)。正因如此,每次執(zhí)行組成線程112時(shí),它被配置為生成表示單個(gè)視頻幀的場(chǎng)景的新GPU數(shù)據(jù)結(jié)構(gòu),并將此數(shù)據(jù)傳遞到GPU線程122以呈現(xiàn)幀。因此,組成線程112通常以等于用于顯示用戶接口所需輸出幀速率的頻率(例如,60fps)執(zhí)行。組成線程112的工作負(fù)載相對(duì)有界和可預(yù)測(cè),因此假設(shè)具有足夠的計(jì)算資源,它通??梢詫?shí)現(xiàn)所需的幀速率。另一方面,UI線程102可以不太頻繁地執(zhí)行和/或處理更多無(wú)界任務(wù)。計(jì)算機(jī)體系結(jié)構(gòu)100在相對(duì)強(qiáng)大的計(jì)算系統(tǒng)上很好地呈現(xiàn)復(fù)雜的用戶接口。然而,組成線程112在每次執(zhí)行期間做了大量工作,包括每次運(yùn)行時(shí)遍歷組成層次結(jié)構(gòu)114以及通過(guò)執(zhí)行呈現(xiàn)管道116生成新的GPU數(shù)據(jù)結(jié)構(gòu)118。此外,組成線程112在其組成層次結(jié)構(gòu)114中存儲(chǔ)大量大部分上重復(fù)的數(shù)據(jù),當(dāng)呈現(xiàn)具有大量元素的復(fù)雜用戶接口時(shí)或者當(dāng)采用任何形式的緩存時(shí),這種情況會(huì)加重。在具有更有限的資源(例如,存儲(chǔ)器和處理資源)的計(jì)算機(jī)系統(tǒng)(例如,便攜式設(shè)備)的上下文中,組成線程112可能無(wú)法足夠快地執(zhí)行此處理 以便按照所需的幀速率執(zhí)行,從而導(dǎo)致呈現(xiàn)的用戶接口質(zhì)量下降,或它可能沒(méi)有足夠的存儲(chǔ)器資源來(lái)維護(hù)組成層次結(jié)構(gòu)114。同樣,圖2示出了在Π線程中采用基元組成以呈現(xiàn)用戶接口的備選計(jì)算機(jī)體系結(jié)構(gòu)200的實(shí)施例。參考圖2,計(jì)算機(jī)體系結(jié)構(gòu)200包括UI線程202、組成線程216和GPU線程226。類似于圖I的計(jì)算機(jī)體系結(jié)構(gòu)100,這些“線程”可以包括任務(wù)、過(guò)程,或任何其他編程或邏輯分離單元。類似于圖I的UI線程102,UI線程202被配置來(lái)為使用UI線程202的程序204(例如,操作系統(tǒng)應(yīng)用或終端用戶應(yīng)用)的用戶接口維護(hù)用戶接口層次結(jié)構(gòu)206。用戶接口層次結(jié)構(gòu)206可以表示用戶接口的元素,例如UI控件(例如,按鈕、列表框、網(wǎng)格、文本框等)、圖像、矢量圖形、視頻、隨時(shí)間推移修改用戶接口元素的動(dòng)畫等,并且可以由Π線程202生成(例如,通過(guò)解析XAML)或從其他地方接收。UI線程202還可以被配置為通過(guò)修改用戶接口層次結(jié)構(gòu)206以及通過(guò)響應(yīng)于用戶接口事件(例如,用戶輸入事件、網(wǎng)絡(luò)事件、數(shù)據(jù)處理事件等)而執(zhí)行程序204代碼,來(lái)實(shí)現(xiàn)與用戶接口的交互。但是,與圖I中的Π線程102不同,Π線程202被配置為作為遍歷用戶接口層次結(jié)構(gòu)206的結(jié)果,直接生成靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208。也就是說(shuō),Π線程202 (而非組成線程216)被配置為生成或組成可以由GPU 228處理/呈現(xiàn)的GPU基元(例如,頂點(diǎn)緩沖區(qū)、索引緩沖區(qū)、紋理、著色器等)。與圖I中的組成線程112所生成的GPU數(shù)據(jù)結(jié)構(gòu)118 (它們?cè)诿看螆?zhí)行線程時(shí)重新生成)不同,UI線程202被配置為生成可用于呈現(xiàn)多個(gè)稍有修改或沒(méi)有任何修改的幀的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208。因此,在計(jì)算機(jī)體系結(jié)構(gòu)200的上下文中,“靜態(tài)”表示至少某些GPU數(shù)據(jù)結(jié)構(gòu)208在呈現(xiàn)多個(gè)幀時(shí)重復(fù)使用,而非針對(duì)每個(gè)幀重新生成。在UI線程102中生成“靜態(tài)”GPU結(jié)構(gòu)導(dǎo)致所生成的GPU數(shù)據(jù)量遠(yuǎn)少于圖I的組成線程112生成的GPU數(shù)據(jù)量。UI線程202可以被配置為在生成靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208時(shí)采用一種或多種優(yōu)化。例如,Π線程202可以被配置為生成與在不同幀之間基本保持不變的靜態(tài)用戶接口元素對(duì)應(yīng)的GPU數(shù)據(jù)結(jié)構(gòu)。因此,當(dāng)對(duì)應(yīng)的用戶接口元素改變時(shí),Π線程202只能生成新的靜態(tài)GI3U數(shù)據(jù)結(jié)構(gòu)208。此外,Π線程202可以被配置為限制可使用的用戶接口元素的類型,并且可以被配置為使用被優(yōu)化以生成這些接口特定類型元素的GPU數(shù)據(jù)結(jié)構(gòu)的功能。在一個(gè)或多個(gè)實(shí)施例中,例如,程序204的大量用戶接口元素可以基于特定類型的用戶接口基元(例如,圓、矩形、弧),并且Π線程202可以包括將這些用戶接口基元轉(zhuǎn)換為GPU基元的優(yōu)化功能。通過(guò)這樣配置,Π線程202可以在很大程度上,甚至完全不需要使用通用呈現(xiàn)管道(例如,計(jì)算機(jī)體系結(jié)構(gòu)100中的呈現(xiàn)管道116)。如圖所示,Π線程202被配置為將作為GPU數(shù)據(jù)214的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208傳遞到組成線程216,組成線程216轉(zhuǎn)而被配置為維護(hù)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220。如介紹的那樣,組成線程216被配置為保留至少某些靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220以用于生成多個(gè)幀。因此,如果用戶接口在不同幀之間保持相對(duì)靜態(tài)(在許多用戶接口場(chǎng)景中相對(duì)普遍地發(fā)生),則組成線程216只能利用GPU 228 (例如,利用GPU數(shù)據(jù)和命令224)指令GPU線程226呈現(xiàn)靜態(tài)GI3U數(shù)據(jù)結(jié)構(gòu)220,并且可以針對(duì)使用同一靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220的多個(gè)幀這樣做。UI線程202還可以被配置為根據(jù)用戶接口層次結(jié)構(gòu)206生成組成結(jié)構(gòu)210。 如果生成,則這些組成結(jié)構(gòu)210可以描述應(yīng)用于由靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208表示的用戶接口元素的動(dòng)畫。因此,Π線程202還可以被配置為將作為組成數(shù)據(jù)212的任何生成的組成結(jié)構(gòu)210傳遞到組成線程216,并且組成線程216可以被配置為維護(hù)組成層次結(jié)構(gòu)218。但是,計(jì)算機(jī)體系結(jié)構(gòu)200中的組成層次結(jié)構(gòu)218可以潛在維護(hù)的組成信息量遠(yuǎn)少于計(jì)算機(jī)體系結(jié)構(gòu)100的組成層次結(jié)構(gòu)114維護(hù)的組成信息量。例如,組成層次結(jié)構(gòu)218只能維護(hù)與應(yīng)用于靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220的動(dòng)畫有關(guān)的組成信息。組成線程216然后可以被配置為使用組成層次結(jié)構(gòu)218中的動(dòng)畫信息修改靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220的多個(gè)部分,以使得(與生成新結(jié)構(gòu)相反)當(dāng)由GPU 228呈現(xiàn)時(shí),任何對(duì)應(yīng)的用戶接口元素在不同幀之間以動(dòng)畫方式呈現(xiàn)。此外,組成線程216還可以被配置為接收輸入222,例如用戶輸入。輸入222可以包括任意形式的輸入,例如,觸摸輸入(手勢(shì))、指點(diǎn)設(shè)備輸入、網(wǎng)絡(luò)輸入、相機(jī)輸入、傳感器設(shè)備輸入(例如,羅盤、GPS、加速計(jì)、回轉(zhuǎn)儀、溫度計(jì)、光傳感器)、麥克風(fēng)輸入等。當(dāng)輸入222將導(dǎo)致靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220表示的任何用戶接口元素的動(dòng)畫時(shí),組成線程216可以被配置為自己?jiǎn)?dòng)用戶接口元素的動(dòng)畫。因此,組成線程216可以獨(dú)立于UI線程202中的組成數(shù)據(jù)創(chuàng)建和/或修改組成層次結(jié)構(gòu)218中的動(dòng)畫信息,并且可以使靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220表示的用戶接口元素以動(dòng)畫方式呈現(xiàn)。例如,組成線程216可以被配置為根據(jù)輸入修改靜態(tài)GI3U數(shù)據(jù)結(jié)構(gòu)的多個(gè)部分(例如,通過(guò)修改GPU數(shù)據(jù),這樣將更改對(duì)應(yīng)用戶接口元素的位置、縮放、旋轉(zhuǎn)、透明度、裁剪、顏色、透視、不透明度、模型變換和/或方向),以便當(dāng)由GPU 228呈現(xiàn)時(shí),對(duì)應(yīng)的用戶接口元素在不同幀之間以動(dòng)畫方式呈現(xiàn)。計(jì)算機(jī)體系結(jié)構(gòu)200的配置因此通過(guò)消除全部或部分呈現(xiàn)管道,以及通過(guò)移除組合層次結(jié)構(gòu)218中的多數(shù)(甚至全部)來(lái)簡(jiǎn)化組成線程216。因此,組成線程216可以在每次執(zhí)行期間占用少得多的存儲(chǔ)器和處理資源。具體而言,組成線程216不再存儲(chǔ)和遍歷大部分重復(fù)的組成層次結(jié)構(gòu)218,并且組成線程216不再每次執(zhí)行時(shí)都生成新的GPU數(shù)據(jù)結(jié)構(gòu)。因此,即使在具有有限資源的計(jì)算機(jī)系統(tǒng)中,組成線程216仍可以頻繁執(zhí)行(例如,以60fps的速度)以將每個(gè)幀的GPU數(shù)據(jù)和命令224饋送給GPU線程226來(lái)呈現(xiàn)。在多數(shù)簡(jiǎn)單的執(zhí)行場(chǎng)景中(例如,用戶接口在不同幀之間保持不變的場(chǎng)景),組成線程可以直接利用靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)240來(lái)發(fā)送GPU數(shù)據(jù)和命令。換言之,組成線程可以為GPU線程226提供GPU數(shù)據(jù)并“命令開(kāi)始”,在其中已接收用戶輸入或者其中組成線程216需要處理動(dòng)畫數(shù)據(jù)的更復(fù)雜的執(zhí)行場(chǎng)景中,組成線程216可以處理輸入和/或修改組成層次結(jié)構(gòu)218或靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220中的一項(xiàng)或多項(xiàng)來(lái)以動(dòng)畫方式呈現(xiàn)用戶接口元素。在任何一種情況下,通過(guò)處理一小組有界任務(wù),組成線程216可以確保即使資源非常有限,用戶接口也能以一貫的高幀速率繪制,并且用戶接口能對(duì)輸入做出響應(yīng)。另一方面,Π線程202執(zhí)行的頻率可以比組成線程216的執(zhí)行頻率低得多,以及/或者可以在執(zhí)行來(lái)處理無(wú)界任務(wù)(例如,用戶接口布局任務(wù)、網(wǎng)絡(luò)任務(wù)、數(shù)據(jù)綁定任務(wù)、光柵化、棋盤形布置或其他復(fù)雜計(jì)算)時(shí)耗用額外的時(shí)間。Π線程202可以根據(jù)需要更新靜態(tài)GPU結(jié)構(gòu)208,但由于靜態(tài)GPU結(jié)構(gòu)208對(duì)應(yīng)于主要為靜態(tài)的用戶接口元素,因此,這些更新在許多用戶接口場(chǎng)景中發(fā)生的頻率相對(duì)較低。所以,生成GPU基元的成本和將數(shù)據(jù)傳送到組成線程216的成本二者與計(jì)算機(jī)體系結(jié)構(gòu)100相比顯著降低。因此,總而言之,計(jì)算機(jī)體系結(jié)構(gòu)200可以在生成最少量的GPU數(shù)據(jù)的同時(shí)呈現(xiàn)用戶接口并且針對(duì)具有有限資源的設(shè)備進(jìn)行優(yōu)化。圖3示出使用基元組成呈現(xiàn)程序的用戶接口的示例方法300的流程圖。將參考計(jì)算機(jī)體系結(jié)構(gòu)200的組件和數(shù)據(jù)來(lái)描述方法300。·方法300包括在用戶接口線程中遍歷程序的用戶接口層次結(jié)構(gòu)的行為(行為302)。行為302可以包括Π線程遍歷程序的用戶接口層次結(jié)構(gòu)的行為,所述用戶接口層次結(jié)構(gòu)描述程序的用戶接口的一個(gè)或多個(gè)用戶接口元素。例如,承載程序204或由程序204使用的Π線程202可以遍歷用戶接口層次結(jié)構(gòu)206。用戶接口層次結(jié)構(gòu)206可以將信息存儲(chǔ)在表示程序204的用戶接口的用戶接口元素的數(shù)據(jù)結(jié)構(gòu)(例如,樹(shù)形結(jié)構(gòu))中。方法300還包括根據(jù)用戶接口線程遍歷用戶接口層次結(jié)構(gòu),直接在用戶接口線程中生成一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的行為(行為304)。行為304可以根據(jù)遍歷用戶接口層次結(jié)構(gòu)的Π線程,包括Π線程直接生成表示用戶接口層次結(jié)構(gòu)的至少一部分的一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的行為。例如,UI線程202可以直接生成靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208。這些GPU結(jié)構(gòu)在某些實(shí)例中可以對(duì)應(yīng)于在不同幀之間保持基本靜態(tài)的用戶接口元素。即使當(dāng)某些用戶接口元素以動(dòng)畫方式呈現(xiàn),它們?nèi)栽陟o態(tài)GPU結(jié)構(gòu)208中表示,因?yàn)榻M成線程216可以在稍后以動(dòng)畫方式呈現(xiàn)它們。作為GPU數(shù)據(jù),靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208例如可以包括一個(gè)或多個(gè)頂點(diǎn)緩沖區(qū)、索引緩沖區(qū)、紋理、著色器等。此外,方法300還包括將一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到組成線程的行為(行為306)。行為306可以包括UI線程將一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到組成線程的行為,所述組成線程保留一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)以便在生成對(duì)應(yīng)于用戶接口的多個(gè)視頻幀期間重復(fù)使用。例如,Π線程202可以將等同于靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208或通過(guò)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)208導(dǎo)出的GPU數(shù)據(jù)214傳遞到組成線程216。組成線程216轉(zhuǎn)而可以存儲(chǔ)接收的GPU數(shù)據(jù)214作為靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220,并且可以跨組成線程216的多次執(zhí)行保留此信息以利用同一靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220生成多個(gè)視頻幀。依照這些,方法300還包括在組成線程中根據(jù)一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)生成多個(gè)視頻幀的行為(行為308)。行為308可以包括組成線程生成對(duì)應(yīng)于用戶接口的多個(gè)視頻幀的行為,其中包括組成線程針對(duì)多個(gè)視頻幀中的每個(gè)視頻幀,將根據(jù)一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出的GPU數(shù)據(jù)和GPU命令發(fā)送到的GPU,以便組成線程在呈現(xiàn)對(duì)應(yīng)于用戶接口的多個(gè)視頻幀時(shí),重復(fù)使用從UI線程接收的一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。例如,根據(jù)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220,組成線程216可以將GPU數(shù)據(jù)和命令224發(fā)送到GPU 228來(lái)呈現(xiàn)。在一個(gè)或多個(gè)實(shí)施例中,組成線程216可以在組成線程216的每次執(zhí)行時(shí),針對(duì)一個(gè)或多個(gè)視頻幀發(fā)送GPU數(shù)據(jù)和命令224,同時(shí)跨多次執(zhí)行保留GPU數(shù)據(jù)結(jié)構(gòu)220。因此,組成線程216可以在生成多個(gè)視頻幀時(shí)使用同一靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220。盡管未示出,但是方法300還可以包括UI線程202生成對(duì)應(yīng)于用戶接口的動(dòng)畫的組成結(jié)構(gòu)210,以及將組成數(shù)據(jù)212傳遞到組成線程216的行為。因此,組成線程216可以存儲(chǔ)組成層次結(jié)構(gòu)218,組成層次結(jié)構(gòu)218可以包括組成數(shù)據(jù)212,組成數(shù)據(jù)212描述用戶接口的一個(gè)或多個(gè)動(dòng)畫。因此,在將GPU數(shù)據(jù)和命令224發(fā)送到GPU 228之前,組成線程216可以修改靜態(tài)GI3U數(shù)據(jù)結(jié)構(gòu)220以導(dǎo)致對(duì)應(yīng)的用戶接口元素在呈現(xiàn)時(shí)采取動(dòng)畫方式。例如,組成線程216可以修改GPU數(shù)據(jù)結(jié)構(gòu)220中的信息,這樣將導(dǎo)致改變對(duì)應(yīng)用戶接口元素的位置、縮放、旋轉(zhuǎn)、透明度、裁剪、顏色、透視、不透明度、模型變換或方向中的一項(xiàng)或多項(xiàng)。同樣,盡管組成線程216可以響應(yīng)于從UI線程202接收到組成數(shù)據(jù)212,而修改靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)220,但是組成線程216也可以響應(yīng)于用戶輸入222而自己?jiǎn)?dòng)動(dòng)畫。 在執(zhí)行方法300時(shí),Π線程202可以執(zhí)行某些無(wú)界任務(wù)(例如,用戶接口布局任務(wù)、網(wǎng)絡(luò)任務(wù)、數(shù)據(jù)綁定任務(wù)、光柵化、棋盤形布置或其他復(fù)雜計(jì)算),但是組成線程216只能執(zhí)行有界任務(wù)。因此,UI線程202可以根據(jù)第一計(jì)劃操作,與組成線程216操作時(shí)所用的第二計(jì)劃相比,所述第一計(jì)劃使用頻率相對(duì)較低,以及/或者UI線程202的執(zhí)行時(shí)間有時(shí)可能相對(duì)較長(zhǎng)。因此,組成線程216可以確保用戶接口以高幀速率持續(xù)呈現(xiàn),并且確保用戶接口能及時(shí)對(duì)用戶輸入做出響應(yīng)。相應(yīng)地,在此描述的實(shí)施例的適用范圍擴(kuò)及用于在用戶接口線程中執(zhí)行基元組成,從而增強(qiáng)將用戶接口框架擴(kuò)展到具有有限資源的計(jì)算設(shè)備的能力的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。通過(guò)直接在Π線程中生成可用于生成多個(gè)視頻幀的靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu),組成線程中的工作負(fù)載被降低了,從而使其能夠可靠地執(zhí)行高幀速率。在不偏離本發(fā)明的精神或本質(zhì)特征的情況下,可以通過(guò)其他具體形式來(lái)實(shí)現(xiàn)本發(fā)明。所描述的實(shí)施例在各方面都僅被視為示例而非限制。因此,本發(fā)明的范圍由所附權(quán)利要求而非上述描述來(lái)指出。處于權(quán)利要求的等同物的含義和范圍內(nèi)的所有改變也將包含在所述權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.在包括一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)(200)中,該計(jì)算系統(tǒng)還包括圖形處理單元(GPU) (228),一種使用基元組成來(lái)呈現(xiàn)程序(204)的用戶接口的方法包括 用戶接口(UI)線程(202)遍歷所述程序的用戶接口層次結(jié)構(gòu)(206)的行為,所述用戶接口層次結(jié)構(gòu)描述所述程序的用戶接口的一個(gè)或多個(gè)用戶接口元素; 根據(jù)所述Π線程遍歷所述用戶接口層次結(jié)構(gòu),所述Π線程直接生成表示所述用戶接口層次結(jié)構(gòu)的至少一部分的一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(208)的行為; 所述UI線程將所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到組成線程(216)的行為,所述組成線程保留所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(220)以便在生成對(duì)應(yīng)于所述用戶接口的多個(gè)視頻幀期間重復(fù)使用;以及 所述組成線程生成對(duì)應(yīng)于所述用戶接口的所述多個(gè)視頻幀的行為,包括所述組成線程針對(duì)所述多個(gè)視頻幀中的每個(gè)視頻幀,將根據(jù)所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出的GPU數(shù)據(jù)和GPU命令(224)發(fā)送到所述GPU,以使得在呈現(xiàn)對(duì)應(yīng)于所述用戶接口的所述多個(gè)視頻幀時(shí),所述組成線程重復(fù)使用從所述UI線程接收的所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。
2.如權(quán)利要求I中所述的方法,進(jìn)一步包括 所述Π線程將與所述用戶接口的一個(gè)或多個(gè)動(dòng)畫相關(guān)的用戶接口信息傳遞到所述組成線程的行為; 所述組成線程維護(hù)描述所述用戶接口的所述一個(gè)或多個(gè)動(dòng)畫的一個(gè)或多個(gè)組成數(shù)據(jù)結(jié)構(gòu)的行為;以及 在將所述GPU數(shù)據(jù)和所述GPU命令發(fā)送到所述GPU之前,所述組成線程根據(jù)所述一個(gè)或多個(gè)動(dòng)畫修改所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu),從而導(dǎo)致所述GPU以不同方式處理所述至少一個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的一部分以便將所述一個(gè)或多個(gè)動(dòng)畫應(yīng)用于至少一個(gè)對(duì)應(yīng)的用戶接口元素的行為。
3.如權(quán)利要求2中所述的方法,其中導(dǎo)致所述GPU以不同方式處理所述至少一個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的一部分包括導(dǎo)致所述GPU修改所述對(duì)應(yīng)的用戶接口元素的一個(gè)或多個(gè)屬性,包括修改所述對(duì)應(yīng)用戶接口元素的位置、縮放、旋轉(zhuǎn)、透明度、裁剪、顏色、透視、不透明度、模型變換或方向中的一項(xiàng)或多項(xiàng)。
4.如權(quán)利要求I中所述的方法,進(jìn)一步包括 所述組成線程接收指示已在所述用戶接口中接收輸入的信息的行為;以及 作為響應(yīng),所述組成線程直接修改所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的行為。
5.如權(quán)利要求4中所述的方法,其中所述組成線程直接修改所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)中的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的行為包括所述組成線程直接修改所述至少一個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)以便向受所述輸入影響的對(duì)應(yīng)的用戶接口元素發(fā)起動(dòng)畫的行為。
6.如權(quán)利要求I中所述的方法,其中所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)對(duì)應(yīng)于所述用戶接口中在不同幀之間基本保持不變的一個(gè)或多個(gè)靜態(tài)用戶接口元素。
7.如權(quán)利要求I中所述的方法,其中直接由所述Π線程生成的所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)包括頂點(diǎn)緩沖區(qū)、索引緩沖區(qū)、紋理或著色器中的一項(xiàng)或多項(xiàng)。
8.如權(quán)利要求I中所述的方法,其中所述Π線程運(yùn)行以便根據(jù)第一計(jì)劃修改和/或生成所述一個(gè)或多個(gè)靜態(tài)GPU結(jié)構(gòu),并且其中所述組成線程運(yùn)行以便根據(jù)不同于所述第一計(jì)劃的第二計(jì)劃修改所述一個(gè)或多個(gè)靜態(tài)GPU結(jié)構(gòu)和/或?qū)⑺鲆粋€(gè)或多個(gè)靜態(tài)GPU結(jié)構(gòu)提交給所述GPU。
9.如權(quán)利要求8中所述的方法,其中所述第二計(jì)劃導(dǎo)致所述組成線程運(yùn)行得比所述第一計(jì)劃導(dǎo)致所述UI線程運(yùn)行更頻繁。
10.一種在包括圖形處理單元(GPU) (228)的計(jì)算機(jī)系統(tǒng)(200)中使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)一種在用戶接口(UI)線程中使用基元組成呈現(xiàn)程序(204)的用戶接口的方法,所述計(jì)算機(jī)程序產(chǎn)品包括一個(gè)或多個(gè)具有存儲(chǔ)在其上的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)存儲(chǔ)介質(zhì),當(dāng)所述計(jì)算機(jī)可執(zhí)行指令在處理器上執(zhí)行時(shí),導(dǎo)致所述計(jì)算機(jī)系統(tǒng)執(zhí)行所述方法,該方法包括以下各項(xiàng) 利用Π線程(202)遍歷所述程序的用戶接口層次結(jié)構(gòu)(206),所述用戶接口層次結(jié)構(gòu)描述所述程序的用戶接口的一個(gè)或多個(gè)用戶接口元素; 利用所述Π線程直接生成表示所述用戶接口層次結(jié)構(gòu)的至少一部分的一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(208); 將所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)從所述Π線程傳遞到組成線程(216),所述組成線程保留一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(220)以便在生成對(duì)應(yīng)于所述用戶接口的多個(gè)視頻幀期間重復(fù)使用;以及 生成對(duì)應(yīng)于所述用戶接口的所述多個(gè)視頻幀,包括所述組成線程將根據(jù)所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出的GPU數(shù)據(jù)和GPU命令(224)發(fā)送到所述GPU以呈現(xiàn)所述多個(gè)視頻幀中的每個(gè)視頻幀,以使得在針對(duì)所述多個(gè)視頻幀發(fā)送GPU數(shù)據(jù)和GPU命令時(shí),所述組成線程重復(fù)使用所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。
11.如權(quán)利要求10中所述的計(jì)算機(jī)程序產(chǎn)品,進(jìn)一步包括計(jì)算機(jī)可執(zhí)行指令,當(dāng)所述計(jì)算機(jī)可執(zhí)行指令在所述處理器上執(zhí)行時(shí),導(dǎo)致所述組成線程 維護(hù)與所述用戶接口的用戶接口元素的一個(gè)或多個(gè)動(dòng)畫相關(guān)的一個(gè)或多個(gè)組成數(shù)據(jù)結(jié)構(gòu);以及 在將所述GPU數(shù)據(jù)和所述GPU命令發(fā)送到所述GPU之前,根據(jù)所述一個(gè)或多個(gè)動(dòng)畫修改所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的至少一個(gè)數(shù)據(jù)結(jié)構(gòu),從而導(dǎo)致所述GPU以不同方式處理所述至少一個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)的一部分以便將所述一個(gè)或多個(gè)動(dòng)畫應(yīng)用于至少一個(gè)對(duì)應(yīng)的用戶接口元素。
12.如權(quán)利要求11中所述的計(jì)算機(jī)程序產(chǎn)品,其中所述組成線程根據(jù)從所述Π線程傳遞的組成信息維護(hù)所述一個(gè)或多個(gè)組成數(shù)據(jù)結(jié)構(gòu)。
13.如權(quán)利要求11中所述的計(jì)算機(jī)程序產(chǎn)品,其中所述組成線程根據(jù)在所述組成線程中接收的用戶輸入維護(hù)所述一個(gè)或多個(gè)組成數(shù)據(jù)結(jié)構(gòu)。
14.如權(quán)利要求13中所述的計(jì)算機(jī)程序產(chǎn)品,其中所述組成線程響應(yīng)于在所述組成線程中接收的所述用戶輸入而啟動(dòng)所述一個(gè)或多個(gè)動(dòng)畫。
15.一種計(jì)算機(jī)系統(tǒng)(200),包括 一個(gè)或多個(gè)處理器; 圖形處理單元(GPU) (228); 系統(tǒng)存儲(chǔ)器;以及一個(gè)或多個(gè)上面存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)存儲(chǔ)介質(zhì),當(dāng)執(zhí)行所述計(jì)算機(jī)可執(zhí)行指令時(shí)實(shí)現(xiàn)多個(gè)線程,包括 用戶接口線程(202),其被配置為 維護(hù)描述程序(204)的用戶接口的一個(gè)或多個(gè)用戶接口元素的用戶接口層次結(jié)構(gòu)(206), 遍歷所述用戶接口層次結(jié)構(gòu)以便直接生成表示所述用戶接口層次結(jié)構(gòu)的至少一部分的一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(208),包括對(duì)應(yīng)于當(dāng)呈現(xiàn)所述用戶接口時(shí)在不同幀之間保持不變的用戶接口元素的至少一個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu),以及 將所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到組成線程(216); 所述組成線程,其被配置為 保留一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)(220)以便跨所述組成線程的多次執(zhí)行而重復(fù)使用,以使得所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)被用于生成多個(gè)視頻幀,以及 對(duì)于所述組成線程的每次執(zhí)行,將用于至少一個(gè)視頻幀的GPU數(shù)據(jù)和GPU命令(224)發(fā)送到GPU線程(226)來(lái)呈現(xiàn),所述GPU數(shù)據(jù)和GPU命令根據(jù)所述一個(gè)或多個(gè)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)導(dǎo)出;以及 所述GPU線程,其被配置為從所述組成線程接收GPU數(shù)據(jù)和GPU命令,以及根據(jù)所述GPU數(shù)據(jù)和GPU命令在所述GPU中呈現(xiàn)圖形數(shù)據(jù)。
16.一個(gè)或多個(gè)存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)由計(jì)算設(shè)備執(zhí)行時(shí),導(dǎo)致所述計(jì)算設(shè)備執(zhí)行如權(quán)利要求1-9中任一項(xiàng)所述的方法。
全文摘要
在用戶接口線程中執(zhí)行基元組成,從而增強(qiáng)將用戶接口框架擴(kuò)展到具有有限資源的計(jì)算設(shè)備的能力。在一個(gè)或多個(gè)實(shí)施例中,用戶接口線程遍歷描述程序的用戶接口元素的用戶接口層次結(jié)構(gòu)并直接生成表示用戶接口層次結(jié)構(gòu)的至少一部分的靜態(tài)圖形處理單元(GPU)數(shù)據(jù)結(jié)構(gòu)。用戶接口線程將靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)傳遞到組成線程,所述組成線程在生成多個(gè)視頻幀期間使用這些靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu)。這包括組成線程根據(jù)靜態(tài)GPU數(shù)據(jù)結(jié)構(gòu),將針對(duì)多個(gè)視頻幀的GPU數(shù)據(jù)和GPU命令發(fā)送到GPU來(lái)呈現(xiàn)。
文檔編號(hào)G06T1/20GK102968755SQ20121032849
公開(kāi)日2013年3月13日 申請(qǐng)日期2012年9月7日 優(yōu)先權(quán)日2011年9月9日
發(fā)明者G.施奈德, B.約丹, A.米凱爾, B.J.克拉克, P.W.奧爾茨塔 申請(qǐng)人:微軟公司