国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      圖形處理的方法及裝置的制造方法

      文檔序號:10488733閱讀:480來源:國知局
      圖形處理的方法及裝置的制造方法
      【專利摘要】本發(fā)明公開了一種圖形處理的方法及裝置,涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,能夠解決圖形渲染效率較低的問題。本發(fā)明的方法主要包括:在接收到渲染命令后,獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài);根據(jù)狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài);當(dāng)遍歷到葉子節(jié)點時,從葉子節(jié)點中獲取對應(yīng)的程序?qū)ο螅绦驅(qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序;將程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理程序?qū)ο螅瑢崿F(xiàn)圖形渲染。本發(fā)明主要適用于基于OpenGL ES渲染圖形的場景中。
      【專利說明】
      圖形處理的方法及裝置
      技術(shù)領(lǐng)域
      [0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別是涉及一種圖形處理的方法及裝置。
      【背景技術(shù)】
      [0002]OpenGL ES(0pen Graphics Library for Embedded Systems,嵌入式系統(tǒng)開放圖形庫)是一個針對手機、PAD(Personal Digital Assistant,掌上電腦)、游戲主機等嵌入式設(shè)備而設(shè)計的圖形應(yīng)用程序接口。隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,OpenGL ES逐漸由固定渲染管線發(fā)展為可編程渲染管線,即從對頂點、片元進(jìn)行固定處理的方式發(fā)展為對頂點、片元進(jìn)行可編程處理的方式,從而提高了圖形處理的靈活性。
      [0003]在實際應(yīng)用中,雖然基于可編程渲染管線的顯卡逐漸代替基于固定渲染管線的顯卡廣泛應(yīng)用于設(shè)備中,但是仍然存在一些熱門應(yīng)用程序采用固定渲染管線的方式進(jìn)行圖形處理。因此,將這些采用固定渲染管線進(jìn)行圖形處理的應(yīng)用程序在基于可編程渲染管線的設(shè)備上運行時,會存在不兼容問題。
      [0004]為解決不兼容問題,現(xiàn)有的處理方式為:應(yīng)用程序(SPOpenGLES客戶端,以下簡稱客戶端)每次向OpenGL ES服務(wù)器(以下簡稱服務(wù)器)發(fā)送glDraw*命令時,會將當(dāng)前的客戶端狀態(tài)和服務(wù)器狀態(tài)發(fā)送給服務(wù)器,其中,該客戶端及服務(wù)器為固化在設(shè)備中的計算機程序。服務(wù)器接收到glDraw*命令后,先根據(jù)當(dāng)前的客戶端狀態(tài)和服務(wù)器狀態(tài)生成一顆AST(Abstract Syntax Tree,抽象語法樹)樹,然后根據(jù)該AST樹生成對應(yīng)的頂點程序和片元程序,并對生成的頂點程序和片元程序進(jìn)行編譯,最后將編譯獲得的程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線對客戶端中的對應(yīng)圖形進(jìn)行渲染。由此可知,上述方案通過根據(jù)客戶端狀態(tài)和服務(wù)器狀態(tài)生成AST樹,并基于該AST樹生成并編譯程序,獲得了可編程渲染管線所需的頂點程序和片元程序,從而解決了固定渲染管線與可編程渲染管線的不兼容問題。
      [0005]然而,通過AST樹生成并編譯程序的耗時一般較長,通常會超過10ms,由此導(dǎo)致圖形渲染的效率大大降低。

      【發(fā)明內(nèi)容】

      [0006]有鑒于此,本發(fā)明提供一種圖形處理的方法及裝置,能夠解決以下問題:在基于可編程渲染管線的設(shè)備上運行經(jīng)固定渲染管線渲染后的應(yīng)用程序時,由于每次渲染均需要生成AST樹,并通過AST樹生成并編譯程序,才可獲得可編程渲染管線所需的頂點程序和片元程序,所以整個過程耗時較長,從而導(dǎo)致圖形渲染的效率大大降低。
      [0007]依據(jù)本發(fā)明一個方面,提供了一種圖形處理的方法,所述方法包括:
      [0008]在接收到渲染命令后,獲取所述渲染命令中攜帶的狀態(tài)數(shù)據(jù),所述狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài);
      [0009]根據(jù)所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從所述決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài);
      [0010]當(dāng)遍歷到葉子節(jié)點時,從所述葉子節(jié)點中獲取對應(yīng)的程序?qū)ο螅龀绦驅(qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且所述程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序;
      [0011 ]將所述程序?qū)ο蟀l(fā)送給顯卡,以便所述顯卡基于可編程渲染管線處理所述程序?qū)ο螅瑢崿F(xiàn)圖形渲染。
      [0012]依據(jù)本發(fā)明另一個方面,提供了一種圖形處理的裝置,所述裝置包括:
      [0013]獲取單元,用于在接收到渲染命令后,獲取所述渲染命令中攜帶的狀態(tài)數(shù)據(jù),所述狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài);
      [0014]遍歷單元,用于根據(jù)所述獲取單元獲取的所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從所述決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài);
      [0015]所述獲取單元,還用于當(dāng)所述遍歷單元遍歷到葉子節(jié)點時,從所述葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?,所述程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且所述程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序;
      [0016]發(fā)送單元,用于將所述獲取單元獲取的所述程序?qū)ο蟀l(fā)送給顯卡,以便所述顯卡基于可編程渲染管線處理所述程序?qū)ο?,實現(xiàn)圖形渲染。
      [0017]借由上述技術(shù)方案,本發(fā)明提供的圖形處理的方法及裝置,能夠在接收到客戶端發(fā)送的渲染命令后,服務(wù)器先獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),然后根據(jù)該狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,并在經(jīng)過與狀態(tài)數(shù)據(jù)匹配的遍歷路徑后,獲得葉子節(jié)點,最后從該葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?即已編譯的頂點程序和已編譯的片元程序),并將該程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理該程序?qū)ο?,實現(xiàn)圖形渲染。由此可知,本發(fā)明在每次渲染時,服務(wù)器僅需通過渲染命令中的狀態(tài)數(shù)據(jù)對預(yù)設(shè)的決策樹進(jìn)行遍歷,并從遍歷到的葉子節(jié)點中直接獲取可編程渲染管線所需的程序?qū)ο蠹纯桑鵁o需每次都花費大量時間生成AST樹,以及基于AST樹生成并編譯程序,從而提高了圖形渲染的效率。
      [0018]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
      【附圖說明】
      [0019]通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
      [0020]圖1示出了本發(fā)明實施例提供的一種圖形處理的方法的流程圖;
      [0021 ]圖2示出了本發(fā)明實施例提供的一種決策樹的結(jié)構(gòu)示意圖;
      [0022]圖3示出了本發(fā)明實施例提供的另一種圖形處理的方法的流程圖;
      [0023]圖4示出了本發(fā)明實施例提供的一種圖形處理的裝置的組成框圖;
      [0024]圖5示出了本發(fā)明實施例提供的另一種圖形處理的裝置的組成框圖;
      [0025]圖6示出了本發(fā)明實施例提供的再一種圖形處理的裝置的組成框圖。
      【具體實施方式】
      [0026]下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
      [0027]為解決現(xiàn)有技術(shù)中在基于可編程渲染管線的設(shè)備上運行經(jīng)固定渲染管線渲染后的應(yīng)用程序時,圖形渲染效率較低的問題,本發(fā)明實施例提供了一種圖形處理的方法,該方法主要應(yīng)用于OpenGL ES服務(wù)器側(cè),如圖1所示,該方法主要包括:
      [0028]101、在接收到渲染命令后,獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù)。
      [0029]其中,狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài)。在用戶啟動基于固定渲染管線渲染的應(yīng)用程序(即OpenGL ES客戶端)后,當(dāng)需要對OpenGL ES客戶端中的某圖形進(jìn)行渲染顯示時,OpenGL ES客戶端會從基于固定渲染管線渲染的數(shù)據(jù)中獲取與該圖形對應(yīng)的狀態(tài)數(shù)據(jù),然后將攜帶該狀態(tài)數(shù)據(jù)的渲染命令發(fā)送給OpenGL ES服務(wù)器,以便OpenGL ES服務(wù)器根據(jù)該狀態(tài)數(shù)據(jù)獲取可編程渲染管線所需的已編譯的頂點程序和已編譯的片元程序。其中,渲染命令主要包括glDraw*命令,渲染屬性包括光線、變形、紋理以及霧等。
      [0030]102、根據(jù)狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹。
      [0031]其中,預(yù)設(shè)的決策樹由至少一種渲染屬性的不同啟用狀態(tài)構(gòu)成,且決策樹具有以下特征:從決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài)。例如,圖2為一顆決策樹,其中,第二層節(jié)點代表的渲染屬性為光線,且包含啟用光線處理以及未啟用光線處理這兩種啟用狀態(tài),第三層節(jié)點代表的渲染屬性為紋理,且包含啟用紋理處理以及未有啟用紋理處理這兩種啟用狀態(tài)。
      [0032]需要說明的是,決策樹中可能僅包含狀態(tài)數(shù)據(jù)中涉及的渲染屬性,也可能既包含狀態(tài)數(shù)據(jù)中涉及的渲染屬性,又包含其他渲染屬性。當(dāng)遍歷決策樹的過程中,遇到與狀態(tài)數(shù)據(jù)中各個渲染屬性均不相同的渲染屬性時,直接選擇啟用狀態(tài)為未啟用的節(jié)點即可。
      [0033]此外,在OpenGLES服務(wù)器遍歷決策樹時,可以從決策樹的根節(jié)點開始遍歷,依次查找與狀態(tài)數(shù)據(jù)中對應(yīng)渲染屬性匹配的子節(jié)點,直至獲得葉子節(jié)點。
      [0034]103、當(dāng)遍歷到葉子節(jié)點時,從葉子節(jié)點中獲取對應(yīng)的程序?qū)ο蟆?br>[0035]其中,程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序。其中,從根節(jié)點開始,遍歷的與狀態(tài)數(shù)據(jù)中各個渲染屬性依次匹配的節(jié)點所構(gòu)成的路徑為遍歷路徑。由于決策樹的各個葉子節(jié)點中均存儲有對應(yīng)的程序?qū)ο?,所以?dāng)根據(jù)狀態(tài)數(shù)據(jù)遍歷到某葉子節(jié)點時,可以從該葉子節(jié)點中直接獲取存儲的程序?qū)ο蟆?br>[0036]104、將程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理程序?qū)ο?,實現(xiàn)圖形渲染。
      [0037]當(dāng)OpenGLES服務(wù)器從遍歷到的葉子節(jié)點中獲取符合遍歷路徑所限定的狀態(tài)組合條件的程序?qū)ο蠛?,可以將該程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線執(zhí)行該程序?qū)ο笾械囊丫幾g的頂點程序和已編譯的片元程序,從而實現(xiàn)圖形渲染操作,進(jìn)而在OpenGL ES客戶端的界面上顯示對應(yīng)的渲染效果。
      [0038]需要說明的是,本發(fā)明實施例的應(yīng)用場景可以為“在Windows操作系統(tǒng)中的Android模擬器上運行基于固定渲染管線渲染的應(yīng)用程序”,也可以為“在Windows操作系統(tǒng)中的iphone模擬器上運行基于固定渲染管線渲染的應(yīng)用程序”,也可以為其他應(yīng)用場景,在此不做限定。
      [0039]本發(fā)明實施例提供的圖形處理的方法,能夠在接收到客戶端發(fā)送的渲染命令后,服務(wù)器先獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),然后根據(jù)該狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,并在經(jīng)過與狀態(tài)數(shù)據(jù)匹配的遍歷路徑后,獲得葉子節(jié)點,最后從該葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?即已編譯的頂點程序和已編譯的片元程序),并將該程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理該程序?qū)ο?,實現(xiàn)圖形渲染。由此可知,本發(fā)明在每次渲染時,月艮務(wù)器僅需通過渲染命令中的狀態(tài)數(shù)據(jù)對預(yù)設(shè)的決策樹進(jìn)行遍歷,并從遍歷到的葉子節(jié)點中直接獲取可編程渲染管線所需的程序?qū)ο蠹纯桑鵁o需每次都花費大量時間生成AST樹,以及基于AST樹生成并編譯程序,從而提高了圖形渲染的效率。
      [0040]進(jìn)一步的,根據(jù)上述方法實施例,本發(fā)明的另一個實施例還提供了一種圖形處理的方法,如圖3所示,該方法主要包括:
      [0041 ] 201、在接收到渲染命令后,獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù)。
      [0042]本步驟的具體實現(xiàn)方式與上述步驟101相同,在此不再贅述。
      [0043]202、根據(jù)狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹。
      [0044]具體的,遍歷決策樹的具體實現(xiàn)方式可以為:確定當(dāng)前節(jié)點層對應(yīng)的清染屬性;從狀態(tài)數(shù)據(jù)中查找渲染屬性的啟用狀態(tài);當(dāng)遍歷到啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。
      [0045]示例性的,若狀態(tài)數(shù)據(jù)中包括兩種渲染屬性的啟用狀態(tài),即啟用光線處理以及未啟用紋理處理,且決策樹如圖2所示,則OpenGL ES服務(wù)器根據(jù)狀態(tài)數(shù)據(jù)遍歷決策樹的具體實現(xiàn)方式可以為:從根節(jié)點開始遍歷,首先,確定第二級節(jié)點層對應(yīng)的清染屬性為光線,從狀態(tài)數(shù)據(jù)中查找光線的啟用狀態(tài)為啟用光線處理,由此從第二級節(jié)點層中選擇出啟用狀態(tài)為啟用光線處理的節(jié)點;其次,確定第三級節(jié)點層對應(yīng)的渲染屬性為紋理,從狀態(tài)數(shù)據(jù)中查找紋理的啟用狀態(tài)為未啟用紋理處理,然后從第二級節(jié)點層中選擇出的節(jié)點的子節(jié)點中選擇啟用狀態(tài)為未啟用紋理處理的節(jié)點;最后,由于從第三級節(jié)點層中選擇出的節(jié)點為葉子節(jié)點,所以遍歷結(jié)束。此外,該示例的遍歷路徑為根節(jié)點—狀態(tài)為啟用光線處理的節(jié)點—狀態(tài)為未啟用紋理處理的節(jié)點。
      [0046]203、當(dāng)遍歷到葉子節(jié)點時,從葉子節(jié)點中獲取對應(yīng)的程序?qū)ο蟆?br>[0047]本步驟的具體實現(xiàn)方式與上述步驟103相同,在此不再贅述。
      [0048]204、當(dāng)遍歷到的葉子節(jié)點為空時,獲取葉子節(jié)點對應(yīng)的程序源碼。
      [0049]其中,程序源碼包括未編譯的頂點程序和未編譯的片元程序。
      [0050]在實際應(yīng)用中,獲取葉子節(jié)點對應(yīng)的程序源碼的具體實現(xiàn)方式可以有多種,下面以以下兩種方式為例進(jìn)行介紹:
      [0051]方式一:根據(jù)遍歷路徑所限定的狀態(tài)組合條件生成程序源碼。
      [0052]其中,當(dāng)OpenGLES服務(wù)器遍歷完決策樹后,可獲得與狀態(tài)數(shù)據(jù)匹配遍歷路徑所限定的狀態(tài)組合條件,并基于mesa等技術(shù)生成程序源碼。在實際應(yīng)用中,根據(jù)遍歷路徑所限定的狀態(tài)組合條件生成程序源碼的具體實現(xiàn)方式可以為根據(jù)遍歷路徑所限定的狀態(tài)組合條件先生成AST樹,然后通過AST樹生成程序源碼,也可以為其他方式,在此不做限定。
      [0053]方式二:獲取葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。
      [0054]由于程序源碼是關(guān)于各種渲染屬性的啟用狀態(tài)的程序,所以程序員可以針對各種狀態(tài)組合條件,預(yù)編寫對應(yīng)的程序源碼,并保存至預(yù)設(shè)存儲空間。當(dāng)OpenGL ES服務(wù)器遍歷到某葉子節(jié)點時,可直接從預(yù)設(shè)存儲空間中查找與該葉子節(jié)點對應(yīng)的程序源碼,并對查找到的程序源碼進(jìn)行編譯,獲得程序?qū)ο蟆?br>[0055]此外,OpenGL ES服務(wù)器還可以通過上述兩種方式結(jié)合的方式獲取程序源碼。具體的,OpenGL ES服務(wù)器可以先查找葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼;若查找到葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼,則直接獲取查找到的程序源碼;若未查找到葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼,則可以根據(jù)遍歷路徑所限定的狀態(tài)組合條件生成程序源碼。
      [0056]205、對程序源碼進(jìn)行編譯獲得程序?qū)ο蟆?br>[0057]進(jìn)一步的,由于編譯源碼需要花費大量時間,所以為便于后續(xù)再次渲染該圖形時,提高渲染效率,OpenGL ES服務(wù)器可以在對程序源碼進(jìn)行編譯獲得程序?qū)ο笾?,將程序?qū)ο蟊4嬖诒闅v路徑對應(yīng)的葉子節(jié)點中。
      [0058]206、將程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理程序?qū)ο螅瑢崿F(xiàn)圖形渲染。
      [0059]本步驟的具體實現(xiàn)方式與上述實施例中的步驟104相同,在此不再贅述。
      [0060]通過對本實施例的詳細(xì)介紹可知,在OpenGL ES服務(wù)器啟動后,可以先構(gòu)建葉子節(jié)點為空的初始決策樹;當(dāng)OpenGL ES服務(wù)器首次對某圖形進(jìn)行渲染時,會首次遍歷到對應(yīng)的葉子節(jié)點,此時可以先獲取該葉子節(jié)點對應(yīng)的程序源碼,然后對該程序源碼進(jìn)行編譯獲得程序?qū)ο?,并將獲得程序?qū)ο蟊4嬷猎撊~子節(jié)點中;當(dāng)OpenGL ES服務(wù)器再次對該圖形進(jìn)行渲染時,會再次遍歷到該葉子節(jié)點,此時可以直接從該葉子節(jié)點中獲取可編程渲染管線所需的程序?qū)ο螅鵁o需對程序源碼進(jìn)行編譯,從而提高了圖形渲染的效率。
      [0061]進(jìn)一步的,依據(jù)上述方法實施例,本發(fā)明的另一個實施例還提供了一種圖形處理的裝置,如圖4所示,該裝置主要包括:獲取單元31、遍歷單元32和發(fā)送單元33。其中,
      [0062]獲取單元31,用于在接收到渲染命令后,獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài);
      [0063]其中,渲染命令主要包括glDraw*命令,渲染屬性包括光線、變形、紋理以及霧等。
      [0064]遍歷單元32,用于根據(jù)獲取單元31獲取的狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài);
      [0065]需要說明的是,決策樹中可能僅包含狀態(tài)數(shù)據(jù)中涉及的渲染屬性,也可能既包含狀態(tài)數(shù)據(jù)中涉及的渲染屬性,又包含其他渲染屬性。
      [0066]獲取單元31,還用于當(dāng)遍歷單元32遍歷到葉子節(jié)點時,從葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?,程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序;
      [0067]發(fā)送單元33,用于將獲取單元31獲取的程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理程序?qū)ο?,實現(xiàn)圖形渲染。
      [0068]本發(fā)明實施例提供的圖形處理的裝置,能夠在接收到客戶端發(fā)送的渲染命令后,服務(wù)器先獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),然后根據(jù)該狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,并在經(jīng)過與狀態(tài)數(shù)據(jù)匹配的遍歷路徑后,獲得葉子節(jié)點,最后從該葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?即已編譯的頂點程序和已編譯的片元程序),并將該程序?qū)ο蟀l(fā)送給顯卡,以便顯卡基于可編程渲染管線處理該程序?qū)ο?,實現(xiàn)圖形渲染。由此可知,本發(fā)明在每次渲染時,月艮務(wù)器僅需通過渲染命令中的狀態(tài)數(shù)據(jù)對預(yù)設(shè)的決策樹進(jìn)行遍歷,并從遍歷到的葉子節(jié)點中直接獲取可編程渲染管線所需的程序?qū)ο蠹纯?,而無需每次都花費大量時間生成AST樹,以及基于AST樹生成并編譯程序,從而提高了圖形渲染的效率。
      [0069]進(jìn)一步的,獲取單元31,還用當(dāng)遍歷單元32遍歷到的葉子節(jié)點為空時,獲取葉子節(jié)點對應(yīng)的程序源碼,程序源碼包括未編譯的頂點程序和未編譯的片元程序;
      [°07°]如圖5所示,該裝置進(jìn)一步包括:
      [0071]編譯單元34,用于對獲取單元31獲取的程序源碼進(jìn)行編譯獲得程序?qū)ο蟆?br>[0072]進(jìn)一步的,如圖5所示,該裝置進(jìn)一步包括:
      [0073]保存單元35,用于在編譯單元34對程序源碼進(jìn)行編譯獲得程序?qū)ο笾?,將程序?qū)ο蟊4嬖诒闅v路徑對應(yīng)的葉子節(jié)點中。
      [0074I進(jìn)一步的,如圖5所示,獲取單元31包括:
      [0075]生成模塊311,用于根據(jù)遍歷路徑所限定的狀態(tài)組合條件生成程序源碼;
      [0076]獲取模塊312,用于獲取葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。
      [0077]進(jìn)一步的,如圖5所示,該裝置進(jìn)一步包括:
      [0078]構(gòu)建單元36,用于在服務(wù)器啟動后,構(gòu)建葉子節(jié)點為空的初始決策樹。
      [0079]進(jìn)一步的,如圖5所示,遍歷單元32包括:
      [0080]確定模塊321,用于確定當(dāng)前節(jié)點層對應(yīng)的清染屬性;
      [0081]查找模塊322,用于從狀態(tài)數(shù)據(jù)中查找渲染屬性的啟用狀態(tài);
      [0082]遍歷模塊323,用于當(dāng)遍歷到啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。
      [0083]進(jìn)一步的,作為對上述方法的實現(xiàn),本發(fā)明的另一個實施例還提供了一種圖形處理的裝置,如圖6所示,該裝置包括:收發(fā)器61、處理器62、顯卡63、存儲器64以及總線65;其中,
      [0084]收發(fā)器61,被配置為接收渲染指令;
      [0085]處理器62,被配置為:
      [0086]獲取渲染命令中攜帶的狀態(tài)數(shù)據(jù),狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài);
      [0087]根據(jù)狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài);
      [0088]當(dāng)遍歷單元遍歷到葉子節(jié)點時,從葉子節(jié)點中獲取對應(yīng)的程序?qū)ο螅绦驅(qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序;
      [0089]收發(fā)器61還被配置為將程序?qū)ο蟀l(fā)送給顯卡63;
      [0090]顯卡63,被配置為基于可編程渲染管線處理程序?qū)ο螅瑢崿F(xiàn)圖形渲染;
      [0091 ]存儲器64,被配置為存儲處理器62的可執(zhí)行指令;
      [0092]總線65,被配置為耦接收發(fā)器61、處理器62、顯卡63及存儲器64。
      [0093]進(jìn)一步的,處理器62還被配置為:
      [0094]當(dāng)遍歷單元遍歷到的葉子節(jié)點為空時,獲取葉子節(jié)點對應(yīng)的程序源碼,程序源碼包括未編譯的頂點程序和未編譯的片元程序;
      [0095]對程序源碼進(jìn)行編譯獲得程序?qū)ο蟆?br>[0096]進(jìn)一步的,存儲器64還被配置為:
      [0097]在對程序源碼進(jìn)行編譯獲得程序?qū)ο笾?,將程序?qū)ο蟊4嬖诒闅v路徑對應(yīng)的葉子節(jié)點中。
      [0098]進(jìn)一步的,處理器62還被配置為:
      [0099]根據(jù)遍歷路徑所限定的狀態(tài)組合條件生成程序源碼;
      [0100]獲取葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。
      [0101]進(jìn)一步的,處理器62還被配置為:
      [0102]在服務(wù)器啟動后,構(gòu)建葉子節(jié)點為空的初始決策樹。
      [0103]進(jìn)一步的,處理器62還被配置為:
      [0104]確定當(dāng)前節(jié)點層對應(yīng)的清染屬性;
      [0105]從狀態(tài)數(shù)據(jù)中查找渲染屬性的啟用狀態(tài);
      [0106]當(dāng)遍歷到啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。
      [0107]在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。
      [0108]可以理解的是,上述方法及裝置中的相關(guān)特征可以相互參考。另外,上述實施例中的“第一”、“第二”等是用于區(qū)分各實施例,而并不代表各實施例的優(yōu)劣。
      [0109]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
      [0110]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
      [0111]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細(xì)節(jié)的情況下實踐。在一些實例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
      [0112]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
      [0113]本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
      [0114]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實施例的任意之一都可以以任意的組合方式來使用。
      [0115]本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的發(fā)明名稱(如確定網(wǎng)站內(nèi)鏈接等級的裝置)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
      [0116]應(yīng)該注意的是上述實施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
      【主權(quán)項】
      1.一種圖形處理的方法,其特征在于,所述方法包括: 在接收到渲染命令后,獲取所述渲染命令中攜帶的狀態(tài)數(shù)據(jù),所述狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài); 根據(jù)所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從所述決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài); 當(dāng)遍歷到葉子節(jié)點時,從所述葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?,所述程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且所述程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序; 將所述程序?qū)ο蟀l(fā)送給顯卡,以便所述顯卡基于可編程渲染管線處理所述程序?qū)ο?,實現(xiàn)圖形渲染。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括: 當(dāng)遍歷到的葉子節(jié)點為空時,獲取所述葉子節(jié)點對應(yīng)的程序源碼,所述程序源碼包括未編譯的頂點程序和未編譯的片元程序; 對所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο蟆?.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述對所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο笾?,所述方法進(jìn)一步包括: 將所述程序?qū)ο蟊4嬖谒霰闅v路徑對應(yīng)的葉子節(jié)點中。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述獲取所述葉子節(jié)點對應(yīng)的程序源碼包括: 根據(jù)所述遍歷路徑所限定的狀態(tài)組合條件生成所述程序源碼; 或者獲取所述葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。5.根據(jù)權(quán)利要求2至4中任一項所述的方法,其特征在于,所述方法進(jìn)一步包括: 在服務(wù)器啟動后,構(gòu)建葉子節(jié)點為空的初始決策樹。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹包括: 確定當(dāng)前節(jié)點層對應(yīng)的渲染屬性; 從所述狀態(tài)數(shù)據(jù)中查找所述渲染屬性的啟用狀態(tài); 當(dāng)遍歷到所述啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。7.—種圖形處理的裝置,其特征在于,所述裝置包括: 獲取單元,用于在接收到渲染命令后,獲取所述渲染命令中攜帶的狀態(tài)數(shù)據(jù),所述狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài); 遍歷單元,用于根據(jù)所述獲取單元獲取的所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從所述決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài); 所述獲取單元,還用于當(dāng)所述遍歷單元遍歷到葉子節(jié)點時,從所述葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?,所述程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且所述程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序; 發(fā)送單元,用于將所述獲取單元獲取的所述程序?qū)ο蟀l(fā)送給顯卡,以便所述顯卡基于可編程渲染管線處理所述程序?qū)ο?,實現(xiàn)圖形渲染。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述獲取單元,還用于當(dāng)所述遍歷單元遍歷到的葉子節(jié)點為空時,獲取所述葉子節(jié)點對應(yīng)的程序源碼,所述程序源碼包括未編譯的頂點程序和未編譯的片元程序; 所述裝置進(jìn)一步包括: 編譯單元,用于對所述獲取單元獲取的所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο蟆?.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置進(jìn)一步包括: 保存單元,用于在所述編譯單元對所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο笾?,將所述程序?qū)ο蟊4嬖谒霰闅v路徑對應(yīng)的葉子節(jié)點中。10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述獲取單元包括: 生成模塊,用于根據(jù)所述遍歷路徑所限定的狀態(tài)組合條件生成所述程序源碼; 獲取模塊,用于獲取所述葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。11.根據(jù)權(quán)利要求8至10中任一項所述的裝置,其特征在于,所述裝置進(jìn)一步包括: 構(gòu)建單元,用于在服務(wù)器啟動后,構(gòu)建葉子節(jié)點為空的初始決策樹。12.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述遍歷單元包括: 確定模塊,用于確定當(dāng)前節(jié)點層對應(yīng)的渲染屬性; 查找模塊,用于從所述狀態(tài)數(shù)據(jù)中查找所述渲染屬性的啟用狀態(tài); 遍歷模塊,用于當(dāng)遍歷到所述啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。13.—種圖形處理的裝置,其特征在于,所述裝置包括: 收發(fā)器,被配置為接收渲染指令; 處理器,被配置為: 獲取所述渲染命令中攜帶的狀態(tài)數(shù)據(jù),所述狀態(tài)數(shù)據(jù)用于描述待渲染圖形的不同渲染屬性所對應(yīng)的啟用狀態(tài); 根據(jù)所述狀態(tài)數(shù)據(jù)遍歷預(yù)設(shè)的決策樹,其中,從所述決策樹的第二層節(jié)點起,每層節(jié)點代表一種渲染屬性是否啟用的兩種狀態(tài); 當(dāng)所述遍歷單元遍歷到葉子節(jié)點時,從所述葉子節(jié)點中獲取對應(yīng)的程序?qū)ο?,所述程序?qū)ο鬄榉媳闅v路徑所限定的狀態(tài)組合條件的程序,且所述程序?qū)ο蟀ㄒ丫幾g的頂點程序和已編譯的片元程序; 所述收發(fā)器還被配置為將所述程序?qū)ο蟀l(fā)送給顯卡; 顯卡,被配置為基于可編程渲染管線處理所述程序?qū)ο?,實現(xiàn)圖形渲染; 存儲器,被配置為存儲所述處理器的可執(zhí)行指令; 總線,被配置為耦接所述收發(fā)器、所述處理器、所述顯卡及所述存儲器。14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述處理器還被配置為: 當(dāng)所述遍歷單元遍歷到的葉子節(jié)點為空時,獲取所述葉子節(jié)點對應(yīng)的程序源碼,所述程序源碼包括未編譯的頂點程序和未編譯的片元程序; 對所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο蟆?5.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述存儲器還被配置為: 在對所述程序源碼進(jìn)行編譯獲得所述程序?qū)ο笾螅瑢⑺龀绦驅(qū)ο蟊4嬖谒霰闅v路徑對應(yīng)的葉子節(jié)點中。16.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述處理器還被配置為: 根據(jù)所述遍歷路徑所限定的狀態(tài)組合條件生成所述程序源碼; 獲取所述葉子節(jié)點對應(yīng)的預(yù)編寫的程序源碼。17.根據(jù)權(quán)利要求14至16中任一項所述的裝置,其特征在于,所述處理器還被配置為: 在服務(wù)器啟動后,構(gòu)建葉子節(jié)點為空的初始決策樹。18.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述處理器還被配置為: 確定當(dāng)前節(jié)點層對應(yīng)的渲染屬性; 從所述狀態(tài)數(shù)據(jù)中查找所述渲染屬性的啟用狀態(tài); 當(dāng)遍歷到所述啟用狀態(tài)對應(yīng)的節(jié)點時,重復(fù)上述步驟,繼續(xù)對下一級節(jié)點層進(jìn)行遍歷,直至遍歷到葉子節(jié)點為止。
      【文檔編號】G06F9/44GK105843603SQ201610153078
      【公開日】2016年8月10日
      【申請日】2016年3月17日
      【發(fā)明人】林作健
      【申請人】廣州愛九游信息技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1