GPUTexture: createView() 方法

实验性: 这是 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,在某些或所有 支持的浏览器 中。

createView() 方法是 GPUTexture 接口的一部分,它会创建一个 GPUTextureView,表示 GPUTexture 的特定视图。

语法

js
createView()
createView(descriptor)

参数

descriptor 可选

包含以下属性的对象

arrayLayerCount 可选

定义了可供视图访问的数组层数,从 baseArrayLayer 值开始。

如果省略 arrayLayerCount,则会根据以下情况赋予其值

  • 如果 dimension"1d""2d""3d",则 arrayLayerCount 为 1。
  • 如果 dimension"cube",则 arrayLayerCount 为 6。
  • 如果 dimension"2d-array""cube-array",则 arrayLayerCountGPUTexture.depthOrArrayLayers - baseArrayLayer
aspect 可选

一个枚举值,指定纹理视图可访问纹理的哪些方面。可能的值有

"all"

纹理格式的所有可用方面都将可供视图访问,这可能意味着所有或任何颜色、深度和模板,具体取决于您处理的格式类型。

"深度优先"

只有 深度或模板格式 的深度方面将可供视图访问。

"模板优先"

只有深度或模板格式的模板方面将可供视图访问。

如果省略,aspect 将取值为 "all"

baseArrayLayer 可选

定义可供视图访问的第一个数组层的索引的数字。如果省略,baseArrayLayer 将取值为 0。

baseMipLevel 可选

表示可供视图访问的第一个(最详细)mipmap 级的数字。如果省略,baseMipLevel 将取值为 0。

dimension 可选

指定纹理视图格式的枚举值。可能的取值有:

  • "1d":纹理被视为一维图像。
  • "2d":纹理被视为单个二维图像。
  • "2d-array":纹理被视为二维图像数组。
  • "cube":纹理被视为立方体贴图。视图有 6 个数组层,对应于立方体的 [+X, -X, +Y, -Y, +Z, -Z] 面。在立方体贴图的面之间进行无缝采样。
  • "cube-array":纹理被视为 N 个打包的立方体贴图数组,每个数组有 6 个数组层,对应于立方体的 [+X, -X, +Y, -Y, +Z, -Z] 面。在立方体贴图的面之间进行无缝采样。
  • "3d":纹理被视为三维图像。

如果省略 dimension,则将根据以下方式赋予其值:

format 可选

指定纹理视图格式的枚举值。有关所有可能的取值,请参见规范中的 纹理格式 部分。

如果省略 format,则将根据以下方式赋予其值:

label 可选

一个字符串,提供一个标签,可用于识别对象,例如在 GPUError 消息或控制台警告中。

mipLevelCount 可选

定义可供视图访问的 mipmap 级数,从 baseMipLevel 值开始。

如果省略 mipLevelCount,则将赋予其 GPUTexture.mipLevelCount - baseMipLevel 的值。

返回值

一个 GPUTextureView 对象实例。

验证

调用 createView() 时必须满足以下条件,否则将生成 GPUValidationError 并返回一个无效的 GPUTextureView 对象:

示例

在 WebGPU 示例 立方体贴图演示 中,您将看到多个 createView() 使用示例,既用于创建 GPUDevice.createBindGroup() 调用的视图 resource,也用于在 GPUCommandEncoder.beginRenderPass() 描述符的 depthStencilAttachment 对象中提供 view

js
const uniformBindGroup = device.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [
    {
      binding: 0,
      resource: {
        buffer: uniformBuffer,
        offset: 0,
        size: uniformBufferSize,
      },
    },
    {
      binding: 1,
      resource: sampler,
    },
    {
      binding: 2,
      resource: cubemapTexture.createView({
        dimension: "cube",
      }),
    },
  ],
});

const renderPassDescriptor: GPURenderPassDescriptor = {
  colorAttachments: [
    {
      view: undefined, // Assigned later
      loadOp: "clear",
      storeOp: "store",
    },
  ],
  depthStencilAttachment: {
    view: depthTexture.createView(),

    depthClearValue: 1.0,
    depthLoadOp: "clear",
    depthStoreOp: "store",
  },
};

// ...

const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

// ...

规范

规范
WebGPU
# dom-gputexture-createview

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅