首页 / luma.gl / API 文档
TextureView
先看结论
纹理的只读视图:换一种解释方式看同一块显存, 不复制数据,也不改变原纹理的尺寸与内容。
texture.createView(props) → TextureView
视图不可变,创建后参数固定。需要另一种切法时再建一个,代价很低。
参数
| 参数 | 默认 | 说明 |
|---|---|---|
format | 纹理格式 | 视图格式,必须与纹理格式相同,或属于创建纹理时声明的 viewFormats |
dimension | 纹理维度 | 1d、2d、2d-array、3d、cube、cube-array |
aspect | all | all、depth-only、stencil-only,深度模板纹理专用 |
baseMipLevel | 0 | 起始 mip 层级 |
mipLevelCount | 类型声明中必填 | 可访问的 mip 层数 |
baseArrayLayer | 0 | 起始数组层 |
arrayLayerCount | 类型声明中必填 | 可访问的数组层数 |
id | — | 调试标识 |
成员
| 成员 | 说明 |
|---|---|
texture | 所属纹理 |
props | 创建时归一化的参数 |
handle | 底层视图句柄 |
destroyed | 是否已释放 |
destroy() | 释放视图,不影响原纹理 |
作为渲染附件
const target = device.createTexture({
width: 256,
height: 256,
format: 'rgba8unorm',
usage: Texture.SAMPLE | Texture.RENDER | Texture.COPY_DST
});
const fbo = device.createFramebuffer({
width: 256,
height: 256,
colorAttachments: [target.createView({ mipLevelCount: 1, arrayLayerCount: 1 })]
});
帧缓冲接受纹理或视图。传视图可以精确指定要写入的 mip 与数组层, 传纹理则使用它的默认视图。
数组纹理分层
const atlas = device.createTexture({
width: 128,
height: 128,
depth: 8,
dimension: '2d-array',
format: 'rgba8unorm',
usage: Texture.SAMPLE | Texture.RENDER
});
const layer3 = atlas.createView({
dimension: '2d',
baseArrayLayer: 3,
arrayLayerCount: 1,
baseMipLevel: 0,
mipLevelCount: 1
});
layer3 可单独作为渲染目标,写入的仍是 atlas 的第 3 层。
分层渲染是避免频繁切换帧缓冲的常用手段。
mip 层单独访问
生成 mipmap 后,可以给某一层建视图,用于模糊效果或调试。
mipLevelCount 与 baseMipLevel 组合出的范围
不能超出纹理创建时声明的层数。
格式重解释
WebGPU 要求视图格式与纹理格式一致,或在创建纹理时通过
viewFormats 预先声明。只改维度、mip 范围或数组层不需要额外声明。
纹理销毁后视图随之失效。 视图本身只持有引用,不拥有显存。 继续使用已销毁纹理的视图会拿到空句柄,调用前先确认纹理仍然存活。
经纬志(2026)。《TextureView》。https://www.jingweizhi.com/lumagl/api/texture-view.html(访问日期 2026-11-03)。