GPUCommandEncoder:copyTextureToTexture() 方法
GPUCommandEncoder
接口的 copyTextureToTexture()
方法编码一个将数据从一个 GPUTexture
复制到另一个的命令。
语法
copyTextureToTexture(source, destination, copySize)
参数
source
-
一个对象(参见 复制纹理对象结构),定义了要从中复制数据的纹理。结合
copySize
,它定义了源纹理子资源的区域。 destination
-
一个对象(参见 复制纹理对象结构),定义了要写入数据的纹理。结合
copySize
,它定义了目标纹理子资源的区域。 copySize
-
一个对象或数组,指定复制数据的宽度、高度和深度/数组层数。必须始终指定宽度值,而高度和深度/数组层数值是可选的,如果省略将默认值为 1。
以下是一个示例
copySize
数组js[16, 16, 2];
等效的对象如下所示
js{ width: 16, height: 16, depthOrArrayLayers: 2 }
复制纹理对象结构
复制纹理对象具有以下结构
aspect
可选-
一个枚举值,定义了要从中/向其中复制数据的纹理的哪些方面。可能的值是
"all"
-
将从/向其中复制纹理格式的所有可用方面,这可能意味着所有或任何颜色、深度和模板,具体取决于您正在处理的格式类型。
"depth-only"
-
将从/向其中复制 深度或模板格式 的仅深度方面。
"stencil-only"
-
将从/向其中复制深度或模板格式的仅模板方面。
如果省略,
aspect
将取值为"all"
。 mipLevel
可选-
一个数字,表示要从中/向其中复制数据的纹理的 mip 映射级别。如果省略,
mipLevel
默认值为 0。 origin
可选-
一个对象或数组,指定复制/目标的原点 - 要从中/向其中复制数据的纹理区域的最小角。与
size
结合,它定义了要从中/向其中复制的区域的完整范围。如果省略origin
的任何或全部,则x
、y
和z
值将默认值为 0。以下是一个示例数组
js[0, 0, 0];
等效的对象如下所示
js{ x: 0, y: 0, z: 0 }
texture
-
一个
GPUTexture
对象,表示要从中/向其中复制数据的纹理。
返回值
无 (Undefined
).
验证
在调用 copyTextureToTexture()
时,必须满足以下条件,否则将生成 GPUValidationError
,并且 GPUCommandEncoder
将变为无效。
对于 source
source
的GPUTexture.usage
包含GPUTextureUsage.COPY_SRC
标志。
对于 destination
source
的GPUTexture.usage
包含GPUTextureUsage.COPY_DST
标志。
对于 source
和 destination
mipLevel
小于GPUTexture.mipLevelCount
。origin.x
是GPUTexture.format
的纹理块宽度的倍数。origin.y
是GPUTexture.format
的纹理块高度的倍数。- 源和目标
texture
GPUTexture.format
是复制兼容的。 - 源和目标
texture
GPUTexture.sampleCount
相等。 - 如果
GPUTexture.format
是 深度或模板格式 或者GPUTexture.sampleCount
大于 1,则子资源大小等于size
。 texture
的GPUTexture.sampleCount
为 1。aspect
指的是GPUTexture.format
的单个方面。- 根据 深度或模板格式,该方面是有效的图像复制源/目标。
texture
与copySize
兼容。
示例
commandEncoder.copyTextureToTexture(
{
texture: sourceTexture,
},
{
texture: destinationTexture,
},
{
width: 16,
height: 16,
depthOrArrayLayers: 2,
},
);
规范
规范 |
---|
WebGPU # dom-gpucommandencoder-copytexturetotexture |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。