GPUDevice: метод createTexture()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология .
Перед использованием в продакшене внимательно изучите таблицу совместимости браузеров .
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод createTexture() интерфейса GPUDevice создаёт GPUTexture для хранения одномерных, двумерных или трёхмерных массивов данных, таких как изображения, для использования в операциях рендеринга на GPU.
Синтаксис
createTexture(descriptor)
Параметры
descriptor-
Объект, содержащий следующие свойства:
dimensionНеобязательно-
Перечисление, указывающее уровень размерности текстуры. Возможные значения:
-
"1d": Текстура одномерная. -
"2d": Текстура двумерная или массив двумерных слоёв. -
"3d": Текстура трёхмерная.
dimensionпо умолчанию равно"2d", если значение не указано. -
format-
Перечисление, определяющее формат текстуры. Все возможные значения приведены в разделе Форматы текстур спецификации.
Примечание:
- Для создания текстур формата
depth32float-stencil8необходимо включить функциюdepth32float-stencil8. - Для создания двумерных сжатых BC текстур
GPUTextureформатов:bc1-rgba-unorm,bc1-rgba-unorm-srgb,bc2-rgba-unorm,bc2-rgba-unorm-srgb,bc3-rgba-unorm,bc3-rgba-unorm-srgb,bc4-r-unorm,bc4-r-snorm,bc5-rg-unorm,bc5-rg-snorm,bc6h-rgb-ufloat,bc6h-rgb-float,bc7-rgba-unorm, иbc7-rgba-unorm-srgbнеобходимо включить функциюtexture-compression-bc. - Для создания двумерных сжатых ASTC текстур
GPUTextureформатов:astc-4x4-unorm,astc-4x4-unorm-srgb,astc-5x4-unorm,astc-5x4-unorm-srgb,astc-5x5-unorm,astc-5x5-unorm-srgb,astc-6x5-unorm,astc-6x5-unorm-srgb,astc-6x6-unorm,astc-6x6-unorm-srgb,astc-8x5-unorm,astc-8x5-unorm-srgb,astc-8x6-unorm,astc-8x6-unorm-srgb,astc-8x8-unorm,astc-8x8-unorm-srgb,astc-10x5-unorm,astc-10x5-unorm-srgb,astc-10x6-unorm,astc-10x6-unorm-srgb,astc-10x8-unorm,astc-10x8-unorm-srgb,astc-10x10-unorm,astc-10x10-unorm-srgb,astc-12x10-unorm,astc-12x10-unorm-srgb, иastc-12x12-unorm``astc-12x12-unorm-srgbнеобходимо включить функциюtexture-compression-astc. - Для создания двумерных сжатых ETC2 текстур
GPUTextureформатов:etc2-rgb8unorm,etc2-rgb8unorm-srgb,etc2-rgb8a1unorm,etc2-rgb8a1unorm-srgb,etc2-rgba8unorm,etc2-rgba8unorm-srgb,eac-r11unorm,eac-r11snorm,eac-rg11unorm, иeac-rg11snormнеобходимо включить функциюtexture-compression-etc2.
- Для создания текстур формата
labelНеобязательно-
Строка, содержащая метку, которая может использоваться для идентификации объекта, например, в сообщениях
GPUErrorили предупреждениях консоли. mipLevelCountНеобязательно-
Число, указывающее количество уровней mipmap текстуры. Если не указано, по умолчанию равно 1.
sampleCountНеобязательно-
Число, указывающее количество сэмплов текстуры. Для корректного значения должно быть 1 или 4. Если не указано, по умолчанию равно 1. Значение, большее 1, указывает на многообразную текстуру.
size-
Объект или массив, определяющий ширину, высоту и количество слоёв глубины/массива текстуры. Ширина должна быть всегда указана, в то время как высота и глубина/количество слоёв массива являются необязательными и будут по умолчанию равны 1, если не указаны.
Пример массива
size.size: [16, 16, 2];
Эквивалентный объект выглядит так:
size: { width: 16, height: 16, depthOrArrayLayers: 2 } usage-
Битовые флаги, представляющие разрешённые способы использования
GPUTexture. Возможные значения указаны в таблицеGPUTexture.usage.Несколько возможных способов использования могут быть указаны, разделив значения символами "|", например:
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
Примечание:
- Для указания способа использования
STORAGE_BINDINGдляbgra8unorm-formatGPUTextureнеобходимо включить функциюbgra8unorm-storage. - Для указания способа использования
RENDER_ATTACHMENTдляrg11b10ufloat-formatGPUTexture, а также его смешивания и многообразной выборки, необходимо включить функциюrg11b10ufloat-renderable.
- Для указания способа использования
viewFormatsНеобязательно-
Массив перечисляемых значений, определяющих другие форматы текстур, разрешённые при вызове
GPUTexture.createView()для этой текстуры, помимо формата текстуры, указанного в полеformat.
Возвращаемое значение
Объект GPUTexture.
Проверка
Следующие критерии должны быть соблюдены при вызове createTexture(), в противном случае генерируется GPUValidationError, и возвращается некорректный объект GPUTexture:
- Указан корректный
usage. - Значения, указанные в
size(ширина, высота или глубина/количество слоёв массива), должны быть больше 0. -
mipLevelCountдолжно быть больше 0. -
sampleCountдолжно быть равно 1 или 4. - Если
dimensionустановлено в"1d":- Значение ширины
sizeдолжно быть меньше или равно пределуmaxTextureDimension1DустройстваGPUDevice(предел). - Значения высоты и глубины/количества слоёв массива
sizeдолжны быть равны 1. - Значение
sampleCountдолжно быть равно 1. - Значение
formatне должно быть сжатым форматом формат сжатия или форматом глубины/стенок формат глубины/стенок.
- Значение ширины
- Если
dimensionустановлено в"2d": - Если
dimensionустановлено в"3d":- Значения ширины, высоты и глубины/количества слоёв массива
sizeдолжны быть меньше или равны пределуmaxTextureDimension3DустройстваGPUDevice(предел). - Значение
sampleCountдолжно быть равно 1. - Значение
formatне должно быть сжатым форматом формат сжатия или форматом глубины/стенок формат глубины/стенок.
- Значения ширины, высоты и глубины/количества слоёв массива
- Значение ширины
sizeдолжно быть кратно ширине блока текстуры. - Значение высоты
sizeдолжно быть кратно высоте блока текстуры. - Если
sampleCountбольше 1:-
mipLevelCountдолжно быть равно 1. - Значение глубины/количества слоёв массива
sizeдолжно быть равно 1. -
usageвключает флагGPUTextureUsage.RENDER_ATTACHMENT. -
usageне включает флагGPUTextureUsage.STORAGE_BINDING. - Указанный формат поддерживает многократную выборку.
-
- Значение
mipLevelCountдолжно быть меньше или равно максимальному количеству уровней mip. - Форматы, указанные в
formatиviewFormatsявляются совместимыми друг с другом. - Если
usageвключает флагGPUTextureUsage.RENDER_ATTACHMENT:-
formatявляется рендерируемым форматом (то есть форматом цветного рендеринга или форматом глубины/стенок). -
dimensionустановлено в"2d".
-
- Если
usageвключает флагGPUTextureUsage.STORAGE_BINDING:- Указанный
formatвключает возможностьSTORAGE_BINDING(см. таблицу простых цветовых форматов для справки).
- Указанный
Примеры
В примере Textured Cube на WebGPU, текстура для использования на гранях куба создаётся:
- Загрузка изображения в
HTMLImageElementи создание изображения из растрового изображения с помощьюcreateImageBitmap(). - Создание новой текстуры с помощью
createTexture(). - Копирование растрового изображения в текстуру с помощью
GPUQueue.copyExternalImageToTexture().
//...
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-gpudevice-createtexture |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
createTexture |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 121 | Нет | 81 | Нет | 25.0 | 121 |
texture_rgb10a2uint |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 105В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- The WebGPU API
© 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/GPUDevice/createTexture