files/en-us/web/api/gpurenderpassencoder/drawindexed/index.md
{{APIRef("WebGPU API")}}{{SecureContext_Header}}{{AvailableInWorkers}}
The drawIndexed() method of the
{{domxref("GPURenderPassEncoder")}} interface draws indexed primitives based on the vertex and index buffers provided by {{domxref("GPURenderPassEncoder.setVertexBuffer", "setVertexBuffer()")}} and {{domxref("GPURenderPassEncoder.setIndexBuffer", "setIndexBuffer()")}}.
drawIndexed(indexCount)
drawIndexed(indexCount, instanceCount)
drawIndexed(indexCount, instanceCount, firstIndex)
drawIndexed(indexCount, instanceCount, firstIndex, baseVertex)
drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance)
indexCount
instanceCount {{optional_inline}}
instanceCount defaults to 1.firstIndex {{optional_inline}}
firstIndex defaults to 0.baseVertex {{optional_inline}}
baseVertex defaults to 0.firstInstance {{optional_inline}}
firstInstance defaults to 0.None ({{jsxref("Undefined")}}).
In the WebGPU Samples Shadow Mapping example, drawIndexed() is used in two separate render passes in each animation frame, one to populate the shadow buffer and one to draw the primary view of the scene. Study the example code listing for the full context.
// …
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();
}
// …
{{Specifications}}
{{Compat}}