# CustomMesh.BuilderFromMeshBuffer

Artifact: [androidx.xr.scenecore:scenecore](https://developer.android.com/jetpack/androidx/releases/xr-scenecore) [View Source](https://cs.android.com/search?q=file:androidx/xr/scenecore/CustomMesh.kt+class:androidx.xr.scenecore.CustomMesh.BuilderFromMeshBuffer) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

*** ** * ** ***


```
public final class CustomMesh.BuilderFromMeshBuffer
```

<br />

*** ** * ** ***

Builder for `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh` using an existing `https://developer.android.com/reference/androidx/xr/scenecore/MeshBuffer`.

This is useful if you are sharing a single buffer across multiple meshes.


    val mesh = CustomMesh.BuilderFromMeshBuffer(session, myMeshBuffer)
         .addSubset(MeshSubset(MeshSubsetTopology.TRIANGLES, 0, indexCount))
         .build()

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#BuilderFromMeshBuffer(androidx.xr.runtime.Session,androidx.xr.scenecore.MeshBuffer)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/runtime/Session session, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/MeshBuffer meshBuffer )` |

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer` | `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#addSubset(androidx.xr.scenecore.MeshSubset)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/MeshSubset subset)` Adds a `https://developer.android.com/reference/androidx/xr/scenecore/MeshSubset` defining a part of the mesh. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer` | `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#addSubset(androidx.xr.scenecore.MeshSubsetTopology,kotlin.Int,kotlin.Int)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/MeshSubsetTopology topology, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int indexOffset, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int indexCount )` Adds a `https://developer.android.com/reference/androidx/xr/scenecore/MeshSubset` defining a part of the mesh using the specified topology, index offset, and index count. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh` | `@https://developer.android.com/reference/androidx/annotation/MainThread https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#build()()` Builds a new `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer` | `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#setBounds(androidx.xr.runtime.math.BoundingBox)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/runtime/math/BoundingBox bounds)` Sets an optional user-supplied bounding box for culling. |

## Public constructors

### BuilderFromMeshBuffer

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
public BuilderFromMeshBuffer(
    @NonNull Session session,
    @NonNull MeshBuffer meshBuffer
)
```

## Public methods

### addSubset

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
public final @NonNull CustomMesh.BuilderFromMeshBuffer addSubset(@NonNull MeshSubset subset)
```

Adds a `https://developer.android.com/reference/androidx/xr/scenecore/MeshSubset` defining a part of the mesh.

### addSubset

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
public final @NonNull CustomMesh.BuilderFromMeshBuffer addSubset(
    @NonNull MeshSubsetTopology topology,
    @IntRange(from = 0) int indexOffset,
    @IntRange(from = 0) int indexCount
)
```

Adds a `https://developer.android.com/reference/androidx/xr/scenecore/MeshSubset` defining a part of the mesh using the specified topology, index offset, and index count.

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | if `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#addSubset(androidx.xr.scenecore.MeshSubsetTopology,kotlin.Int,kotlin.Int)` or `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh.BuilderFromMeshBuffer#addSubset(androidx.xr.scenecore.MeshSubsetTopology,kotlin.Int,kotlin.Int)` is negative |

### build

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
@MainThread
public final @NonNull CustomMesh build()
```

Builds a new `https://developer.android.com/reference/androidx/xr/scenecore/CustomMesh`.

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if no subsets have been added. |

### setBounds

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/xr-scenecore#1.0.0)

```
public final @NonNull CustomMesh.BuilderFromMeshBuffer setBounds(@NonNull BoundingBox bounds)
```

Sets an optional user-supplied bounding box for culling.

The bounding box does not need to be perfectly tight, but tighter bounds will result in more efficient culling. It is an axis-aligned bounding box in the mesh's local coordinate space.

If not provided, the auto-computed bounding box of the entire `https://developer.android.com/reference/androidx/xr/scenecore/MeshBuffer` will be used.