GPUQueue: writeTexture() 方法

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

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

GPUQueue 接口的 writeTexture() 方法将提供的資料來源写入给定的 GPUTexture

这是一个便利函数,提供了一种替代方法,可以使用缓冲区映射和缓冲区到纹理的复制来设置纹理数据。它允许用户代理确定将数据复制到该位置的最有效方式。

语法

js
writeTexture(destination, data, dataLayout, size)

参数

destination

一个对象,定义了将数据源写入的纹理子资源和原点,它可以采用以下属性

aspect 可选

一个枚举值,定义了要将数据写入纹理的哪些方面。可能的值包括

"all"

将写入纹理格式的所有可用方面,这可能意味着写入所有或任何颜色、深度和模板,具体取决于你所使用的格式类型。

"depth-only"

仅将写入 深度或模板格式 的深度方面。

"stencil-only"

仅将写入深度或模板格式的模板方面。

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

mipLevel 可选

一个数字,表示要将数据写入的纹理的 mip 级别。如果省略,mipLevel 默认值为 0。

origin 可选

一个对象或数组,指定副本的原点 - 要将数据写入的纹理区域的最小角。与 size 一起,它定义了要复制的区域的全部范围。如果省略任何或所有 originxyz 值将默认为 0。

以下是一个数组示例

js
origin: [0, 0, 0];

对象等效项将如下所示

js
origin: {
  x: 0,
  y: 0,
  z: 0
}
texture

一个 GPUTexture 对象,表示要将数据写入的纹理。

data

一个对象,表示要写入 GPUTexture 的数据源。它可以是 ArrayBufferTypedArrayDataView

dataLayout

定义了data中包含的内容布局的对象。可能的取值包括

offset 可选

data开头到要复制的图像数据开头的偏移量(以字节为单位)。如果省略,则offset默认为 0。

bytesPerRow 可选

一个数字,表示每个块行(即完整纹理块的行)的起始位置到下一块行的起始位置之间的跨度(以字节为单位)。如果有多个块行(即复制高度或深度大于一个块),则需要此参数。

rowsPerImage 可选

每个纹理单张图像的块行数。bytesPerRow × rowsPerImage 将给出每个完整图像的起始位置之间的跨度(以字节为单位)。如果要复制多个图像,则需要此参数。

size

一个对象或数组,指定复制的范围 — 写入数据的纹理区域的远角。与destination.origin一起,定义了要复制到的完整区域的范围。有关对象/数组结构的示例,请参阅destination.origin

返回值

无 (undefined).

验证

调用writeTexture()时,必须满足以下条件,否则将生成GPUValidationError,并且GPUQueue将变为无效

示例

高效渲染glTF模型中,定义了一个用于创建纯色纹理的函数

js
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;
}

这可用于定义材料库中使用的标准纹理

js
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 的浏览器中加载。

另请参阅