跳到主要内容

GPUCanvas

一个 GPU 画布 —— 1× 呈现目标,作用类似于 WebGPU surface texture。使用 .image 配合 renderer:drawImage() 来合成结果。通过 canvas:beginRenderPass({ color = {{ loadOp = 'clear', storeOp = 'store', ... }} }) 渲染到它——颜色附件的 view 在省略时默认使用此画布自身的 colorView。MSAA 需要由用户自行分配 GPUTexture.new({ sampleCount = N, renderTarget = true }) 作为显式 color view,并将画布的 colorView() 设置为 resolveTarget

字段

image

renderer:drawImage() 的后备图像。

width

像素宽度。

height

像素高度。

format

画布后备纹理的本地像素格式(D3D 上为 'bgra8unorm',其他地方为 'rgba8unorm')。MSAA 解析要求源和目标具有相同的格式——始终从此值派生 GPUTexture 和管线格式:

  local fmt = canvas.format
GPUPipeline.new({ colorTargets = {{ format = fmt }}, sampleCount = 4 })

方法

resize

resize(width: number, height: number) -> ()

调整画布大小。重新创建 1× 后备纹理。任何由用户自行分配的 MSAA / 深度纹理必须由脚本重新创建以匹配新的尺寸。

colorView

colorView() -> GPUTextureView

画布后备纹理的视图。用作颜色附件、MSAA 解析目标,或在后续 pass 中用作采样器输入。

beginRenderPass

beginRenderPass(desc: RenderPassDesc) -> GPURenderPass

开启一个以此画布为目标的 GPU 渲染 pass。描述符必须包含至少一个颜色附件或一个 depthStencil 附件。颜色附件的 view 在省略时默认使用此画布的 colorView;当渲染到不同目标(例如 MSAA)时,请显式提供 view。pass 的 sampleCount 从附件中推导(WebGPU 规则:所有附件共享同一个 sampleCount)。必须在 drawCanvas 阶段内调用。在返回的 pass 上发出绘制调用,然后调用 :finish()