顶点缓冲区:把几何数据送入管线
ArrayStride、Attribute 与 VertexStepMode
把位置和颜色交错存储在一个 GPUBuffer 中,并用顶点缓冲区布局解释每一段字节。
先明确本课目标
创建 VERTEX 缓冲区
配置 arrayStride 与 attributes
理解 shaderLocation 的对应关系
GPUBuffer 只是一段字节;vertex.buffers 布局才告诉管线“每隔多少字节、从哪个偏移、按什么格式解释”。
GPU 怎样知道一串字节里哪个是位置、哪个是颜色?
Vertex Buffer 只是字节;GPUVertexBufferLayout 用 arrayStride、shaderLocation、format 和 offset 描述每条记录及字段位置。WGSL 的 @location 必须与 shaderLocation 对上。
javascriptconst layout = {
arrayStride: 20,
attributes: [
{ shaderLocation: 0, offset: 0, format: 'float32x2' },
{ shaderLocation: 1, offset: 8, format: 'float32x3' },
],
};- arrayStride = 20 每个顶点占 2×4 + 3×4 = 20 字节。
- offset position 从第 0 字节开始,color 从第 8 字节开始。
- shaderLocation 0 和 1 分别连接 WGSL 的 @location(0) 与 @location(1)。
每次顶点调用按 stride 前进一条记录,并把字段转换为 WGSL 声明的向量类型。
OPTIONAL · 按需查阅完整术语表与概念边界遇到陌生术语时再展开,不打断主线实验。
展开⌄
边改边运行
浏览器加载后会激活代码编辑器、独立运行环境与实时输出。
用两个独立缓冲区分别提供 position 和 color。
回到原理,解释刚才发生了什么
先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。
核心讲解
交错与分离布局
位置、法线、颜色可以放在一个交错缓冲区,也可以拆成多个缓冲区。交错通常利于一起读取,分离更利于独立更新。
格式决定读取宽度
float32x2 会读取 8 字节,float32x3 读取 12 字节。offset 与 arrayStride 必须满足对齐和边界要求。
OPTIONAL · 迁移时查阅WebGPU 与 WebGL2 对照主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。
展开⌄
字节布局相同,WebGL 把解释方式存在 VAO 状态里,WebGPU 把它固定在 Pipeline。
WebGL
bindBuffer 后用 vertexAttribPointer/enableVertexAttribArray 记录属性解释。
WebGPU
GPUBuffer 只保存字节;arrayStride、format、offset 位于 vertex buffer layout。
迁移时先写一张字节布局表,再同时核对 TypedArray、Pipeline layout 与 WGSL 输入。