Spec-Zone.ru › Web APIs

GPURenderPassEncoder: метод drawIndirect()

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

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

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

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

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

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

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

Синтаксис

drawIndirect(indirectBuffer, indirectOffset)

Параметры

indirectBuffer

GPUBuffer, содержащий vertexCount, instanceCount, firstVertex, и firstInstance значения, необходимые для выполнения операции рисования. Буфер должен содержать плотный блок из четырёх 32-битных беззнаковых целых значений, представляющих значения (всего 16 байт), в том же порядке, что и аргументы для GPURenderPassEncoder.draw(). Например:

const uint32 = new Uint32Array(4);
uint32[0] = 3; // The vertexCount value
uint32[1] = 1; // The instanceCount value
uint32[2] = 0; // The firstVertex value
uint32[3] = 0; // The firstInstance value

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

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

indirectOffset

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

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

None (Undefined).

Валидация

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

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

Примеры

// ...

// Create GPURenderPassEncoder
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

// Set pipeline and vertex buffer
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);

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

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

// Draw the vertices
passEncoder.drawIndirect(drawValues, 0);

// End the render pass
passEncoder.end();

// End frame by passing array of GPUCommandBuffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// ...

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

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

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

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
drawIndirect
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/GPURenderPassEncoder/drawIndirect

Spec-Zone.ru

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