本技術(shù)涉及數(shù)據(jù)處理,特別是一種面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯方法和裝置。
背景技術(shù):
1、web圖形渲染已成為網(wǎng)絡(luò)應(yīng)用中必不可少的組成部分,這種技術(shù)大大提升了在線多媒體領(lǐng)域的用戶體驗(yàn),如游戲、視覺效果、數(shù)據(jù)可視化和虛擬現(xiàn)實(shí)等。因此,如何實(shí)現(xiàn)高性能高便利性的圖形渲染成為了一個(gè)新的研究方向。webgl(web?graphics?library,網(wǎng)絡(luò)圖形庫)于2009年提出,可以實(shí)現(xiàn)高性能的交互式3d和2d圖形渲染。在webgl中,開發(fā)者只需編寫少量代碼即可創(chuàng)建復(fù)雜的圖形應(yīng)用,這種易用性推動(dòng)了webgl在過去十多年中的廣泛應(yīng)用。但是,隨著硬件性能地不斷提升,上述方法的圖形渲染已經(jīng)難以滿足現(xiàn)代圖形應(yīng)用的性能需求,上述方法在現(xiàn)代圖形應(yīng)用中的圖形渲染效果不高。
2、相關(guān)技術(shù)中,可以使用webgpu(web?graphics?processing?unit,網(wǎng)絡(luò)圖形化處理器)來實(shí)現(xiàn)現(xiàn)代圖形應(yīng)用的圖形渲染。webgpu是一種應(yīng)用程序編程接口,它提供了比webgl顯著更高的性能潛力。最近的研究表明,webgpu在渲染負(fù)載密集的應(yīng)用中明顯優(yōu)于webgl。因此,使用webgpu應(yīng)用程序編程接口可以提升圖形渲染性能。
3、但是上述方法中,webgpu應(yīng)用程序并不能使用與webgl應(yīng)用程序適配的渲染指令進(jìn)行渲染,這導(dǎo)致webgl應(yīng)用程序無法利用webgpu以提升自身的圖形渲染性能,webgl應(yīng)用程序的圖形渲染性能仍然不高。
技術(shù)實(shí)現(xiàn)思路
1、鑒于上述問題,本技術(shù)實(shí)施例提供了一種面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯方法、裝置、電子設(shè)備和可讀存儲(chǔ)介質(zhì),以便克服上述問題或者至少部分地解決上述問題。
2、第一方面,本技術(shù)實(shí)施例提供一種面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯方法,所述方法包括:
3、獲取目標(biāo)瀏覽器中webgl應(yīng)用程序的第一圖形渲染調(diào)用指令;
4、基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令;
5、對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼;
6、基于所述第一圖形渲染編碼,在所述webgpu應(yīng)用程序中進(jìn)行圖形渲染,得到第一圖形。
7、可選地,所述基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令,包括:
8、在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含圖形繪制狀態(tài)調(diào)用的情況下,基于所述第一圖形渲染調(diào)用指令中包含的第一圖形繪制狀態(tài)參數(shù),對(duì)所述webgl應(yīng)用程序的第一全局渲染上下文進(jìn)行替換更新,得到第二全局渲染上下文;其中,所述第一全局渲染上下文中包括所述webgl應(yīng)用程序的歷史圖形繪制狀態(tài)參數(shù);
9、基于所述第二全局渲染上下文,生成與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
10、可選地,所述基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令,包括:
11、在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含著色器編譯調(diào)用的情況下,在所述webgl應(yīng)用程序的第一著色器中,獲取所述第一圖形渲染調(diào)用指令對(duì)應(yīng)的第一共享變量;
12、對(duì)所述第一共享變量進(jìn)行編號(hào),得到第一共享變量序列;
13、基于所述第一共享變量序列,生成與所述webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
14、可選地,所述對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼,包括:
15、在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含統(tǒng)一緩沖區(qū)調(diào)用的情況下,從所述webgl應(yīng)用程序?qū)?yīng)的第一統(tǒng)一緩沖區(qū)中,確定所述第一圖形渲染調(diào)用指令中包含的第一偏移量對(duì)應(yīng)的第二統(tǒng)一緩沖區(qū);
16、基于所述第二統(tǒng)一緩沖區(qū)中包含的第一緩沖區(qū)參數(shù)信息,對(duì)所述webgpu應(yīng)用程序的第一全局統(tǒng)一緩沖區(qū)進(jìn)行增量信息更新,得到第二全局統(tǒng)一緩沖區(qū);其中,所述第一全局統(tǒng)一緩沖區(qū)的存儲(chǔ)空間大于所述第一統(tǒng)一緩沖區(qū)的存儲(chǔ)空間;
17、在所述第二全局統(tǒng)一緩沖區(qū)中的存儲(chǔ)空間中均包含緩沖區(qū)參數(shù)信息的情況下,基于所述存儲(chǔ)空間中的緩沖區(qū)參數(shù)信息,對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行信息替換,得到第三圖形渲染調(diào)用指令;
18、對(duì)所述第三圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼。
19、可選地,所述對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼,包括:
20、在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含頂點(diǎn)紋理調(diào)用的情況下,基于所述第一圖形渲染調(diào)用指令中包含的頂點(diǎn)紋理參數(shù)信息,對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行信息替換,得到第四圖形渲染調(diào)用指令;
21、對(duì)所述第四圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼。
22、可選地,所述基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令,包括:
23、在所述webgpu應(yīng)用程序的第一渲染包中不存在與所述第一圖形渲染調(diào)用指令相匹配的調(diào)用指令轉(zhuǎn)換映射的情況下,基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
24、可選地,所述方法還包括:
25、在所述webgpu應(yīng)用程序的第一渲染包中不存在與所述第一圖形渲染調(diào)用指令相匹配的調(diào)用指令轉(zhuǎn)換映射的情況下,創(chuàng)建所述第一圖形渲染調(diào)用指令與所述第二圖形渲染調(diào)用指令之間的第一轉(zhuǎn)換映射;
26、將所述第一轉(zhuǎn)換映射添加到所述第一渲染包中,以對(duì)所述第一渲染包進(jìn)行更新,得到更新后的第一渲染包。
27、可選地,所述第一渲染包的數(shù)據(jù)結(jié)構(gòu)為字典樹。
28、可選地,所述方法還包括:
29、在第一緩存空間中存在與所述第二圖形渲染調(diào)用指令包含的第二圖形繪制狀態(tài)參數(shù)相匹配的第一參數(shù)渲染映射的情況下,從所述第一參數(shù)渲染映射確定所述第二圖形渲染調(diào)用指令對(duì)應(yīng)的第二圖形渲染編碼;其中,所述第一緩存空間與所述webgpu應(yīng)用程序相連接;所述第一緩存空間的數(shù)據(jù)結(jié)構(gòu)為有向無環(huán)圖;
30、基于所述第二圖形渲染編碼,在所述webgpu應(yīng)用程序中進(jìn)行圖形渲染,得到第二圖形;
31、在所述第一緩存空間中不存在與所述第二圖形繪制狀態(tài)參數(shù)相匹配的參數(shù)渲染映射的情況下,基于所述第二圖形繪制狀態(tài)參數(shù)和所述第一圖形渲染編碼,生成第二參數(shù)渲染映射,并將所述第二參數(shù)渲染映射添加進(jìn)所述第一緩存空間中。
32、第二方面,本技術(shù)實(shí)施例提供一種面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯裝置,所述裝置包括:
33、獲取模塊,用于獲取目標(biāo)瀏覽器中webgl應(yīng)用程序的第一圖形渲染調(diào)用指令;
34、改寫模塊,用于基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令;
35、編譯模塊,用于對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼;
36、第一渲染模塊,用于基于所述第一圖形渲染編碼,在所述webgpu應(yīng)用程序中進(jìn)行圖形渲染,得到第一圖形。
37、可選地,所述改寫模塊,包括:
38、第一更新子模塊,用于在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含圖形繪制狀態(tài)調(diào)用的情況下,基于所述第一圖形渲染調(diào)用指令中包含的第一圖形繪制狀態(tài)參數(shù),對(duì)所述webgl應(yīng)用程序的第一全局渲染上下文進(jìn)行替換更新,得到第二全局渲染上下文;其中,所述第一全局渲染上下文中包括所述webgl應(yīng)用程序的歷史圖形繪制狀態(tài)參數(shù);
39、第一生成子模塊,用于基于所述第二全局渲染上下文,生成與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
40、可選地,所述改寫模塊,包括:
41、獲取子模塊,用于在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含著色器編譯調(diào)用的情況下,在所述webgl應(yīng)用程序的第一著色器中,獲取所述第一圖形渲染調(diào)用指令對(duì)應(yīng)的第一共享變量;
42、編號(hào)生成子模塊,用于對(duì)所述第一共享變量進(jìn)行編號(hào),得到第一共享變量序列;
43、第二生成子模塊,用于基于所述第一共享變量序列,生成與所述webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
44、可選地,所述編譯模塊,包括:
45、第一確定子模塊,用于在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含統(tǒng)一緩沖區(qū)調(diào)用的情況下,從所述webgl應(yīng)用程序?qū)?yīng)的第一統(tǒng)一緩沖區(qū)中,確定所述第一圖形渲染調(diào)用指令中包含的第一偏移量對(duì)應(yīng)的第二統(tǒng)一緩沖區(qū);
46、第二更新子模塊,用于基于所述第二統(tǒng)一緩沖區(qū)中包含的第一緩沖區(qū)參數(shù)信息,對(duì)所述webgpu應(yīng)用程序的第一全局統(tǒng)一緩沖區(qū)進(jìn)行增量信息更新,得到第二全局統(tǒng)一緩沖區(qū);其中,所述第一全局統(tǒng)一緩沖區(qū)的存儲(chǔ)空間大于所述第一統(tǒng)一緩沖區(qū)的存儲(chǔ)空間;
47、第一替換子模塊,用于在所述第二全局統(tǒng)一緩沖區(qū)中的存儲(chǔ)空間中均包含緩沖區(qū)參數(shù)信息的情況下,基于所述存儲(chǔ)空間中的緩沖區(qū)參數(shù)信息,對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行信息替換,得到第三圖形渲染調(diào)用指令;
48、第一編譯子模塊,用于對(duì)所述第三圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼。
49、可選地,所述編譯模塊,包括:
50、第二替換子模塊,用于在所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型包含頂點(diǎn)紋理調(diào)用的情況下,基于所述第一圖形渲染調(diào)用指令中包含的頂點(diǎn)紋理參數(shù)信息,對(duì)所述第二圖形渲染調(diào)用指令進(jìn)行信息替換,得到第四圖形渲染調(diào)用指令;
51、第二編譯子模塊,用于對(duì)所述第四圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼。
52、可選地,所述改寫模塊,包括:
53、改寫子模塊,用于在所述webgpu應(yīng)用程序的第一渲染包中不存在與所述第一圖形渲染調(diào)用指令相匹配的調(diào)用指令轉(zhuǎn)換映射的情況下,基于所述第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)所述第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與所述目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令。
54、可選地,所述裝置還包括:
55、創(chuàng)建模塊,用于在所述webgpu應(yīng)用程序的第一渲染包中不存在與所述第一圖形渲染調(diào)用指令相匹配的調(diào)用指令轉(zhuǎn)換映射的情況下,創(chuàng)建所述第一圖形渲染調(diào)用指令與所述第二圖形渲染調(diào)用指令之間的第一轉(zhuǎn)換映射;
56、第一添加模塊,用于將所述第一轉(zhuǎn)換映射添加到所述第一渲染包中,以對(duì)所述第一渲染包進(jìn)行更新,得到更新后的第一渲染包。
57、可選地,所述第一渲染包的數(shù)據(jù)結(jié)構(gòu)為字典樹。
58、可選地,所述裝置還包括:
59、確定模塊,用于在第一緩存空間中存在與所述第二圖形渲染調(diào)用指令包含的第二圖形繪制狀態(tài)參數(shù)相匹配的第一參數(shù)渲染映射的情況下,從所述第一參數(shù)渲染映射確定所述第二圖形渲染調(diào)用指令對(duì)應(yīng)的第二圖形渲染編碼;其中,所述第一緩存空間與所述webgpu應(yīng)用程序相連接;所述第一緩存空間的數(shù)據(jù)結(jié)構(gòu)為有向無環(huán)圖;
60、第二渲染模塊,用于基于所述第二圖形渲染編碼,在所述webgpu應(yīng)用程序中進(jìn)行圖形渲染,得到第二圖形;
61、第二添加模塊,用于在所述第一緩存空間中不存在與所述第二圖形繪制狀態(tài)參數(shù)相匹配的參數(shù)渲染映射的情況下,基于所述第二圖形繪制狀態(tài)參數(shù)和所述第一圖形渲染編碼,生成第二參數(shù)渲染映射,并將所述第二參數(shù)渲染映射添加進(jìn)所述第一緩存空間中。
62、第三方面,本技術(shù)實(shí)施例提供一種電子設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序以實(shí)現(xiàn)如上任意一項(xiàng)所述的面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯方法。
63、第四方面,本技術(shù)實(shí)施例提供一種可讀存儲(chǔ)介質(zhì),所述可讀存儲(chǔ)介質(zhì)上存儲(chǔ)程序或指令,所述程序或指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上任意一項(xiàng)所述的面向webgpu的webgl應(yīng)用動(dòng)態(tài)翻譯方法。
64、具體的有益效果在于:
65、本技術(shù)實(shí)施例通過獲取目標(biāo)瀏覽器中webgl應(yīng)用程序的第一圖形渲染調(diào)用指令,基于第一圖形渲染調(diào)用指令的第一渲染調(diào)用類型,對(duì)第一圖形渲染調(diào)用指令進(jìn)行改寫,得到與目標(biāo)瀏覽器的webgpu應(yīng)用程序適配的第二圖形渲染調(diào)用指令,對(duì)第二圖形渲染調(diào)用指令進(jìn)行編譯,得到第一圖形渲染編碼,基于第一圖形渲染編碼,在webgpu應(yīng)用程序中進(jìn)行圖形渲染,得到第一圖形,可以對(duì)目標(biāo)瀏覽器中webgl應(yīng)用程序的第一圖形渲染調(diào)用指令,基于該調(diào)用指令的渲染調(diào)用類型進(jìn)行改寫,以使得可以在目標(biāo)瀏覽器中的webgpu應(yīng)用程序中執(zhí)行圖形渲染,得到第一圖形,能夠使得webgl應(yīng)用程序可以利用webgpu應(yīng)用程序以實(shí)現(xiàn)webgl應(yīng)用程序自身的圖形渲染需求,從而可以在一定程度上提升webgl應(yīng)用程序的圖形渲染性能。