2017-01-23 35 views
0

當我寫如下代碼2D上下文:被認爲是「webgl的編碼」

var x = document.createElement("canvas"); 
var ctx = x.getContext("2d"); 
-------- 
-------- 

並且當我寫如下編碼:

一個)停止上述兩個的
var canvas = document.createElement('canvas'); 
var gl = canvas.getContext('experimental-webgl'); 
-------- 
-------- 

- 都將在GPU中運行?

b)是既視爲WebGL的編碼?

+0

這兩個代碼很可能將GPU加速(altough第一個可在舊的瀏覽器可以呈現CPU)。只有第二個是webgl,它暴露了與第一個不同的功能集。 –

+0

我有用「2d」編寫的代碼,我希望它能在「experimental-webgl」中運行。我如何使用/轉換2D代碼到webgl ...,因爲我想在GPU中運行我的代碼。 – user6730740

+0

2d和webgl上下文有非常不同的API(和不同的目的),所以沒有簡單的方法來翻譯代碼。但是,2d畫布在現代瀏覽器上默認加速爲gpu。檢查這一個:[http://stackoverflow.com/questions/32815646/is-canvas-element-in-html5-hardware-accelerated](http://stackoverflow.com/questions/32815646/is-canvas-element -in-html5-hardware-accelerated) –

回答

0

無論任一「2D」或「webgl的」被GPU加速要由瀏覽器和操作系統。

例如you can run Chrome using osmesa,它將軟件完全呈現。

一般WebGL的背景下幾乎都是GPU加速,這取決於2D背景。我知道在某種程度上,某些規模下的2D上下文在Chrome中並不是GPU加速的,因爲繪製小東西的軟件通常比GPU加速更快。不管這是否是真的,我不知道,但這是一個問題,它取決於瀏覽器和操作系統。

2D環境不是 「WebGL的」 編碼。 WebGL coding is writing GLSL shaders and calling all the necessary functions to supply those shaders with data

+0

感謝您的回答。您能否讓我知道如果代碼在GPU或CPU上運行,我該如何檢查/驗證? – user6730740

+0

你可以在chrome中查看'about:gpu'並檢查它,但是它不會告訴你它是否總是使用GPU加速,只要它可以。換句話說,即使「about:gpu」表示canvas 2d是GPU加速的,並不意味着chrome總是使用GPU加速。看上面的例子,關於小的上下文沒有被加速(至少在過去)。 對於WebGL,您還可以嘗試將'{failIfMajorPerformanceCaveat:true}'作爲第二個參數傳遞給'getContext',在這種情況下,如果它是軟件渲染它可能會失敗。當然,如果沒有webgl,它也會失敗,所以你可能需要創建2個上下文。 – gman