GPUQueue: метод writeBuffer()
Ограниченная доступность
Эта функция не является базовой, так как она не работает во всех наиболее распространённых браузерах.
Экспериментально: Это экспериментальная технология
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Примечание: Эта функция доступна в рабочих потоках.
Метод writeBuffer() интерфейса GPUQueue записывает предоставленный источник данных в указанный GPUBuffer.
Это удобная функция, предоставляющая альтернативу установке данных буфера с помощью отображения буфера и копирования буфера в буфер. Она позволяет агенту пользователя определить наиболее эффективный способ копирования данных.
Синтаксис
writeBuffer(buffer, bufferOffset, data, dataOffset, size)
Параметры
buffer-
Объект
GPUBuffer, представляющий буфер для записи данных. bufferOffset-
Число, представляющее смещение в байтах для начала записи данных внутри
GPUBuffer. data-
Объект, представляющий источник данных для записи в
GPUBuffer. Это может бытьArrayBuffer,TypedArrayилиDataView. dataOffsetНеобязательно-
Число, представляющее смещение для начала записи данных внутри источника данных. Это значение представляет собой количество элементов, если
data—TypedArray, и количество байтов в противном случае. Если опущено,dataOffsetпо умолчанию равно 0. sizeНеобязательно-
Число, представляющее размер содержимого для записи из
dataвbuffer. Это значение представляет собой количество элементов, еслиdata—TypedArray, и количество байтов в противном случае. Если опущено,sizeбудет равно общему размеруdata, минусdataOffset.
Возвращаемое значение
Ничего (Undefined).
Исключения
-
OperationErrorDOMException -
Метод выбрасывает
OperationErrorесли не выполнены следующие критерии:- Размер
dataравен или больше 0. -
dataOffsetравен или меньше размераdata. - Размер
data(при преобразовании в байты, в случаеTypedArrays) кратен 4.
- Размер
Валидация
При вызове writeBuffer() должны быть соблюдены следующие критерии, в противном случае генерируется GPUValidationError и GPUQueue становится недоступным:
-
bufferдоступен для использования, т.е. не недоступен (GPUBufferнедоступны, если они в данный момент отображены) или уничтожены (с помощью методаGPUBuffer.destroy()). - Использование
GPUBuffer.usagebufferвключает флагGPUBufferUsage.COPY_DST. -
bufferOffset, при преобразовании в байты, кратно 4. - Размер
data-dataOffset+bufferOffset, при преобразовании в байты, равен или меньше размераGPUBuffer.sizebuffer.
Примеры
В нашей демо-версии рендеринга мы определяем некоторые данные вершин в Float32Array, которые мы будем использовать для отрисовки треугольника:
const vertices = new Float32Array([ 0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0, 0, 1, 1, ]);
Для использования этих данных в конвейере рендеринга нам нужно поместить их в GPUBuffer. Сначала создадим буфер:
const vertexBuffer = device.createBuffer({
size: vertices.byteLength, // make it big enough to store vertices in
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});
Чтобы получить данные в буфер, мы можем использовать writeBuffer():
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpuqueue-writebuffer |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
writeBuffer |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
превьюВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
превью | 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/writeBuffer