# DrawMeshInstancedIndirect

> Add a "draw mesh with indirect instancing" command.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Rendering](/engine/6000.0/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

## DrawMeshInstancedIndirect(Mesh, int, Material, int, ComputeBuffer, int, MaterialPropertyBlock)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, ComputeBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[ComputeBuffer]\(/engine/6000.0/script-reference/unityengine/computebuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The byte offset into the buffer, where the draw arguments start.**** (\[MaterialPropertyBlock]\(/engine/6000.0/script-reference/unityengine/materialpropertyblock)): Additional Material properties to apply onto the Material just before this Mesh is drawn. See [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

## DrawMeshInstancedIndirect(Mesh, int, Material, int, ComputeBuffer, int)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, ComputeBuffer bufferWithArgs, int argsOffset)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[ComputeBuffer]\(/engine/6000.0/script-reference/unityengine/computebuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The byte offset into the buffer, where the draw arguments start.

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

## DrawMeshInstancedIndirect(Mesh, int, Material, int, ComputeBuffer)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, ComputeBuffer bufferWithArgs)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[ComputeBuffer]\(/engine/6000.0/script-reference/unityengine/computebuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

## DrawMeshInstancedIndirect(Mesh, int, Material, int, GraphicsBuffer, int, MaterialPropertyBlock)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, GraphicsBuffer bufferWithArgs, int argsOffset, MaterialPropertyBlock properties)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[GraphicsBuffer]\(/engine/6000.0/script-reference/unityengine/graphicsbuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The byte offset into the buffer, where the draw arguments start.**** (\[MaterialPropertyBlock]\(/engine/6000.0/script-reference/unityengine/materialpropertyblock)): Additional Material properties to apply onto the Material just before this Mesh is drawn. See [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

## DrawMeshInstancedIndirect(Mesh, int, Material, int, GraphicsBuffer, int)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, GraphicsBuffer bufferWithArgs, int argsOffset)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[GraphicsBuffer]\(/engine/6000.0/script-reference/unityengine/graphicsbuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The byte offset into the buffer, where the draw arguments start.

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).

## DrawMeshInstancedIndirect(Mesh, int, Material, int, GraphicsBuffer)

Add a "draw mesh with indirect instancing" command.

```csharp
public void DrawMeshInstancedIndirect(Mesh mesh, int submeshIndex, Material material, int shaderPass, GraphicsBuffer bufferWithArgs)
```

### Parameters

**** (\[Mesh]\(/engine/6000.0/script-reference/unityengine/mesh)): The [Mesh](/engine/6000.0/script-reference/unityengine/mesh.md) to draw.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which subset of the mesh to draw. This only applies to meshes that are composed of several materials.**** (\[Material]\(/engine/6000.0/script-reference/unityengine/material)): [Material](/engine/6000.0/script-reference/unityengine/material.md) to use.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Which pass of the shader to use, or -1 which renders all passes.**** (\[GraphicsBuffer]\(/engine/6000.0/script-reference/unityengine/graphicsbuffer)): The GPU buffer containing the arguments for how many instances of this mesh to draw.

### Remarks

Additional Resources: [CommandBuffer.DrawMesh](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/drawmesh.md), [Graphics.DrawMeshInstancedIndirect](/engine/6000.0/script-reference/unityengine/graphics/drawmeshinstancedindirect.md), [MaterialPropertyBlock](/engine/6000.0/script-reference/unityengine/materialpropertyblock.md).
