【发布时间】:2022-01-26 02:03:58
【问题描述】:
在 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 的比较
我的问题源于我不得不(很少)接触 Vulkan。在 Vulkan 中,您可以重用记录的资源,因为有一种方法可以预先知道交换链中有多少 VKImage 对象;它们将具有基于 0 的索引,例如 0、1 和 2。我不记得确切的语法,但我记得基本上你可以记录 3 个单独的命令缓冲区,每个 VKImage 一个,并跨帧重复使用它们。您所要做的就是在渲染循环中查询当前VKImage 的索引并检索相应的记录命令缓冲区。
【问题讨论】:
标签: webgpu