GPUQueue: метод writeTexture()
Ограниченная доступность
Эта функция не является базовой, поскольку она не работает во всех широко используемых браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в поддерживающих браузерах (некоторые или все).
Примечание: Эта функция доступна в Web Workers.
Метод writeTexture() интерфейса GPUQueue записывает указанный источник данных в заданную GPUTexture.
Это удобная функция, предоставляющая альтернативу установке данных текстуры с помощью буферирования и копирования данных из буфера в текстуру. Она позволяет агенту пользователя определить наиболее эффективный способ копирования данных.
Синтаксис
writeTexture(destination, data, dataLayout, size)
Параметры
destination-
Объект, определяющий подресурс текстуры и исходную точку для записи данных, который может содержать следующие свойства:
aspectНеобязательно-
Перечислимое значение, определяющее, какие аспекты текстуры записывать. Возможные значения:
"all"-
Будут записаны все доступные аспекты формата текстуры, что может означать все или любые из цветового, глубинного и стереоскопического аспектов в зависимости от используемого формата.
"depth-only"-
Записывается только глубинная часть формата глубины или стереоскопического изображения.
"stencil-only"-
Записывается только стереоскопическая часть формата глубины или стереоскопического изображения.
Если опущено,
aspectпринимает значение"all". mipLevelНеобязательно-
Число, представляющее уровень mip-мапы текстуры для записи данных. Если опущено,
mipLevelпо умолчанию равно 0. originНеобязательно-
Объект или массив, определяющий начало копирования — минимальную вершину региона текстуры, в который будут записаны данные. Вместе с
size, это определяет весь регион для копирования.x,y, иzпо умолчанию равны 0, если какой-либо изoriginопущен.Пример массива:
origin: [0, 0, 0];
Эквивалентный объект:
origin: { 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должно быть меньше, чем количество уровней mip-мапы назначения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+destinationGPUTexture.widthдолжно быть меньше или равно ширине подресурса для записи вdestinationGPUTexture. -
destination.origin.y+destinationGPUTexture.heightдолжно быть меньше или равно высоте подресурса для записи вdestinationGPUTexture. -
destination.origin.z+destinationGPUTexture.depthOrArrayLayersдолжно быть меньше или равно глубине или количеству слоёв массива подресурса для записи вdestinationGPUTexture. - Ширина подресурса назначения
GPUTexture.widthдолжна быть кратна ширине блока текстуры назначенияGPUTexture.format. - Высота подресурса назначения
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 |
Совместимость с браузерами
| Рабочий стол | Мобильный телефон | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
writeTexture |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- API WebGPU
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUQueue/writeTexture