GPUQueue: writeTexture() 方法
GPUQueue
接口的 writeTexture()
方法将提供的資料來源写入给定的 GPUTexture
。
这是一个便利函数,提供了一种替代方法,可以使用缓冲区映射和缓冲区到纹理的复制来设置纹理数据。它允许用户代理确定将数据复制到该位置的最有效方式。
语法
writeTexture(destination, data, dataLayout, size)
参数
destination
-
一个对象,定义了将数据源写入的纹理子资源和原点,它可以采用以下属性
aspect
可选-
一个枚举值,定义了要将数据写入纹理的哪些方面。可能的值包括
"all"
-
将写入纹理格式的所有可用方面,这可能意味着写入所有或任何颜色、深度和模板,具体取决于你所使用的格式类型。
"depth-only"
-
仅将写入 深度或模板格式 的深度方面。
"stencil-only"
-
仅将写入深度或模板格式的模板方面。
如果省略,
aspect
将取值为"all"
。 mipLevel
可选-
一个数字,表示要将数据写入的纹理的 mip 级别。如果省略,
mipLevel
默认值为 0。 origin
可选-
一个对象或数组,指定副本的原点 - 要将数据写入的纹理区域的最小角。与
size
一起,它定义了要复制的区域的全部范围。如果省略任何或所有origin
,x
、y
和z
值将默认为 0。以下是一个数组示例
jsorigin: [0, 0, 0];
对象等效项将如下所示
jsorigin: { x: 0, y: 0, z: 0 }
texture
-
一个
GPUTexture
对象,表示要将数据写入的纹理。
data
-
一个对象,表示要写入
GPUTexture
的数据源。它可以是ArrayBuffer
、TypedArray
或DataView
。 dataLayout
-
定义了
data
中包含的内容布局的对象。可能的取值包括offset
可选-
从
data
开头到要复制的图像数据开头的偏移量(以字节为单位)。如果省略,则offset
默认为 0。 bytesPerRow
可选-
一个数字,表示每个块行(即完整纹理块的行)的起始位置到下一块行的起始位置之间的跨度(以字节为单位)。如果有多个块行(即复制高度或深度大于一个块),则需要此参数。
rowsPerImage
可选-
每个纹理单张图像的块行数。
bytesPerRow
×rowsPerImage
将给出每个完整图像的起始位置之间的跨度(以字节为单位)。如果要复制多个图像,则需要此参数。
size
-
一个对象或数组,指定复制的范围 — 写入数据的纹理区域的远角。与
destination.origin
一起,定义了要复制到的完整区域的范围。有关对象/数组结构的示例,请参阅destination.origin
。
返回值
无 (undefined
).
验证
调用writeTexture()
时,必须满足以下条件,否则将生成GPUValidationError
,并且GPUQueue
将变为无效
mipLevel
小于目标GPUTexture.mipLevelCount
.origin.x
是目标GPUTexture.format
的纹理块宽度的倍数。origin.y
是目标GPUTexture.format
的纹理块高度的倍数。- 如果目标
GPUTexture.format
是深度或模板格式或GPUTexture.sampleCount
大于 1,则子资源大小等于size
。 - 目标
GPUTexture.usage
包含GPUTextureUsage.COPY_DST
标志。 - 目标
GPUTexture.sampleCount
为 1。 destination.origin.x
+destination
GPUTexture.width
小于或等于写入destination
GPUTexture
的子资源的宽度。destination.origin.y
+destination
GPUTexture.height
小于或等于写入destination
GPUTexture
的子资源的高度。destination.origin.z
+destination
GPUTexture.depthOrArrayLayers
小于或等于写入destination
GPUTexture
的子资源的depthOrArrayLayers。destination
GPUTexture.width
是目标GPUTexture.format
的纹理块宽度的倍数。destination
GPUTexture.height
是目标GPUTexture.format
的纹理块高度的倍数。destination.aspect
指的是目标GPUTexture.format
的单个方面。- 该方面是根据深度或模板格式有效的图像复制目标。
destination
与GPUTexture.format
兼容。
示例
在高效渲染glTF模型中,定义了一个用于创建纯色纹理的函数
function createSolidColorTexture(r, g, b, a) {
const data = new Uint8Array([r * 255, g * 255, b * 255, a * 255]);
const texture = device.createTexture({
size: { width: 1, height: 1 },
format: "rgba8unorm",
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
});
device.queue.writeTexture({ texture }, data, {}, { width: 1, height: 1 });
return texture;
}
这可用于定义材料库中使用的标准纹理
const opaqueWhiteTexture = createSolidColorTexture(1, 1, 1, 1);
const transparentBlackTexture = createSolidColorTexture(0, 0, 0, 0);
const defaultNormalTexture = createSolidColorTexture(0.5, 0.5, 1, 1);
规范
规范 |
---|
WebGPU # dom-gpuqueue-writetexture |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- The WebGPU API