GPURenderBundleEncoder: метод setVertexBuffer()
Ограниченная доступность
Эта функция не относится к Baseline, поскольку она не работает во всех широко используемых браузерах.
Экспериментальная: Это экспериментальная технология Экспериментальная технология
Перед использованием в рабочей среде тщательно проверьте таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод setVertexBuffer() интерфейса GPURenderBundleEncoder устанавливает или сбрасывает текущий GPUBuffer для заданного слота, который будет предоставлять данные вершин для последующих команд отрисовки.
Примечание: Этот метод функционально идентичен своему аналогу в GPURenderPassEncoder — setVertexBuffer().
Синтаксис
setVertexBuffer(slot, buffer, offset, size)
Параметры
slot-
Число, ссылающееся на слот буфера вершин, для которого необходимо установить буфер вершин.
buffer-
GPUBuffer, представляющий буфер, содержащий данные вершин, которые будут использоваться для последующих команд отрисовки, илиnull, в этом случае любой ранее установленный буфер в данном слоте будет сброшен. offsetНеобязательно-
Число, представляющее смещение в байтах в
buffer, где начинаются данные вершин. Если опущено,offsetпо умолчанию равно 0. sizeНеобязательно-
Число, представляющее размер в байтах данных вершин, содержащихся в
buffer. Если опущено,sizeпо умолчанию равно размеруGPUBuffer.sizeoffset.
Возвращаемое значение
None (Undefined).
Проверка
При вызове setVertexBuffer() должны быть выполнены следующие критерии, в противном случае генерируется GPUValidationError, и GPURenderBundleEncoder становится недопустимым:
-
buffer'sGPUBuffer.usageсодержит флагGPUBufferUsage.VERTEX. -
slotменьше ограниченияGPUDevice'smaxVertexBufferslimit. -
offset+sizeменьше или равноGPUBuffer.sizebuffer. -
offsetкратно 4.
Примеры
Установка буфера вершин
function recordRenderPass(passEncoder) {
if (settings.dynamicOffsets) {
passEncoder.setPipeline(dynamicPipeline);
} else {
passEncoder.setPipeline(pipeline);
}
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setBindGroup(0, timeBindGroup);
const dynamicOffsets = [0];
for (let i = 0; i < numTriangles; ++i) {
if (settings.dynamicOffsets) {
dynamicOffsets[0] = i * alignedUniformBytes;
passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
} else {
passEncoder.setBindGroup(1, bindGroups[i]);
}
passEncoder.draw(3, 1, 0, 0);
}
}
Вышеприведенный фрагмент взят из примера Animometer в примерах WebGPU.
Сброс буфера вершин
// Set vertex buffer in slot 0 passEncoder.setVertexBuffer(0, vertexBuffer); // Later, unset vertex buffer in slot 0 passEncoder.setVertexBuffer(0, null);
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpurendercommandsmixin-setvertexbuffer |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
setVertexBuffer |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
превьюВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
превью | 121 | Нет | 81 | Нет | 25.0 | 121 |
unset_vertex_buffer |
117В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
117В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 103В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
превью | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- The 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/GPURenderBundleEncoder/setVertexBuffer