**Name String**
`XR_ANDROID_scene_meshing`

**Extension Type**
Instance extension

**Registered Extension Number**
464

**Revision**
3

**Extension and Version Dependencies**
[OpenXR 1.0](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#versions-1.0)

**Last Modified Date**
2025-05-15

**IP Status**
No known IP claims.

**Contributors**
Spencer Quin, Google
Jared Finder, Google
Antonio Fontan, Google
Cairn Overturf, Google
Nihav Jain, Google
Salar Khan, Google
Sebastian Klose, Google
Jürgen Sturm, Google
Vinny DaSilva, Google
Ricardo Campbell, Google

## Overview

This extension is intended to provide mesh data for the meshes that
approximately represents the physical objects in your environment.
It can be used for visualizing your scene in an immersive application and
allowing virtual objects to interact with the physical objects such as
collisions.
| **Note:** The scene mesh data is generated by the runtime and shared with the application using [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) and [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID). Applications can access the values in scene submesh information through [XrSceneSubmeshStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshStateANDROID) returned from [xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID). Applications can access the values in scene submesh data through [XrSceneSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshDataANDROID) returned from [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID).

Scene meshing data can be sensitive personal information and is closely
linked to personal privacy and integrity.
It is strongly recommended that applications that store or transfer scene
meshing data always ask the user for active and specific acceptance to do
so.

**Permissions**

Android applications **must** have the
`android.permission.SCENE_UNDERSTANDING_FINE` permission listed in their
manifest.
The `android.permission.SCENE_UNDERSTANDING_FINE` permission is considered a
sensitive permission as it allows the runtime to study the user environment.

The application **must** request the permission at runtime to use these
functions:

- [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID)
- [xrDestroySceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshingTrackerANDROID)
- [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID)
- [xrDestroySceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshSnapshotANDROID)
- [xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID)
- [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID)

(protection level: dangerous)

## Inspect system capability

An application **can** inspect whether the system is capable of scene meshing
by chaining an [XrSystemSceneMeshingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSystemSceneMeshingPropertiesANDROID) structure to the
[XrSystemProperties](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSystemProperties) when calling [xrGetSystemProperties](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#xrGetSystemProperties).

### XrSystemSceneMeshingPropertiesANDROID

    typedef struct XrSystemSceneMeshingPropertiesANDROID {
        XrStructureType    type;
        void*              next;
        XrBool32           supportsSceneMeshing;
    } XrSystemSceneMeshingPropertiesANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `supportsSceneMeshing` is an [XrBool32](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrBool32), indicating if the system supports scene meshing.

If `supportsSceneMeshing` is `XR_FALSE`, the system does not support scene meshing.
The application **should** avoid using scene meshing functionality when
`supportsSceneMeshing` is `XR_FALSE`, as calls to
[xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID) will fail.

If `supportsSceneMeshing` is `XR_TRUE`, the system supports scene meshing.

**Valid Usage (Implicit)**

- The [`XR_ANDROID_scene_meshing`](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XR_ANDROID_scene_meshing) extension **must** be enabled prior to using [XrSystemSceneMeshingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSystemSceneMeshingPropertiesANDROID)
- `type` **must** be `XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID`
- `next` **must** be `NULL` or a valid pointer to the [next structure in a
  structure chain](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#fundamentals-valid-usage-for-structure-pointer-chains)

### XrSceneMeshSemanticLabelSetANDROID

The [XrSceneMeshSemanticLabelSetANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelSetANDROID) enumeration describes the
semantic label sets for scene meshing.
Each value in this enum represents another enum that contains the semantic
labels.
For example, the `XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID`
value represents the set [XrSceneMeshSemanticLabelANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelANDROID).  

    typedef enum XrSceneMeshSemanticLabelSetANDROID {
        XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
        XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
        XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
    } XrSceneMeshSemanticLabelSetANDROID;

### xrEnumerateSupportedSemanticLabelSetsANDROID

The application **can** get semantic label sets supported by the system using
[xrEnumerateSupportedSemanticLabelSetsANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrEnumerateSupportedSemanticLabelSetsANDROID) function.  

    XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
        XrInstance                                  instance,
        XrSystemId                                  systemId,
        uint32_t                                    supportedSemanticLabelSetsInputCapacity,
        uint32_t*                                   supportedSemanticLabelSetsOutputCount,
        XrSceneMeshSemanticLabelSetANDROID*         supportedSemanticLabelSets);

**Parameter Descriptions**

- `instance` is an [XrInstance](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrInstance) created by the application.
- `systemId` is an [XrSystemId](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSystemId) retried from [xrGetSystem](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#xrGetSystemProperties).
- `supportedSemanticLabelSetsInputCapacity` is the length of `supportedSemanticLabelSets`.
- `supportedSemanticLabelSetsOutputCount` is the number of elements in `supportedSemanticLabelSets` modified by the runtime starting from the beginning of the array.
- `supportedSemanticLabelSets` is an array of [XrSceneMeshSemanticLabelSetANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelSetANDROID) to which the supported semantic label sets are written by the runtime.

It is expected that every system will at least support
`XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID` because this enum value
represents no semantic label set and **can** be used in the case the
application does not need vertex semantics.

## Create a scene meshing tracker handle

### XrSceneMeshingTrackerANDROID

    XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)

The [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) handle represents a scene meshing
tracker for scene meshing and managing the related resources.

This handle **can** be used to create a scene mesh snapshot using
[xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID) in this extension.

### xrCreateSceneMeshingTrackerANDROID

An application **can** create an [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) handle
using [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID) function.  

    XrResult xrCreateSceneMeshingTrackerANDROID(
        XrSession                                   session,
        const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
        XrSceneMeshingTrackerANDROID*               tracker);

**Parameter Descriptions**

- `session` is an [XrSession](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSession) in which the scene meshing tracker will be active.
- `createInfo` is a pointer to an [XrSceneMeshingTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerCreateInfoANDROID) structure used to describe the scene meshing tracker to be created.
- `tracker` is the returned [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) handle.

If the system does not support scene meshing, [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID) will return
`XR_ERROR_FEATURE_UNSUPPORTED`.
The application can check for system support by calling [xrGetSystemProperties](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#xrGetSystemProperties) with
the [XrSystemSceneMeshingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSystemSceneMeshingPropertiesANDROID) structure.

Only semantic label sets that are supported by the system **can** be used in
[XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerCreateInfoANDROID) when
creating a scene meshing tracker.
The function [xrEnumerateSupportedSemanticLabelSetsANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrEnumerateSupportedSemanticLabelSetsANDROID) **can** be used
to get the list of supported semantic label sets.

If the application requests an unsupported `semanticLabelSet`,
[xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID) will return `XR_ERROR_FEATURE_UNSUPPORTED`.

The [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID) handle owns all the resources
for scene meshing.
Once finished with scene meshing experience, the application **must** destroy
the handle via the [xrDestroySceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshingTrackerANDROID) function.

### XrSceneMeshingTrackerCreateInfoANDROID

The [XrSceneMeshingTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerCreateInfoANDROID) structure describes the
information to create an [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) handle.  

    typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
        XrStructureType                       type;
        const void*                           next;
        XrSceneMeshSemanticLabelSetANDROID    semanticLabelSet;
        XrBool32                              enableNormals;
    } XrSceneMeshingTrackerCreateInfoANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `semanticLabelSet` is an [XrSceneMeshSemanticLabelSetANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelSetANDROID) used to specify the semantic label set to be used for the scene meshing. If this is set to `XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID`, the runtime will ignore the [XrSceneSubmeshDataANDROID::vertexSemantics](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshDataANDROID) buffer field.
- `enableNormals` is an [XrBool32](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrBool32) used to specify whether to include vertex normals for the mesh vertices in the scene mesh buffer when getting the scene mesh data.

### xrDestroySceneMeshingTrackerANDROID

[xrDestroySceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshingTrackerANDROID) function releases the
`tracker` and the underlying resources when finished with scene meshing
experiences.  

    XrResult xrDestroySceneMeshingTrackerANDROID(
        XrSceneMeshingTrackerANDROID          tracker);

**Parameter Descriptions**

- `tracker` is an [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) previously created by [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID).

## Create a scene mesh snapshot handle

### XrSceneMeshSnapshotANDROID

    XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)

The [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle represents a scene mesh
snapshot.
This is created using [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID) which
essentially grabs a snapshot of the scene mesh data at the time of the
function call.

This handle **can** be used to retrieve submesh information and data using
[xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID) and [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID).

### XrSceneMeshSnapshotCreateInfoANDROID

The [XrSceneMeshSnapshotCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreateInfoANDROID) structure describes the
information to create an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle  

    typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
        XrStructureType    type;
        const void*        next;
        XrSpace            baseSpace;
        XrTime             time;
        XrBoxf             boundingBox;
    } XrSceneMeshSnapshotCreateInfoANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `baseSpace` is an [XrSpace](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrSpace) used to describe the reference space in which the scene submeshes pose info **should** be represented.
- `time` is the [XrTime](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrTime) that describes the time when the scene mesh will be processed or displayed.
- `boundingBox` is an [XrBoxf](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrBoxf) describing the bounding box within which to acquire the scene mesh.

### XrSceneMeshTrackingStateANDROID

The [XrSceneMeshTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshTrackingStateANDROID) enumeration describes the tracking
state for scene meshing tracker.
Each value in this enum represents a state of the scene meshing tracker.
This enum wrapped in [XrSceneMeshSnapshotCreationResultANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreationResultANDROID)
structure which is returned from [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID).  

    typedef enum XrSceneMeshTrackingStateANDROID {
        XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
        XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
        XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
        XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
        XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
    } XrSceneMeshTrackingStateANDROID;

### XrSceneMeshSnapshotCreationResultANDROID

The [XrSceneMeshSnapshotCreationResultANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreationResultANDROID) structure stores the
result of a scene mesh snapshot creation returned from
[xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID).
The result includes the snapshot handle and the tracking state of the scene
meshing tracker at the time of the snapshot creation.  

    typedef struct XrSceneMeshSnapshotCreationResultANDROID {
        XrStructureType                  type;
        void*                            next;
        XrSceneMeshSnapshotANDROID       snapshot;
        XrSceneMeshTrackingStateANDROID    trackingState;
    } XrSceneMeshSnapshotCreationResultANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `snapshot` is an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle created by the runtime.
- `trackingState` is an [XrSceneMeshTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshTrackingStateANDROID) that describes the state of the scene meshing tracker at the time of the snapshot creation.

### xrCreateSceneMeshSnapshotANDROID

The application **can** use the [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID) function
to create a scene mesh snapshot from the scene meshing tracker.
This function returns an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle along with
[XrSceneMeshTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshTrackingStateANDROID) wrapped in an
[XrSceneMeshSnapshotCreationResultANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreationResultANDROID) structure.
The handle is technically a snapshot of the scene mesh data at the time of
creation.
This handle **can** be used to query the scene mesh info and data using
[xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID) and [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID)
respectively.  

    XrResult xrCreateSceneMeshSnapshotANDROID(
        XrSceneMeshingTrackerANDROID                tracker,
        const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
        XrSceneMeshSnapshotCreationResultANDROID*   outSnapshotCreationResult);

**Parameter Descriptions**

- `tracker` is an [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID) handle previously created with [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID).
- `createInfo` is pointer to an [XrSceneMeshSnapshotCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreateInfoANDROID) structure which contains necessary information required to create the scene mesh snapshot.
- `outSnapshotCreationResult` is a pointer to an [XrSceneMeshSnapshotCreationResultANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreationResultANDROID) object which is populated by the runtime with the snapshot creation result.

## Acquiring scene mesh data from the scene mesh snapshot

### XrSceneSubmeshStateANDROID

[XrSceneSubmeshStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshStateANDROID) describes a submesh.
It contains the basic information about the submesh (id, pose, bounds, last
updated time).  

    typedef struct XrSceneSubmeshStateANDROID {
        XrStructureType    type;
        void*              next;
        XrUuid             submeshId;
        XrTime             lastUpdatedTime;
        XrPosef            submeshPoseInBaseSpace;
        XrExtent3Df        bounds;
    } XrSceneSubmeshStateANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `submeshId` is an [XrUuid](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrUuid) identifying the submesh.
- `lastUpdatedTime` is an [XrTime](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrTime) representing the time when the submesh was last updated.
- `submeshPoseInBaseSpace` is an [XrPosef](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrPosef) representing the pose of the submesh in the base space used to create the scene mesh snapshot. This is also the pose of the center of the submesh bounding box.
- `bounds` is an [XrExtent3Df](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrExtent3Df) describing the dimensions of the bounding box that encloses the submesh. This bounds is in the base space that was used to create the scene mesh handle.

### xrGetAllSubmeshStatesANDROID

The application **can** use the [xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID) function to
get the state of all submeshes in the scene mesh.
This contains basic information information to allow the application to
select submeshes for which the application wants data for.
This function **can** be used in a 2-call idiom.  

    XrResult xrGetAllSubmeshStatesANDROID(
        XrSceneMeshSnapshotANDROID            snapshot,
        uint32_t                              submeshStateCapacityInput,
        uint32_t*                             submeshStateCountOutput,
        XrSceneSubmeshStateANDROID*           submeshStates);

**Parameter Descriptions**

- `snapshot` is an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle previously created with [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID).
- `submeshStateCapacityInput` is the length of `submeshStates`.
- `submeshStateCountOutput` is the number of elements in `submeshStates` that are modified by the runtime starting from the beginning of the array.
- `submeshStates` is an array of [XrSceneSubmeshStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshStateANDROID) structures to which the runtime will output the state of all submeshes in the scene mesh.

### XrSceneSubmeshDataANDROID

[XrSceneSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshDataANDROID) contains the triangle data for a submesh
along with the submesh id.
This structure is used in [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID) to get the data of
the submesh.
The application **must** set the submesh id of this struct and the buffer
pointers to allocated buffers so that the returned data for the submesh can be populated
in the allocated buffers.
The application **can** use [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID)
as a 2-call idiom where the first call will require the application to set the
submesh id and get the sizes of the buffers required for the submesh data, and
then the application **can** allocate the buffers and get the data in the second
call.  

    typedef struct XrSceneSubmeshDataANDROID {
        XrStructureType    type;
        const void*        next;
        XrUuid             submeshId;
        uint32_t           vertexCapacityInput;
        uint32_t           vertexCountOutput;
        XrVector3f*        vertexPositions;
        XrVector3f*        vertexNormals;
        uint8_t*           vertexSemantics;
        uint32_t           indexCapacityInput;
        uint32_t           indexCountOutput;
        uint32_t*          indices;
    } XrSceneSubmeshDataANDROID;

**Member Descriptions**

- `type` is the [XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) of this structure.
- `next` is `NULL` or a pointer to the next structure in a structure chain. No such structures are defined in core OpenXR or this extension.
- `submeshId` is an [XrUuid](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrUuid) identifying the submesh.
- `vertexCapacityInput` is the length of `vertexPositions`, `vertexNormals`, and `vertexSemantics`.
- `vertexCountOutput` is the number of elements in `vertexPositions`, `vertexNormals`, and `vertexSemantics` that have been modified by the runtime starting from the beginning of the array.
- `vertexPositions` is an array of [XrVector3f](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrVector3f) to which the runtime will output the vertex positions of the submesh.
- `vertexNormals` is an array of [XrVector3f](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrVector3f) to which the runtime will output the vertex normals of the submesh. This field **can** be left `NULL` if the application created a tracker with normals disabled.
- `vertexSemantics` is an array of `uint8_t` to which the runtime will output the vertex semantics of the submesh. This field **can** be left `NULL` if the application created a tracker with `XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID` semantic label set.
- `indexCapacityInput` is the length of `indices`.
- `indexCountOutput` is the number of elements in `indices` that have been modified by the runtime starting from the beginning of the array.
- `indices` is an array of `uint32_t` to which the runtime will output the indices of the submesh.

### xrGetSubmeshDataANDROID

The application **can** use the [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID) function to get
the data for a selected list of submeshes.
This function **can** be used in a 2-call idiom.
In first call, the application **must** set a valid submesh id (i.e:
Retrievable from [xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID) with the same scene mesh
snapshot) and zero capacity for each element in the selected list of
submeshes to get the sizes of the buffers required for the submesh data.
In second call, the application **must** set the buffer pointers to an
allocated buffer for each element in the selected list of submeshes along
with the capacity of the buffers to get the data of the submeshes.  

    XrResult xrGetSubmeshDataANDROID(
        XrSceneMeshSnapshotANDROID            snapshot,
        uint32_t                              submeshDataCount,
        XrSceneSubmeshDataANDROID*            inoutSubmeshData);

**Parameter Descriptions**

- `snapshot` is an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle previously created with [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID).
- `submeshDataCount` is the length of `inoutSubmeshData`.
- `inoutSubmeshData` is an array of [XrSceneSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshDataANDROID) in which each element will be populated with the mesh data by the runtime based on The submesh id.

### XrSceneMeshSemanticLabelANDROID

The [XrSceneMeshSemanticLabelANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelANDROID) enumeration is the default set of
semantic labels that **can** be used to label mesh vertices to describe which
physical environment surface the mesh vertex is on.
This enum set is represented by the
`XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID` value in
[XrSceneMeshSemanticLabelSetANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelSetANDROID).  

    typedef enum XrSceneMeshSemanticLabelANDROID {
        XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
        XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
        XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
        XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
        XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
        XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
    } XrSceneMeshSemanticLabelANDROID;

## Destroy a scene mesh snapshot

### xrDestroySceneMeshSnapshotANDROID

The application **can** use the [xrDestroySceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshSnapshotANDROID)
function to destroy a scene mesh snapshot.
Once the handle is destroyed, the application **can** no longer use it to get
the submesh info or data.
The handle is automatically destroyed when the tracker is destroyed because
the tracker handle is the parent of the scene mesh snapshot handle.  

    XrResult xrDestroySceneMeshSnapshotANDROID(
        XrSceneMeshSnapshotANDROID            snapshot);

**Parameter Descriptions**

- `snapshot` is an [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID) handle previously created with [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID) that will be destroyed by this function.

## Example code for scene meshing

Following example code demonstrates how to access scene mesh data for
rendering.  

    XrInstance instance;  // Created at app startup
    XrSystemId systemId;  // Received from xrGetSystem() at app startup
    XrSession session;    // Created at app startup
    XrSpace appPlaySpace; // Created at app startup

    // The function pointers are previously initialized using xrGetInstanceProcAddr.
    PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
    PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
    PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
    PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
    PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
    PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
    PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;

    // Inspect system capability
    XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
      .type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
    };
    XrSystemProperties sysProps = {
      .type = XR_TYPE_SYSTEM_PROPERTIES,
      .next = &sceneMeshingProps
    };
    CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
    if (!sceneMeshingProps.supportsSceneMeshing) {
        // scene meshing is not supported.
        return;
    }

    uint32_t supportedsemanticLabelSetsCount = 0;
    xrEnumerateSupportedSemanticLabelSetsANDROID(
      instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
    std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
      supportedsemanticLabelSetsCount);
    xrEnumerateSupportedSemanticLabelSetsANDROID(
      instance, systemId, supportedsemanticLabelSetsCount,
      &supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());

    XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
    // Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
    if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
                  XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
        supportedSemanticLabelSets.end()) {
      semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
    }

    XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
      .type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
      .semanticLabelSet = semanticLabelSet,
      .enableNormals = XR_TRUE
    };

    XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
    CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));

    XrSceneMeshSnapshotCreationResultANDROID snapshotResult = {
      .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
      .snapshot = XR_NULL_HANDLE
    };
    XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
    XrSceneMeshSnapshotCreateInfoANDROID createInfo = {
      .type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
    };

    // app update loop
    while (true) {
      // ...
      // For every frame in frame loop
      // ...

      XrFrameState frameState; // previously returned from xrWaitFrame
      const XrTime time = frameState.predictedDisplayTime;
      XrBoxf box; // populated with the bounding box of the camera frustum

      // ...

      createInfo.baseSpace = appPlaySpace;
      createInfo.time = time;
      createInfo.boundingBox = box;

      // Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
      // choose the appropriate submeshes for which to get data, allocate the necessary
      // buffer for those submeshes, and then get the data.
      CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));

      // check the tracking state
      if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
        // unrecoverable error. Exit the app.
        if (snapshot != XR_NULL_HANDLE) {
          CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
          snapshot = XR_NULL_HANDLE;
        }
        break;
      } else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
        // The tracker is not tracking. Try again later.
        if (snapshot != XR_NULL_HANDLE) {
          CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
          snapshot = XR_NULL_HANDLE;
        }
        continue;
      }

      // 2-call idiom for getting submesh states
      std::vector<XrSceneSubmeshStateANDROID> states;
      uint32_t submeshCount = 0;
      CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
      states.resize(submeshCount);
      for (XrSceneSubmeshStateANDROID& state : states) {
        state = {.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID};
      }
      CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));

      // To store the poses for the selected submeshes
      std::vector<XrPosef> submeshesPoses;
      submeshesPoses.reserve(submeshCount);

      std::vector<XrSceneSubmeshDataANDROID> submeshes;
      submeshes.reserve(submeshCount);
      // Iterate the states and determine which submeshes the app wants data for
      for (XrSceneSubmeshStateANDROID& state : states) {
        // Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
        // is below a threshold or maybe the bounding box does not intersect with camera view
        // frustum (The submesh will be culled).
        bool needed;
        if (needed) {
          // Add the selected submesh to the submeshes list. Set the capacity
          // zero for now since the size of the buffer will be determined later.
          XrSceneSubmeshDataANDROID submesh = {
            .type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
            .submeshId = state.submeshId,
            .vertexCapacityInput = 0,
            .vertexCountOutput = 0,
            .vertexPositions = nullptr,
            .vertexNormals = nullptr,
            .vertexSemantics = nullptr,
            .indexCapacityInput = 0,
            .indexCountOutput = 0,
            .indices = nullptr,
          };
          submeshes.push_back(submesh);
          submeshesPoses.push_back(state.submeshPoseInBaseSpace);
        }
      }

      // Grab the data for the selected submeshes using the 2-call idiom.
      CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
      for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
        submesh.vertexCapacityInput = submesh.vertexCountOutput;
        submesh.vertexCountOutput = 0;
        submesh.vertexPositions = new XrVector3f[submesh.vertexCountOutput];
        submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
        submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
        submesh.indexCapacityInput = submesh.indexCountOutput;
        submesh.indexCountOutput = 0;
        submesh.indices = new uint32_t[submesh.indexCountOutput];
      }
      CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));

      // Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
      // next iteration app can: create a new one to get latest mesh data
      CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
      snapshot = XR_NULL_HANDLE;

      // Iterate the submeshes and get the vertex positions, vertex normals and
      // vertex semantics data for the selected submeshes
      for (uint32_t i = 0; i < submeshes.size(); i++) {
        XrSceneSubmeshDataANDROID& data = submeshes[i];
        XrVector3f* vertexPositions = data.vertexPositions;
        XrVector3f* vertexNormals = data.vertexNormals;
        XrSceneMeshSemanticLabelANDROID* vertexSemantics =
          reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
        XrPosef pose = submeshesPoses[i];

        // *** Use the data as per needs ***

        // Release the allocated memory for the data buffers when done using
        delete [] data.vertexPositions;
        delete [] data.vertexNormals;
        delete [] data.vertexSemantics;
        delete [] data.indices;
      }

      // ...
      // Finish frame loop
      // ...
    }

    CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));

**New Object Types**

- [XrSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerANDROID)
- [XrSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotANDROID)

**New Enum Constants**

[XrObjectType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrObjectType) enumeration is extended with:

- `XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID`
- `XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID`

[XrStructureType](https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#XrStructureType) enumeration is extended with:

- `XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID`
- `XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID`
- `XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID`
- `XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID`
- `XR_TYPE_SCENE_SUBMESH_STATE_ANDROID`
- `XR_TYPE_SCENE_SUBMESH_DATA_ANDROID`

**New Enums**

- [XrSceneMeshSemanticLabelSetANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelSetANDROID)
- [XrSceneMeshSemanticLabelANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSemanticLabelANDROID)
- [XrSceneMeshTrackingStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshTrackingStateANDROID)

**New Structures**

- [XrSystemSceneMeshingPropertiesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSystemSceneMeshingPropertiesANDROID)
- [XrSceneMeshingTrackerCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshingTrackerCreateInfoANDROID)
- [XrSceneMeshSnapshotCreateInfoANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreateInfoANDROID)
- [XrSceneMeshSnapshotCreationResultANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneMeshSnapshotCreationResultANDROID)
- [XrSceneSubmeshStateANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshStateANDROID)
- [XrSceneSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#XrSceneSubmeshDataANDROID)

**New Functions**

- [xrCreateSceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshingTrackerANDROID)
- [xrDestroySceneMeshingTrackerANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshingTrackerANDROID)
- [xrEnumerateSupportedSemanticLabelSetsANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrEnumerateSupportedSemanticLabelSetsANDROID)
- [xrCreateSceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrCreateSceneMeshSnapshotANDROID)
- [xrDestroySceneMeshSnapshotANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrDestroySceneMeshSnapshotANDROID)
- [xrGetAllSubmeshStatesANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetAllSubmeshStatesANDROID)
- [xrGetSubmeshDataANDROID](https://developer.android.com/develop/xr/openxr/extensions/XR_ANDROID_scene_meshing#xrGetSubmeshDataANDROID)

**Issues**

**Version History**

- Revision 3, 2025-05-15 (Salar Khan) \*\* Initial extension description

*** ** * ** ***

OpenXR™ and the OpenXR logo are trademarks owned
by The Khronos Group Inc. and are registered as a trademark in China,
the European Union, Japan and the United Kingdom.