纹理映射
64×64 的 "rgba8unorm" 棋盘格用 writeTexture() 上传。每行 256 字节,刚好满足 bytesPerRow 必须是 256 的倍数。采样器使用 "nearest",格子放大后仍然清楚。讲解见纹理与采样器。
棋盘格
const size = 64;const bytesPerRow = 256;const pixels = new Uint8Array(bytesPerRow * size);// 按 8×8 像素填两种颜色,偏移是 y * bytesPerRow + x * 4
const texture = device.createTexture({ size: [size, size], format: "rgba8unorm", usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,});device.queue.writeTexture( { texture }, pixels, { bytesPerRow }, { width: size, height: size },);
const sampler = device.createSampler({ magFilter: "nearest", minFilter: "nearest",});
const bindGroup = device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [ { binding: 0, resource: texture.createView() }, { binding: 1, resource: sampler }, ],});@group(0) @binding(0) var gradientTex: texture_2d<f32>;@group(0) @binding(1) var gradientSampler: sampler;
@fragmentfn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f { return textureSample(gradientTex, gradientSampler, uv);}