Метод GPUQueue: copyExternalImageToTexture()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продуктивной среде внимательно изучите таблицу совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод copyExternalImageToTexture() интерфейса GPUQueue копирует снимок, взятый из исходного изображения, видео или холста, в заданный GPUTexture.
Использование этой функции позволяет агенту пользователя определить наиболее эффективный способ копирования данных для каждого типа источника.
Синтаксис
copyExternalImageToTexture(source, destination, copySize)
Параметры
source-
Объект, представляющий источник для записи в место назначения, и его происхождение. Он может содержать следующие свойства:
source-
Объект, предоставляющий источник снимка для копирования. Он может быть объектом
HTMLCanvasElement,HTMLImageElement,HTMLVideoElement,ImageBitmap,ImageData,OffscreenCanvasилиVideoFrame. Данные изображения-источника захватываются в точный момент вызоваcopyExternalImageToTexture(). originНеобязательно-
Объект или массив, определяющий происхождение копирования — верхний левый угол подмножества источника, из которого нужно скопировать. Вместе с
copySize, он определяет полное подмножество источника. Значенияxиyпо умолчанию равны 0, если любой изoriginопущен.Вот пример массива:
origin: [0, 0];
Эквивалент в виде объекта:
origin: { x: 0, y: 0 } flipYНеобязательно-
Булево значение. Если установлено в
true, захват изображения переворачивается по вертикали. Если опущено,flipYпо умолчанию равноfalse.
destination-
Объект, определяющий подресурс текстуры и начало для записи захваченного изображения, а также метаданные кодирования. Он может содержать следующие свойства:
aspectНеобязательно-
Перечислимое значение, определяющее, какие аспекты текстуры нужно записать в изображение. Возможные значения:
"all"-
Будут записаны все доступные аспекты формата текстуры, что может означать все или любые из цветовых, глубины и рельефа, в зависимости от формата.
"depth-only"-
Будет записан только аспект глубины формата глубины или рельефа.
"stencil-only"-
Будет записан только аспект рельефа формата глубины или рельефа.
Если опущено,
aspectпринимает значение"all". colorSpaceНеобязательно-
Перечислимое значение, описывающее цветовое пространство и кодирование, используемые для кодирования данных в целевой текстуре. Возможные значения:
"srgb"и"display-p3".Если опущено,
colorSpaceпо умолчанию равно"srgb".Примечание: Кодирование может привести к записи в целевую текстуру значений за пределами диапазона
[0, 1], если ее формат их может представить. В противном случае результаты ограничены диапазоном формата целевой текстуры. Преобразование может не потребоваться, еслиcolorSpaceсоответствует цветовому пространству исходного изображения. mipLevelНеобязательно-
Число, представляющее уровень mip-карты текстуры, в которую нужно записать изображение. Если опущено,
mipLevelпо умолчанию равно 0. originНеобязательно-
Объект или массив, определяющий начало копирования — минимальный угол области текстуры для записи данных изображения. Вместе с
copySize, он определяет полное подмножество для записи. Значенияx,y, иzпо умолчанию равны 0, если любой изoriginопущен.Пример массива:
origin: [0, 0, 0];
Эквивалент в виде объекта:
origin: { x: 0, y: 0, z: 0 } premultipliedAlphaНеобязательно-
Булево значение. Если установлено в
true, данные изображения, записанные в текстуру, будут иметь цветовые каналы RGB, умноженные на альфа-канал. Если опущено,premultipliedAlphaпо умолчанию равноfalse.Примечание: Если этот параметр установлен в
trueиsourceтакже умножено, исходные цветовые значения RGB должны быть сохранены, даже если они превышают соответствующие значения альфа. texture-
Объект
GPUTexture, представляющий текстуру для записи данных.
copySize-
Объект или массив, определяющий
width,height, иdepthOrArrayLayers— для области копирования.Пример массива:
origin: [16, 1, 1];
Эквивалент в виде объекта:
origin: { width: 16, height: 1, depthOrArrayLayers: 1 }Значение
widthдолжно быть включено. Если значенияheightилиdepthOrArrayLayersопущены, они по умолчанию равны 1.
Значение возврата
Нет (Undefined).
Исключения
-
OperationErrorDOMException -
Метод выбрасывает
OperationErrorесли не выполнены следующие условия:-
source.origin.x+ ширина области, в которую копируется изображение, меньше или равна ширине исходного изображения. -
source.origin.y+ высота области, в которую копируется изображение, меньше или равна высоте исходного изображения. -
source.origin.z+ глубина или количество слоёв массива области, в которую копируется изображение, меньше или равна 1. -
dataOffsetравно или меньше размераdata. - Размер
data(при преобразовании в байты, в случаеTypedArrays) кратен 4.
-
-
SecurityErrorDOMException -
Выбрасывается, если данные исходного изображения имеют другой источник.
Валидация
Следующие критерии должны быть выполнены при вызове writeTexture(), в противном случае генерируется GPUValidationError, и GPUQueue становится недопустимым:
-
mipLevelменьше, чем целевое значениеGPUTexture.mipLevelCount. -
origin.xкратно ширине блока текселя целевогоGPUTexture.format. -
origin.yкратно высоте блока текселя целевогоGPUTexture.format. - Если целевой
GPUTexture.format— это формат глубины или трафарета, размер захвата изображения равенsize. - Целевое значение
GPUTexture.usageвключает флагиGPUTextureUsage.COPY_DSTиGPUTextureUsage.RENDER_ATTACHMENT. - Целевое значение
GPUTexture.dimensionравно"2d". - Целевое значение
GPUTexture.sampleCountравно 1. - Целевой
GPUTexture.format— один из следующих (поддерживающих использованиеGPUTextureUsage.RENDER_ATTACHMENT):"r8unorm""r16float""r32float""rg8unorm""rg16float""rg32float""rgba8unorm""rgba8unorm-srgb""bgra8unorm""bgra8unorm-srgb""rgb10a2unorm""rgba16float""rgba32float"
-
destination.origin.x+copySize.widthменьше или равноdestinationGPUTexturewidth. -
destination.origin.y+copySize.heightменьше или равноdestinationGPUTextureheight. -
destination.origin.z+copySize.depthOrArrayLayersменьше или равноdestinationGPUTexturedepthOrArrayLayers. - Ширина
destinationGPUTexture.widthкратна ширине блока текселя целевогоGPUTexture.format. - Высота
destinationGPUTexture.heightкратна высоте блока текселя целевогоGPUTexture.format.
Примеры
В примере «Куб с текстурой» (Textured Cube) в примерах WebGPU Textured Cube example используется следующий фрагмент для извлечения изображения и загрузки его в GPUTexture:
let cubeTexture;
{
const img = document.createElement("img");
img.src = new URL(
"../../../assets/img/Di-3d.png",
import.meta.url,
).toString();
await img.decode();
const imageBitmap = await createImageBitmap(img);
cubeTexture = device.createTexture({
size: [imageBitmap.width, imageBitmap.height, 1],
format: "rgba8unorm",
usage:
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.COPY_DST |
GPUTextureUsage.RENDER_ATTACHMENT,
});
device.queue.copyExternalImageToTexture(
{ source: imageBitmap },
{ texture: cubeTexture },
[imageBitmap.width, imageBitmap.height],
);
}
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpuqueue-copyexternalimagetotexture |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
copyExternalImageToTexture |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
предварительная версияВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
предварительная версия | 121 | Нет | 81 | Нет | 25.0 | 121 |
htmlimageelement_imagedata_source |
118 | 118 | Нет | 104 | Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
videoframe_source |
116 | 116 | Нет | 102 | предварительная версия | 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/copyExternalImageToTexture