1

WebGPU では、記述子を定義することでレンダー パスを作成できます。

const renderPassDesc: GPURenderPassDescriptor = {
  colorAttachments: [
    {
      view: context.getCurrentTexture().createView(),
      loadValue: [0.2, 0.3, 0.5, 1],
      storeOp: "store"
    }
  ]
};

そして、コマンドエンコーダーを介して実行し、記録を開始します.

const commandEncoder = device.createCommandEncoder();
const renderPass = commandEncoder.beginRenderPass(renderPassDesc);

つまり、基本的に、記録を開始するには現在のテクスチャが必要なようです(つまり、呼び出しcontext.getCurrentTexture().createView()を行わないとディスクリプタを作成できず、それがないと記録を開始できません)。しかし、API は、テクスチャがフレームごとに変更される可能性があることを示唆しているようです(API が異なり、スワップ チェーンからテクスチャを取得していた数か月前まではそうであったことに注意してください)。したがって、基本的に、異なるフレーム間でレンダー パスを再利用することはできないようです (もちろん、スワップ チェーンにレンダリングせず、代わりにオフスクリーン テクスチャをターゲットにする場合を除きます)。

それで、質問はです。WebGPU では、複数のフレームで同じレンダー パスを再利用できますか?

バルカンとの比較

私の質問は、Vulkan に (少し) さらされたことに由来します。VKImageVulkan では、スワップ チェーン内のオブジェクトの数を事前に知る方法があるため、記録されたリソースを再利用できます。0、 、などの 0 ベースのインデックスを持つことに1なり2ます。正確な構文は覚えていませんが、基本的には、3 つの個別のコマンド バッファーを記録し、フレームごとに 1 つずつ記録VKImageして、それらをフレーム間で再利用できることを覚えています。レンダリング ループで現在のインデックスをクエリしVKImage、対応する記録されたコマンド バッファを取得するだけです。

4

1 に答える 1