# DrawMesh

> Records a draw command with the provided triangle-list indexed mesh.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.UIElements](/engine/6000.7/script-reference/unityengine/uielements.md)
* **Assembly:** UnityEngine.UIElementsModule

## DrawMesh(NativeSlice\<Vertex>, NativeSlice\<ushort>, Texture)

Records a draw command with the provided triangle-list indexed mesh.

```csharp
public void DrawMesh(NativeSlice<Vertex> vertices, NativeSlice<ushort> indices, Texture texture = null)
```

### Parameters

**** (\[NativeSlice\<Vertex>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The vertices to be drawn. All referenced vertices must be initialized.**** (\[NativeSlice\<ushort>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The triangle list indices. Must be a multiple of 3. All indices must be initialized.**** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): An optional texture to be applied on the triangles. Pass null to rely on vertex colors only.

### Remarks

You can generate the mesh content later because the renderer doesn't immediately process the mesh. The mesh content must be fully generated before you return from GenerateVisualContent, unless you call [MeshGenerationContext.AddMeshGenerationJob](/engine/6000.7/script-reference/unityengine/uielements/meshgenerationcontext/addmeshgenerationjob.md).

The renderer will process the mesh when the following conditions are met:

* GenerateVisualContent has been called on all dirty VisualElements

* All registered generation dependencies have completed

* All deferred generation callbacks have been issued

## DrawMesh(NativeSlice\<Vertex>, NativeSlice\<ushort>, Texture, TextureOptions)

Records a draw command with the provided triangle-list indexed mesh.

```csharp
public void DrawMesh(NativeSlice<Vertex> vertices, NativeSlice<ushort> indices, Texture texture, TextureOptions textureOptions)
```

### Parameters

**** (\[NativeSlice\<Vertex>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The vertices to be drawn. All referenced vertices must be initialized.**** (\[NativeSlice\<ushort>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The triangle list indices. Must be a multiple of 3. All indices must be initialized.**** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): An optional texture to be applied on the triangles. Pass null to rely on vertex colors only.**** (\[TextureOptions]\(/engine/6000.7/script-reference/unityengine/uielements/textureoptions)): Flags that apply to the provided texture for this draw call.

### Remarks

You can generate the mesh content later because the renderer doesn't immediately process the mesh. The mesh content must be fully generated before you return from GenerateVisualContent, unless you call [MeshGenerationContext.AddMeshGenerationJob](/engine/6000.7/script-reference/unityengine/uielements/meshgenerationcontext/addmeshgenerationjob.md).

The renderer will process the mesh when the following conditions are met:

* GenerateVisualContent has been called on all dirty VisualElements

* All registered generation dependencies have completed

* All deferred generation callbacks have been issued

## DrawMesh(UIMesh, Texture)

Records a draw command with a [UIMesh](/engine/6000.7/script-reference/unityengine/uielements/uimesh.md) bundle.

```csharp
public void DrawMesh(ref UIMesh mesh, Texture texture = null)
```

### Parameters

**** (\[UIMesh]\(/engine/6000.7/script-reference/unityengine/uielements/uimesh)): **** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)):&#x20;

### Remarks

The slices inside `mesh` are read at flush time (end of the current repaint pass), not at this call. See [UIMesh](/engine/6000.7/script-reference/unityengine/uielements/uimesh.md) for the lifetime contract.

[\_vertices](/engine/6000.7/script-reference/unityengine/uielements/uimesh/vertices.md) and [\_indices](/engine/6000.7/script-reference/unityengine/uielements/uimesh/indices.md) are mandatory. Each non-empty extras slice must have `Length == mesh.vertices.Length`; mismatches are logged and the entire draw is dropped.

## DrawMesh(UIMesh, Texture, TextureOptions)

Records a draw command with a [UIMesh](/engine/6000.7/script-reference/unityengine/uielements/uimesh.md) bundle.

```csharp
public void DrawMesh(ref UIMesh mesh, Texture texture, TextureOptions textureOptions)
```

### Parameters

**** (\[UIMesh]\(/engine/6000.7/script-reference/unityengine/uielements/uimesh)): **** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): **** (\[TextureOptions]\(/engine/6000.7/script-reference/unityengine/uielements/textureoptions)):&#x20;

### Remarks

See [MeshGenerationContext.DrawMesh](/engine/6000.7/script-reference/unityengine/uielements/meshgenerationcontext/drawmesh.md) for the lifetime contract and validation rules.

## DrawMesh(NativeSlice\<Vertex>, NativeSlice\<ushort>, Texture, int)

Records a draw command and tags it with a user-defined identifier surfaced on `DrawData.userData` in mesh modifiers.

```csharp
public void DrawMesh(NativeSlice<Vertex> vertices, NativeSlice<ushort> indices, Texture texture, int userData)
```

### Parameters

**** (\[NativeSlice\<Vertex>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The vertices to be drawn. All referenced vertices must be initialized.**** (\[NativeSlice\<ushort>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The triangle list indices. Must be a multiple of 3.**** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): An optional texture to be applied. Pass null to rely on vertex colors only.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): User-defined identifier surfaced on `DrawData.userData`.

## DrawMesh(NativeSlice\<Vertex>, NativeSlice\<ushort>, Texture, TextureOptions, int)

Records a draw command and tags it with a user-defined identifier surfaced on `DrawData.userData` in mesh modifiers.

```csharp
public void DrawMesh(NativeSlice<Vertex> vertices, NativeSlice<ushort> indices, Texture texture, TextureOptions textureOptions, int userData)
```

### Parameters

**** (\[NativeSlice\<Vertex>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The vertices to be drawn. All referenced vertices must be initialized.**** (\[NativeSlice\<ushort>]\(/engine/6000.7/script-reference/unity/collections/nativeslice1)): The triangle list indices. Must be a multiple of 3.**** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): An optional texture to be applied. Pass null to rely on vertex colors only.**** (\[TextureOptions]\(/engine/6000.7/script-reference/unityengine/uielements/textureoptions)): Flags that apply to the provided texture for this draw call.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): User-defined identifier surfaced on `DrawData.userData`.

## DrawMesh(UIMesh, Texture, int)

Records a draw command with a [UIMesh](/engine/6000.7/script-reference/unityengine/uielements/uimesh.md) bundle and tags it with a user-defined identifier surfaced on `DrawData.userData` in mesh modifiers.

```csharp
public void DrawMesh(ref UIMesh mesh, Texture texture, int userData)
```

### Parameters

**** (\[UIMesh]\(/engine/6000.7/script-reference/unityengine/uielements/uimesh)): **** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): **** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)):&#x20;

### Remarks

See [MeshGenerationContext.DrawMesh](/engine/6000.7/script-reference/unityengine/uielements/meshgenerationcontext/drawmesh.md) for the lifetime contract and validation rules.

## DrawMesh(UIMesh, Texture, TextureOptions, int)

Records a draw command with a [UIMesh](/engine/6000.7/script-reference/unityengine/uielements/uimesh.md) bundle and tags it with a user-defined identifier surfaced on `DrawData.userData` in mesh modifiers.

```csharp
public void DrawMesh(ref UIMesh mesh, Texture texture, TextureOptions textureOptions, int userData)
```

### Parameters

**** (\[UIMesh]\(/engine/6000.7/script-reference/unityengine/uielements/uimesh)): **** (\[Texture]\(/engine/6000.7/script-reference/unityengine/texture)): **** (\[TextureOptions]\(/engine/6000.7/script-reference/unityengine/uielements/textureoptions)): **** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)):&#x20;

### Remarks

See [MeshGenerationContext.DrawMesh](/engine/6000.7/script-reference/unityengine/uielements/meshgenerationcontext/drawmesh.md) for the lifetime contract and validation rules.
