圖形處理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種圖形處理方法及裝置。
【背景技術(shù)】
[0002] 隨著計(jì)算機(jī)技術(shù)的廣泛應(yīng)用,為了滿(mǎn)足用戶(hù)在使用終端設(shè)備時(shí)對(duì)視覺(jué)效果的更高 要求,交互式矢量圖(Flash)三維(Three Dimensions,簡(jiǎn)稱(chēng)為:3D)在計(jì)算機(jī)中的應(yīng)用也隨 之發(fā)展,由中央處理器(Central Processing Unit,簡(jiǎn)稱(chēng)為:CPU)進(jìn)行三維渲染的效率低 下,只能完成簡(jiǎn)單的3D模型。
[0003] 目前的計(jì)算機(jī)系統(tǒng)都集成了圖形處理器(Graphic Processing Unit,簡(jiǎn)稱(chēng)為: GPU)以支持硬件加速,因此可以將龐大的3D運(yùn)算交給GPU執(zhí)行,在處理基于Flash 3D程 序的過(guò)程中,只消耗很少的CPU資源就能做出復(fù)雜的3D模型;GPU通??梢灾С只陂_(kāi)放 式圖形程序接口(Open Graphics Library,簡(jiǎn)稱(chēng)為:0penGL)的著色語(yǔ)言(OpenGL Shading Language,簡(jiǎn)稱(chēng)為:GLSL),和基于微軟3D繪圖編程接口(Direct3D,簡(jiǎn)稱(chēng)為:D3D)的高級(jí)著 色器語(yǔ)言(High Level Shader Language,簡(jiǎn)稱(chēng)為:HLSL)。
[0004] 現(xiàn)有技術(shù)中的圖形處理方法,通過(guò)GPU進(jìn)行三維渲染無(wú)法直接執(zhí)行圖形匯編語(yǔ)言 (Adobe Graphics Assembly Language,簡(jiǎn)稱(chēng)為:AGAL),而導(dǎo)致基于 Stage 3D 技術(shù)的 AGAL 的實(shí)用性低的問(wèn)題,相應(yīng)地降低了 Stage 3D技術(shù)使用的靈活性。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明提供一種圖形處理方法及裝置,以解決現(xiàn)有技術(shù)中的圖形處理方法,通過(guò) GPU進(jìn)行三維渲染無(wú)法直接執(zhí)行AGAL,而導(dǎo)致基于Stage 3D技術(shù)的AGAL的實(shí)用性低的問(wèn) 題,節(jié)省CPU資源,提高了 Stage 3D技術(shù)使用的靈活性。
[0006] 第一方面,本發(fā)明提供一種圖形處理方法,包括:
[0007] 讀取圖形匯編語(yǔ)言AGAL的程序代碼,所述程序代碼包括所述AGAL的數(shù)據(jù)信息和 指令碼;
[0008] 根據(jù)所述AGAL與著色語(yǔ)言GLSL的對(duì)應(yīng)關(guān)系,將所述AGAL的程序代碼轉(zhuǎn)化為用于 圖形程序接口 OpenGL的GLSL的程序代碼,其中,所述對(duì)應(yīng)關(guān)系包括所述AGAL中數(shù)據(jù)信息 和指令碼所指示的操作與所述GLSL程序代碼的變量和操作的對(duì)應(yīng)關(guān)系;
[0009] 通過(guò)圖形處理器GPU執(zhí)行所述GLSL的程序代碼。
[0010] 在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述指令碼包括頂點(diǎn)著色語(yǔ)句和片段著 色語(yǔ)句;
[0011] 所述根據(jù)所述AGAL與著色語(yǔ)言GLSL的對(duì)應(yīng)關(guān)系,將所述AGAL的程序代碼轉(zhuǎn)化為 用于圖形程序接口 OpenGL的GLSL的程序代碼,包括:
[0012] 根據(jù)所述AGAL的數(shù)據(jù)信息獲取對(duì)應(yīng)的寄存器信息,所述寄存器信息包括寄存器 類(lèi)型、索引,以及所述寄存器的著色類(lèi)型;
[0013] 根據(jù)所述寄存器信息,對(duì)所述頂點(diǎn)著色語(yǔ)句進(jìn)行頂點(diǎn)著色程序轉(zhuǎn)化;
[0014] 根據(jù)所述寄存器信息和所述頂點(diǎn)著色程序轉(zhuǎn)化的結(jié)果,對(duì)所述片段著色語(yǔ)句進(jìn)行 片段著色程序轉(zhuǎn)化。
[0015] 根據(jù)第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述寄存 器的著色類(lèi)型包括頂點(diǎn)著色器;
[0016] 所述根據(jù)所述寄存器信息,對(duì)所述頂點(diǎn)著色語(yǔ)句進(jìn)行頂點(diǎn)著色程序轉(zhuǎn)化,包括 :
[0017] 將所述著色類(lèi)型為頂點(diǎn)著色器的寄存器和所述頂點(diǎn)著色語(yǔ)句中的可變性變量轉(zhuǎn) 化為所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的全局變量;
[0018] 根據(jù)所述頂點(diǎn)著色語(yǔ)句所指示的操作推導(dǎo)所述頂點(diǎn)著色語(yǔ)句的寄存器信息,并將 所述寄存器類(lèi)型為臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部 變量;
[0019] 將所述頂點(diǎn)著色語(yǔ)句的操作轉(zhuǎn)換為所述GLSL中頂點(diǎn)著色程序?qū)?yīng)的操作。
[0020] 根據(jù)第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述局部 變量包括所述局部變量的類(lèi)型和標(biāo)識(shí)符;則所述將所述寄存器類(lèi)型為臨時(shí)寄存器中的臨時(shí) 變量轉(zhuǎn)化為所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部變量,包括:
[0021] 根據(jù)所述頂點(diǎn)著色語(yǔ)句所指示的操作,推導(dǎo)所述臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為 所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部變量的類(lèi)型;
[0022] 將所述局部變量對(duì)應(yīng)的所述頂點(diǎn)著色語(yǔ)句的寄存器名稱(chēng)定義為所述局部變量的 標(biāo)識(shí)符。
[0023] 根據(jù)第一方面的第二種或第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中, 所述寄存器的著色類(lèi)型還包括片段著色器;
[0024] 所述根據(jù)所述寄存器信息,對(duì)所述頂點(diǎn)著色語(yǔ)句進(jìn)行頂點(diǎn)著色程序轉(zhuǎn)化之后,還 包括:
[0025] 存儲(chǔ)所述頂點(diǎn)著色程序轉(zhuǎn)換過(guò)程中使用的所述可變性變量;
[0026] 則所述根據(jù)所述寄存器信息和所述頂點(diǎn)著色程序轉(zhuǎn)化的結(jié)果,對(duì)所述片段著色語(yǔ) 句進(jìn)行片段著色程序轉(zhuǎn)化,包括:
[0027] 將所述著色類(lèi)型為片段著色器的寄存器和所述存儲(chǔ)的可變性變量轉(zhuǎn)化為所述 GLSL的片段著色程序?qū)?yīng)的全局變量;
[0028]根據(jù)所述片段著色語(yǔ)句所指示的操作推導(dǎo)所述片段著色語(yǔ)句的寄存器信息,并將 所述寄存器類(lèi)型為臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為所述GLSL的片段著色程序?qū)?yīng)的局部 變量;
[0029] 將所述片段著色語(yǔ)句的操作轉(zhuǎn)換為所述GLSL中片段著色程序?qū)?yīng)的操作。
[0030] 第二方面,本發(fā)明提供一種圖形處理裝置,包括:
[0031] 讀取模塊,用于讀取圖形匯編語(yǔ)言AGAL的程序代碼,所述程序代碼包括所述AGAL 的數(shù)據(jù)信息和指令碼;
[0032] 轉(zhuǎn)化模塊,用于根據(jù)所述AGAL與著色語(yǔ)言GLSL的對(duì)應(yīng)關(guān)系,將所述AGAL的程序 代碼轉(zhuǎn)化為用于圖形程序接口 OpenGL的GLSL的程序代碼,其中,所述對(duì)應(yīng)關(guān)系包括所述 AGAL中數(shù)據(jù)信息和指令碼所指示的操作與所述GLSL程序代碼中的變量和操作的對(duì)應(yīng)關(guān) 系;
[0033] 執(zhí)行模塊,用于通過(guò)圖形處理器GPU執(zhí)行所述GLSL的程序代碼。
[0034] 在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述指令碼包括頂點(diǎn)著色語(yǔ)句和片段著 色語(yǔ)句;所述轉(zhuǎn)化模塊包括:獲取單元,用于根據(jù)所述讀取模塊讀取的AGAL的數(shù)據(jù)信息獲 取對(duì)應(yīng)的寄存器信息,所述寄存器信息包括寄存器類(lèi)型、索引,以及所述寄存器的著色類(lèi) 型;
[0035] 頂點(diǎn)著色轉(zhuǎn)化單元,用于根據(jù)所述獲取單元獲取的寄存器信息,對(duì)所述頂點(diǎn)著色 語(yǔ)句進(jìn)行頂點(diǎn)著色程序轉(zhuǎn)化;
[0036] 片段著色轉(zhuǎn)化單元,用于根據(jù)所述獲取單元獲取的寄存器信息和所述頂點(diǎn)著色轉(zhuǎn) 化單元對(duì)所述頂點(diǎn)著色程序轉(zhuǎn)化的結(jié)果,對(duì)所述片段著色語(yǔ)句進(jìn)行片段著色程序轉(zhuǎn)化。
[0037] 根據(jù)第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述寄存 器的著色類(lèi)型包括頂點(diǎn)著色器;
[0038] 所述頂點(diǎn)著色轉(zhuǎn)化單元,具體包括:
[0039] 第一全局變量轉(zhuǎn)化子單元,用于將所述著色類(lèi)型為頂點(diǎn)著色器的寄存器和所述頂 點(diǎn)著色語(yǔ)句中的可變性變量轉(zhuǎn)化為所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的全局變量;
[0040] 第一局部變量轉(zhuǎn)化子單元,用于根據(jù)所述頂點(diǎn)著色語(yǔ)句所指示的操作推導(dǎo)所述頂 點(diǎn)著色語(yǔ)句的寄存器信息,從而將所述寄存器類(lèi)型為臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為所述 GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部變量;
[0041] 第一操作轉(zhuǎn)化子單元,用于將所述頂點(diǎn)著色語(yǔ)句的操作轉(zhuǎn)換為所述GLSL中頂點(diǎn) 著色程序?qū)?yīng)的操作。
[0042] 根據(jù)第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述局部 變量包括所述局部變量的類(lèi)型和標(biāo)識(shí)符;則所述第一局部變量轉(zhuǎn)化子單元,用于將所述寄 存器類(lèi)型為臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部變量, 具體包括:
[0043] 根據(jù)所述頂點(diǎn)著色語(yǔ)句所指示的操作,推導(dǎo)所述臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為 所述GLSL的頂點(diǎn)著色程序?qū)?yīng)的局部變量的類(lèi)型;并將所述局部變量對(duì)應(yīng)的所述頂點(diǎn)著 色語(yǔ)句的寄存器名稱(chēng)定義為所述局部變量的標(biāo)識(shí)符。
[0044] 根據(jù)第二方面的第二種或第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中, 所述寄存器的著色類(lèi)型還包括片段著色器;則所述裝置還包括:存儲(chǔ)模塊,用于在所述頂 點(diǎn)著色轉(zhuǎn)化單元根據(jù)所述寄存器信息,對(duì)所述頂點(diǎn)著色語(yǔ)句進(jìn)行頂點(diǎn)著色程序轉(zhuǎn)化之后, 存儲(chǔ)所述頂點(diǎn)著色程序轉(zhuǎn)換過(guò)程中使用的所述可變性變量;
[0045] 則所述片段著色轉(zhuǎn)化單元,具體包括:
[0046] 第二全局變量轉(zhuǎn)化子單元,用于將所述著色類(lèi)型為片段著色器的寄存器和所述存 儲(chǔ)模塊存儲(chǔ)的可變性變量轉(zhuǎn)化為所述GLSL的片段著色程序?qū)?yīng)的全局變量;
[0047] 第二局部變量轉(zhuǎn)化子單元,用于根據(jù)所述片段著色語(yǔ)句所指示的操作推導(dǎo)所述片 段著色語(yǔ)句的寄存器信息,從而將所述寄存器類(lèi)型為臨時(shí)寄存器中的臨時(shí)變量轉(zhuǎn)化為所述 GLSL的片段著色程序?qū)?yīng)的局部變量;
[0048] 第二操作