GPURenderPassEncoder: метод setIndexBuffer()
Ограниченная доступность
Эта функция не является базовой, так как не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в продуктивной среде внимательно проверьте таблицу совместимости с браузерами в таблице совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах. Поддерживающие браузеры.
Примечание: Эта функция доступна в Web Workers.
Метод setIndexBuffer() интерфейса GPURenderPassEncoder устанавливает текущий GPUBuffer, который будет предоставлять данные индексов для последующих команд отрисовки.
Синтаксис
setIndexBuffer(buffer, indexFormat, offset, size)
Параметры
buffer-
A
GPUBufferпредставляющий буфер, содержащий данные индексов для последующих команд отрисовки. indexFormat-
Перечисление, определяющее формат данных индексов, содержащихся в
buffer. Возможные значения:"uint16""uint32"
offsetНеобязательно-
Число, представляющее смещение в байтах внутри
buffer, где начинаются данные индексов. Если опущено,offsetпо умолчанию равно 0. sizeНеобязательно-
Число, представляющее размер в байтах данных индексов, содержащихся в
buffer. Если опущено,sizeпо умолчанию равен размеруbuffer, то естьGPUBuffer.size-offset.
Примечание к indexFormat
indexFormat определяет как тип данных значений индексов в буфере, так и, при использовании с конвейером, который определяет топологию примитива ("line-strip" или "triangle-strip"), также определяет значение перерыва примитива. Значение перерыва примитива – это значение индекса, указывающее, что следует начать новый примитив, а не продолжить построение полосы с предыдущими индексированными вершинами. Значение равно 0xFFFF для "uint16", или 0xFFFFFFFF для "uint32".
Возвращаемое значение
None (Undefined).
Проверка
При вызове setIndexBuffer() должны быть выполнены следующие условия; в противном случае генерируется GPUValidationError, и GPURenderPassEncoder становится недействительным:
-
bufferсодержит флагGPUBufferUsage.INDEXвGPUBuffer.usage. -
offset+sizeменьше или равноGPUBuffer.sizebuffer. -
offsetкратно размеру в байтахindexFormat(2 для"uint16", 4 для"uint32").
Примеры
В примере Shadow Mapping из WebGPU Samples setIndexBuffer() используется в двух отдельных проходах рендеринга в каждом кадре анимации, один для отрисовки основной модели и один для отрисовки её тени. Изучите пример кода для полного контекста.
// ...
const commandEncoder = device.createCommandEncoder();
{
const shadowPass = commandEncoder.beginRenderPass(shadowPassDescriptor);
shadowPass.setPipeline(shadowPipeline);
shadowPass.setBindGroup(0, sceneBindGroupForShadow);
shadowPass.setBindGroup(1, modelBindGroup);
shadowPass.setVertexBuffer(0, vertexBuffer);
shadowPass.setIndexBuffer(indexBuffer, "uint16");
shadowPass.drawIndexed(indexCount);
shadowPass.end();
}
{
const renderPass = commandEncoder.beginRenderPass(renderPassDescriptor);
renderPass.setPipeline(pipeline);
renderPass.setBindGroup(0, sceneBindGroupForRender);
renderPass.setBindGroup(1, modelBindGroup);
renderPass.setVertexBuffer(0, vertexBuffer);
renderPass.setIndexBuffer(indexBuffer, "uint16");
renderPass.drawIndexed(indexCount);
renderPass.end();
}
// ...
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpurendercommandsmixin-setindexbuffer |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
setIndexBuffer |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 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/GPURenderPassEncoder/setIndexBuffer