このページに倣って、vertical shader + fragment shaderによる三角形描画(よくあるハローワールド)と、compute shaderによるGPU計算のスクリプトを書いた。
やったことはcopilotつきの写経だったので、何が行われているのかを自分の言葉で書きたい。
navigator.gpu
navigator.gpu.requrestAdapter().requestDevice()
- 今のところおまじないだと思っている。デバイスを要求しているらしい。
- シェーダースクリプトからshader moduleの作成
- canvasのwebgpu contextの取得
- 頂点の設定
- bufferの作成
- bufferに頂点情報を書き込み
- buffer情報の設定
pipelineDescriptor
の設定- vertex, fragment, primitive, layoutをそれぞれ設定している
- vertexはshader moduleと、entrypointになる関数を設定している
- vertex, fragment, primitive, layoutをそれぞれ設定している
- render pipelineの作成
pipelineDescriptor
を引数として渡す
- command encoderの作成
- commandEncoderからpassEncoderの作成
- pass encoderでパイプラインの設置、バッファーの設置、描画、終了
- command encoderの終了を
device.queue.submit
する
パイプライン周りと、途中で作成されたいろいろなオブジェくトの役割がよくわかっていないが基本はWebGLと変わらなそう。シェーダーとしてcomputeができるようになったり、計算結果の出力先を変数にしたりといった拡張がされたような印象を持った。
three.jsとかpixijsとかはすでに対応しているらしい。 あとはいつ主要なブラウザが対応するかかなあ。