Visual LabINTERACTIVE LEARNING
阶段 1 · 起步入门16 分钟

Canvas 配置:让 GPU 输出进入页面

GPUCanvasContext、首选格式与交换纹理

取得 webgpu 上下文,使用首选画布格式配置,并把一个清屏命令提交到当前交换纹理。

LEARNING GOALS

先明确本课目标

1

配置 GPUCanvasContext

2

理解设备像素比与画布分辨率

3

认识当前交换纹理的生命周期

MENTAL MODEL · 再建立心智模型

Canvas 不是永久纹理仓库,而是每帧借给你的“当前展示纹理”;getCurrentTexture() 的结果只属于当前帧。

MINIMAL EXAMPLE

Canvas 为什么需要显式配置?

GPUCanvasContext 是 Canvas 与 GPUDevice 之间的展示通道。configure() 固定设备、像素格式和 alpha 规则;之后每帧用 getCurrentTexture() 取得当帧展示纹理。

最小例子javascript
const context = canvas.getContext('webgpu');
const format = navigator.gpu.getPreferredCanvasFormat();

context.configure({ device, format, alphaMode: 'opaque' });
const frameTexture = context.getCurrentTexture();
  1. format 要一致 Canvas format 必须与 RenderPipeline 的 color target format 一致。
  2. 纹理属于当前帧 getCurrentTexture() 的返回值不应缓存到下一帧继续使用。
  3. 尺寸是像素数 canvas.width/height 决定实际渲染分辨率,CSS 尺寸只决定页面布局。

配置后,Render Pass 才能把颜色附件指向当前交换纹理并显示到页面。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

监听 ResizeObserver,在容器尺寸变化时自动调整画布并重绘。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

CSS 尺寸与像素尺寸

Canvas 的 CSS 宽高决定页面布局,canvas.width/height 决定实际渲染分辨率。高 DPI 屏幕通常要乘 devicePixelRatio。

02

配置项必须与管线一致

Canvas format 会成为渲染管线 color target 的格式;格式不匹配会触发验证错误。

OPTIONAL · 迁移时查阅WebGPU 与 WebGL2 对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

两者都把 GPU 输出送入 Canvas,但 WebGPU 要显式配置 Device 与像素格式。

WebGL

Context 创建时就与 Canvas 关联,drawingBufferWidth/Height 是实际绘制尺寸。

WebGPU

GPUCanvasContext 需要 configure,并在每帧取得新的 current texture。

WebGPU 的 current texture 只属于当前帧,不能像 WebGL 默认 framebuffer 那样被当成长期对象。