经纬志
首页 / luma.gl / API 文档

TextureView

先看结论

纹理的只读视图:换一种解释方式看同一块显存, 不复制数据,也不改变原纹理的尺寸与内容。

最后验证 2026-11-03 · luma.gl 9.4 · 更新 2026-10-29 · 引用本文
texture.createView(props) → TextureView

视图不可变,创建后参数固定。需要另一种切法时再建一个,代价很低。

参数

参数默认说明
format纹理格式视图格式,必须与纹理格式相同,或属于创建纹理时声明的 viewFormats
dimension纹理维度1d、2d、2d-array、3d、cube、cube-array
aspectallall、depth-only、stencil-only,深度模板纹理专用
baseMipLevel0起始 mip 层级
mipLevelCount类型声明中必填可访问的 mip 层数
baseArrayLayer0起始数组层
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)。