GPUTexture: createView() 方法
createView()
方法是 GPUTexture
接口的一部分,它会创建一个 GPUTextureView
,表示 GPUTexture
的特定视图。
语法
createView()
createView(descriptor)
参数
descriptor
可选-
包含以下属性的对象
arrayLayerCount
可选-
定义了可供视图访问的数组层数,从
baseArrayLayer
值开始。如果省略
arrayLayerCount
,则会根据以下情况赋予其值- 如果
dimension
为"1d"
、"2d"
或"3d"
,则arrayLayerCount
为 1。 - 如果
dimension
为"cube"
,则arrayLayerCount
为 6。 - 如果
dimension
为"2d-array"
或"cube-array"
,则arrayLayerCount
为GPUTexture.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
,则将根据以下方式赋予其值:- 如果
GPUTexture.dimension
为"1d"
,则dimension
为"1d"
。 - 如果
GPUTexture.dimension
为"2d"
且GPUTexture.depthOrArrayLayers
为 1,则dimension
为"2d"
。 - 如果
GPUTexture.dimension
为"2d"
且GPUTexture.depthOrArrayLayers
大于 1,则dimension
为"2d-array"
。 - 如果
GPUTexture.dimension
为"3d"
,则dimension
为"3d"
。
format
可选-
指定纹理视图格式的枚举值。有关所有可能的取值,请参见规范中的 纹理格式 部分。
如果省略
format
,则将根据以下方式赋予其值:- 如果
aspect
为"depth-only"
或"stencil-only"
,且GPUTexture.format
为 深度或模板格式,则format
将设置为等于相应的 方面特定格式。 - 否则,它将设置为等于
GPUTexture.format
。
- 如果
label
可选-
一个字符串,提供一个标签,可用于识别对象,例如在
GPUError
消息或控制台警告中。 mipLevelCount
可选-
定义可供视图访问的 mipmap 级数,从
baseMipLevel
值开始。如果省略
mipLevelCount
,则将赋予其GPUTexture.mipLevelCount
-baseMipLevel
的值。
返回值
一个 GPUTextureView
对象实例。
验证
调用 createView()
时必须满足以下条件,否则将生成 GPUValidationError
并返回一个无效的 GPUTextureView
对象:
- 如果
aspect
为"all"
,则format
等于GPUTexture.format
或在源GPUDevice.createTexture()
调用的描述符对象中指定的viewFormats
之一。 - 如果
aspect
为"depth-only"
或"stencil-only"
,则format
等于 深度或模板格式 的相应 方面特定格式。 mipLevelCount
大于 0。mipLevelCount
+baseMipLevel
小于或等于GPUTexture.mipLevelCount
。arrayLayerCount
大于 0。arrayLayerCount
+baseArrayLayer
小于或等于GPUTexture.depthOrArrayLayers
(如果GPUTexture.dimension
为"2d"
),或小于或等于 1(如果GPUTexture.dimension
为"1d"
或"3d"
)。- 如果
sampleCount
大于 1,则dimension
为"2d"
。 - 如果
dimension
为:"1d"
GPUTexture.dimension
为"1d"
arrayLayerCount
为 1
"2d"
GPUTexture.dimension
为"2d"
arrayLayerCount
为 1
"2d-array"
GPUTexture.dimension
为"2d"
"cube"
GPUTexture.dimension
为"2d"
arrayLayerCount
为 6GPUTexture.width
等于GPUTexture.height
"cube-array"
GPUTexture.dimension
为"2d"
arrayLayerCount
是 6 的倍数GPUTexture.width
等于GPUTexture.height
"3d"
GPUTexture.dimension
为"3d"
arrayLayerCount
为 1
示例
在 WebGPU 示例 立方体贴图演示 中,您将看到多个 createView()
使用示例,既用于创建 GPUDevice.createBindGroup()
调用的视图 resource
,也用于在 GPUCommandEncoder.beginRenderPass()
描述符的 depthStencilAttachment
对象中提供 view
。
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 表格仅在浏览器中加载