WebGPU學(xué)習(xí)筆記:01認(rèn)識(shí)WebGPU

WebGPU入門

隨著WebGPU日益成熟,本季度將贏來(lái)WebGPU正式版本的發(fā)布。關(guān)注WebGPU開發(fā)的小伙伴也越來(lái)越多。筆者也希望邊學(xué)邊記錄分享給大家。

WebGPU 簡(jiǎn)介

由W3C組織定義的一個(gè)新的API標(biāo)準(zhǔn),用于在Web上使用Javascript來(lái)控制GPU計(jì)算和繪制。該標(biāo)準(zhǔn)獲得了目前所有主流廠商的支持,由大家一起參與WebGPU的發(fā)展。有望成為一個(gè)全平臺(tái)支持的標(biāo)準(zhǔn)。

WebGPU擬補(bǔ)了過(guò)去WebGL的各種不足和背負(fù)的各種歷史包袱,其主要接入現(xiàn)代圖形API(Direct3D、Vulkman、Metal)??傊啾萕ebGL,其會(huì)更快、更強(qiáng)、更靈活,更符合Web現(xiàn)代的開發(fā)標(biāo)準(zhǔn)。

WebGL與WebGPU的那些事兒

WebGL相當(dāng)于是在使用十幾年前的OpenGL框架體系。而OpenGL本身就已經(jīng)非常古老,有將近30年歷史了。WebGL僅僅只實(shí)現(xiàn)了OpenGL ES 2.0和3.0的標(biāo)準(zhǔn),已經(jīng)無(wú)法滿足現(xiàn)代GPU框架體系,也無(wú)法滿足現(xiàn)在高性能的計(jì)算和渲染需求。蘋果公司在2018年宣布拋棄OpenGL整個(gè)框架。在2015年前后,蘋果、微軟、Khronos分別推出了基于全新GPU框架的Metal(2014年)、Direct3D 12(2015年)、Vulkan(2016年),現(xiàn)在三者被大家統(tǒng)稱為為現(xiàn)代圖形學(xué)API。W3C在制定新的Web圖形學(xué)標(biāo)準(zhǔn)也完全參考了新的三個(gè)圖形學(xué)API,拋棄了OpenGL的整個(gè)框架。

  • WebGL1.0標(biāo)準(zhǔn),2011 年定制,基于OpenGL ES2.0在Web上的實(shí)現(xiàn)
    • OpenGL ES2.0是OpenGL 2.0在移動(dòng)端的具體實(shí)現(xiàn)
    • 相當(dāng)于WebGL對(duì)標(biāo)的是2004年的OpenGL的標(biāo)準(zhǔn)
  • WebGL2.0標(biāo)準(zhǔn),對(duì)標(biāo)OpenGL 3.2 在2009年的實(shí)現(xiàn)

了解WebGPU發(fā)展歷程 @Intel 邵嘉煒

WebGPU支持現(xiàn)狀

  • Chrome Google 基于 Dawn 實(shí)現(xiàn),v94-101 版本已經(jīng)提供桌面端支持
  • FireFox Mozilla 基于 gfx-rs 實(shí)現(xiàn),Nightly Build版本支持桌面端和Android端
  • Safari Apple 基于 WebKit 實(shí)現(xiàn),開發(fā)者預(yù)覽版支持IOS、Mac

開發(fā)需求

  • 開發(fā)工具
  • 語(yǔ)言
    • TypeScript 利用其類型特性來(lái)檢查代碼是否使用正確,節(jié)省找文檔時(shí)間
    • WGSL WebGPU 新的著色器語(yǔ)言
    • HTML/CSS
  • 環(huán)境
    • Node.js
    • npm或yarn
    • CMD/Terminal

工程搭建

  • yarn create vite 創(chuàng)建一個(gè)項(xiàng)目,根據(jù)提示輸入項(xiàng)目名稱并選擇項(xiàng)目模版vanilla-ts
  • cd 項(xiàng)目名稱 進(jìn)入到項(xiàng)目目錄
  • yarn 安裝依賴
  • yarn add @webgpu/types -D 安裝webgpu的類型支持
  • tsconfig.json 配置文件中為 compilerOptions 增加 "types": ["vite/client", "@webgpu/types"]
  • yarn run dev 啟動(dòng)項(xiàng)目,根據(jù)提示在瀏覽器訪問(wèn)預(yù)覽地址

接下來(lái)所有的代碼操作入口將從 src/main.ts 開始

判斷瀏覽器是否支持WebGPU

// 判斷WebGPU是否可用,根據(jù)定義
const gpu = navigator.gpu;
if(gpu === undefined){
    throw new Error("瀏覽器不支持WebGPU");
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容