Spec-Zone.ru › Web APIs

GPURenderBundleEncoder: метод drawIndexedIndirect()

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментальная: Это экспериментальная технология
Перед использованием в продакшене внимательно проверьте таблицу совместимости с браузерами.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод drawIndexedIndirect() интерфейса GPURenderBundleEncoder рисует индексированные примитивы, используя параметры, считываемые из GPUBuffer.

Примечание: Этот метод функционально идентичен своему эквиваленту в GPURenderPassEncoder — drawIndexedIndirect().

Синтаксис

drawIndexedIndirect(indirectBuffer, indirectOffset)

Параметры

indirectBuffer

GPUBuffer, содержащий indexCount, instanceCount, firstIndex, baseVertex, и firstInstance значения, необходимые для выполнения операции рисования. Буфер должен содержать плотный блок из пяти 32-битных беззнаковых целых чисел, представляющих значения (всего 20 байт), в том же порядке, что и аргументы для GPURenderBundleEncoder.drawIndexed(). Например:

const uint32 = new Uint32Array(5);
uint32[0] = 3; // The indexCount value
uint32[1] = 1; // The instanceCount value
uint32[2] = 0; // The firstIndex value
uint32[3] = 0; // The baseVertex value
uint32[4] = 0; // The firstInstance value

// Write values into a GPUBuffer
device.queue.writeBuffer(buffer, 0, uint32, 0, uint32.length);

Примечание: Для использования ненулевых значений firstInstance необходимо включить indirect-first-instance функцию. Если функция indirect-first-instance не включена, и firstInstance не равно нулю, вызов drawIndexedIndirect() будет обработан как пустое действие.

indirectOffset

Смещение в байтах внутри indirectBuffer, где начинаются данные значений.

Возвращаемое значение

None (Undefined).

Проверка

При вызове drawIndirect() должны быть выполнены следующие критерии, в противном случае генерируется GPUValidationError, и GPURenderBundleEncoder становится недействительным:

  • indirectBuffer's GPUBuffer.usage содержит флаг GPUBufferUsage.INDIRECT.
  • indirectOffset + общий размер, указанный параметрами значений в indirectBuffer, меньше или равен indirectBuffer's GPUBuffer.size.
  • indirectOffset кратно 4.

Примеры

// ...

// Create GPURenderBundleEncoder
const bundleEncoder = device.createRenderBundleEncoder(descriptor);

// Set pipeline and vertex buffer
bundleEncoder.setPipeline(renderPipeline);
bundleEncoder.setVertexBuffer(0, vertexBuffer);
bundleEncoder.setIndexBuffer(indexBuffer, "uint16");

// Create drawIndexedIndirect values
const uint32 = new Uint32Array(5);
uint32[0] = 3;
uint32[1] = 1;
uint32[2] = 0;
uint32[3] = 0;
uint32[4] = 0;

// Create a GPUBuffer and write the draw values into it
const drawValues = device.createBuffer({
  size: 20,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.INDIRECT,
});
device.queue.writeBuffer(drawValues, 0, uint32, 0, uint32.length);

// Draw the vertices
bundleEncoder.drawIndexedIndirect(drawValues, 0);

// End the bundle recording
const renderBundle = bundleEncoder.finish();

// ...

Спецификации

Спецификация
WebGPU
# dom-gpurendercommandsmixin-drawindexedindirect

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
drawIndexedIndirect
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
previewВ настоящее время поддерживается только на Linux и Windows.
99В настоящее время поддерживается только на ChromeOS, macOS и Windows.
preview 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/GPURenderBundleEncoder/drawIndexedIndirect

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API