Skip to main content
Version: 11 Nov 2025

ml_meshing2.h

Classes​

Name
structMLMeshingSettings
structMLMeshingExtents
structMLMeshingBlockInfo
structMLMeshingMeshInfo
structMLMeshingBlockRequest
structMLMeshingMeshRequest
structMLMeshingBlockMesh
structMLMeshingMesh

Types​

Name
typedef struct MLMeshingSettingsMLMeshingSettings
typedef struct MLMeshingExtentsMLMeshingExtents
typedef struct MLMeshingBlockInfoMLMeshingBlockInfo
typedef struct MLMeshingMeshInfoMLMeshingMeshInfo
typedef struct MLMeshingBlockRequestMLMeshingBlockRequest
typedef struct MLMeshingMeshRequestMLMeshingMeshRequest
typedef struct MLMeshingBlockMeshMLMeshingBlockMesh
typedef struct MLMeshingMeshMLMeshingMesh

Enums​

Name
enumMLMeshingFlags
{
MLMeshingFlags_PointCloud = 1 << 0,
MLMeshingFlags_ComputeNormals = 1 << 1,
MLMeshingFlags_ComputeConfidence = 1 << 2,
MLMeshingFlags_Planarize = 1 << 3,
MLMeshingFlags_RemoveMeshSkirt = 1 << 4,
MLMeshingFlags_IndexOrderCW = 1 << 5,
MLMeshingFlags_Ensure32Bits = 0x7FFFFFFF
}
enumMLMeshingLOD
{
MLMeshingLOD_Minimum,
MLMeshingLOD_Medium,
MLMeshingLOD_Maximum,
MLMeshingLOD_Ensure32Bits = 0x7FFFFFFF
}
enumMLMeshingResult
{
MLMeshingResult_Success,
MLMeshingResult_Failed,
MLMeshingResult_Pending,
MLMeshingResult_PartialUpdate,
MLMeshingResult_Ensure32Bits = 0x7FFFFFFF
}
enumMLMeshingMeshState
{
MLMeshingMeshState_New,
MLMeshingMeshState_Updated,
MLMeshingMeshState_Deleted,
MLMeshingMeshState_Unchanged,
MLMeshingMeshState_Ensure32Bits = 0x7FFFFFFF
}

Functions​

Name
MLResultMLMeshingCreateClient(MLHandle out_client_handle, const MLMeshingSettings settings)
Create the meshing client.
MLResultMLMeshingDestroyClient(MLHandle client_handle)
Free the client resources.
MLResultMLMeshingInitSettings(MLMeshingSettings * out_settings)
Initialize the meshing settings with system defaults.
MLResultMLMeshingUpdateSettings(MLHandle client_handle, const MLMeshingSettings * settings)
Update the meshing settings at runtime.
MLResultMLMeshingRequestMeshInfo(MLHandle client_handle, const MLMeshingExtents extents, MLHandle out_request_handle)
Request the Mesh Info which includes CFUIDs and bounding extents of the blocks.
MLResultMLMeshingGetMeshInfoResult(MLHandle client_handle, MLHandle request_handle, MLMeshingMeshInfo * out_info)
Get the Result of a previous MeshInfo request.
MLResultMLMeshingRequestMesh(MLHandle client_handle, const MLMeshingMeshRequest request, MLHandle out_request_handle)
Request the Mesh for all CFUIDs populated in request.
MLResultMLMeshingGetMeshResult(MLHandle client_handle, MLHandle request_handle, MLMeshingMesh * out_mesh)
Get the Result of a previous Mesh request.
MLResultMLMeshingFreeResource(MLHandle client_handle, MLHandle * request_handle)
Free resources created by the meshing APIS. Needs to be called whenever MLMeshingGetMeshInfoResult, MLMeshingGetMeshResult return a success.

Enums Documentation​

MLMeshingFlags​

EnumeratorValueDescription
MLMeshingFlags_PointCloud1 << 0If set, will return a point cloud instead of a triangle mesh.
MLMeshingFlags_ComputeNormals1 << 1If set, the system will compute the normals for the triangle vertices.
MLMeshingFlags_ComputeConfidence1 << 2If set, the system will compute the confidence values.
MLMeshingFlags_Planarize1 << 3If set, the system will planarize the returned mesh (planar regions will be smoothed out).
MLMeshingFlags_RemoveMeshSkirt1 << 4If set, the mesh skirt (overlapping area between two mesh blocks) will be removed.
MLMeshingFlags_IndexOrderCW1 << 5If set, winding order of indices will be be changed from counter clockwise to clockwise. This could be useful for face culling process in different engines.
MLMeshingFlags_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Request flags for the meshing system.


MLMeshingLOD​

EnumeratorValueDescription
MLMeshingLOD_MinimumMinimum Level of Detail (LOD) for the mesh.
MLMeshingLOD_MediumMedium Level of Detail (LOD) for the mesh.
MLMeshingLOD_MaximumMaximum Level of Detail (LOD) for the mesh.
MLMeshingLOD_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Level of detail of the block mesh.


MLMeshingResult​

EnumeratorValueDescription
MLMeshingResult_SuccessMesh request has succeeded.
MLMeshingResult_FailedMesh request has failed.
MLMeshingResult_PendingMesh request is pending.
MLMeshingResult_PartialUpdateThere are partial updates on the mesh request.
MLMeshingResult_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Result of a mesh request.


MLMeshingMeshState​

EnumeratorValueDescription
MLMeshingMeshState_NewMesh has been created.
MLMeshingMeshState_UpdatedMesh has been updated.
MLMeshingMeshState_DeletedMesh has been deleted.
MLMeshingMeshState_UnchangedMesh is unchanged.
MLMeshingMeshState_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

State of a block mesh.


Types Documentation​

MLMeshingSettings​

typedef struct MLMeshingSettings MLMeshingSettings;

Mesh Settings for the underlying system.

More Info


MLMeshingExtents​

typedef struct MLMeshingExtents MLMeshingExtents;

Axis aligned bounding box for querying updated mesh info.

More Info


MLMeshingBlockInfo​

typedef struct MLMeshingBlockInfo MLMeshingBlockInfo;

Representation of a mesh block.

More Info


MLMeshingMeshInfo​

typedef struct MLMeshingMeshInfo MLMeshingMeshInfo;

Response structure for the mesh block info.

More Info


MLMeshingBlockRequest​

typedef struct MLMeshingBlockRequest MLMeshingBlockRequest;

Request structure to get the actual mesh for a block.

More Info


MLMeshingMeshRequest​

typedef struct MLMeshingMeshRequest MLMeshingMeshRequest;

Request structure to get the actual mesh for a set of blocks.

More Info


MLMeshingBlockMesh​

typedef struct MLMeshingBlockMesh MLMeshingBlockMesh;

Final structure for a block mesh.

More Info


MLMeshingMesh​

typedef struct MLMeshingMesh MLMeshingMesh;

Result of a Mesh request. See MLMeshingGetMeshResult() for details.

More Info


Functions Documentation​

MLMeshingCreateClient​

MLResult MLMeshingCreateClient(
MLHandle * out_client_handle,
const MLMeshingSettings * settings
)

Create the meshing client.

Parameters

MLHandle *out_client_handleThe handle to the created client.
const MLMeshingSettings *settingsThe initial settings to be used for meshing.

Returns

MLResultMLResult_InvalidParamMeshing Client was not created due to an invalid parameter.
MLResultMLResult_OkMeshing Client was created successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.
MLResultMLResult_PermissionDeniedMissing required permission(s).
MLResultMLResult_UnspecifiedFailureMeshing Client was not created due to an unknown error.

Required Permissions:

  • com.magicleap.permission.SPATIAL_MAPPING (protection level: dangerous)

Note that this will be the only function in the meshing API that will return MLResult_PermissionDenied. Trying to call the other functions with an invalid MLHandle will result in MLResult_InvalidParam.


MLMeshingDestroyClient​

MLResult MLMeshingDestroyClient(
MLHandle client_handle
)

Free the client resources.

Parameters

MLHandleclient_handleThe client to destroy.

Returns

MLResultMLResult_InvalidParamMeshing Client was not destroyed due to an invalid parameter.
MLResultMLResult_OkMeshing Client was destroyed successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingInitSettings​

MLResult MLMeshingInitSettings(
MLMeshingSettings * out_settings
)

Initialize the meshing settings with system defaults.

Parameters

MLMeshingSettings *out_settingsThe initial settings to be used for meshing.

Returns

MLResultMLResult_InvalidParamMesh Settings were not initialized due to an invalid parameter.
MLResultMLResult_OkMesh Settings were initialized successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingUpdateSettings​

MLResult MLMeshingUpdateSettings(
MLHandle client_handle,
const MLMeshingSettings * settings
)

Update the meshing settings at runtime.

Parameters

MLHandleclient_handleThe handle to the created client.
const MLMeshingSettings *settingsThe updated settings to be used for meshing.

Returns

MLResultMLResult_InvalidParamMesh Settings were not updated due to an invalid parameter.
MLResultMLResult_OkMesh Settings were updated successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingRequestMeshInfo​

MLResult MLMeshingRequestMeshInfo(
MLHandle client_handle,
const MLMeshingExtents * extents,
MLHandle * out_request_handle
)

Request the Mesh Info which includes CFUIDs and bounding extents of the blocks.

Parameters

MLHandleclient_handleThe handle to the created client.
const MLMeshingExtents *extentsThe region of interest for meshing.
MLHandle *out_request_handleThe handle for the current request. Needs to be passed to query the result of the request.

Returns

MLResultMLResult_InvalidParamMesh info was not requested due to an invalid parameter.
MLResultMLResult_OkMesh Info was requested successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingGetMeshInfoResult​

MLResult MLMeshingGetMeshInfoResult(
MLHandle client_handle,
MLHandle request_handle,
MLMeshingMeshInfo * out_info
)

Get the Result of a previous MeshInfo request.

Parameters

MLHandleclient_handleThe handle to the created client.
MLHandlerequest_handleThe handle populated in a prev MLMeshingGetMeshInfo.
MLMeshingMeshInfo *out_infoThe final result which will be populated only if the result is successful.

Returns

MLResultMLResult_InvalidParamMesh Settings were not updated due to an invalid parameter.
MLResultMLResult_OkMesh Info was populated successfully.
MLResultMLResult_PedingMesh Info is pending update.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingRequestMesh​

MLResult MLMeshingRequestMesh(
MLHandle client_handle,
const MLMeshingMeshRequest * request,
MLHandle * out_request_handle
)

Request the Mesh for all CFUIDs populated in request.

Parameters

MLHandleclient_handleThe handle to the created client.
const MLMeshingMeshRequest *requestThe request for meshes of interest.
MLHandle *out_request_handleThe handle for the current request. Needs to be passed to query the result of the request.

Returns

MLResultMLResult_InvalidParamMeshes were not requested due to an invalid parameter.
MLResultMLResult_OkMeshes were requested successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingGetMeshResult​

MLResult MLMeshingGetMeshResult(
MLHandle client_handle,
MLHandle request_handle,
MLMeshingMesh * out_mesh
)

Get the Result of a previous Mesh request.

Parameters

MLHandleclient_handleThe handle to the created client.
MLHandlerequest_handleThe handle populated in a prev MLMeshingGetMesh.
MLMeshingMesh *out_meshThe final result which will be populated only if the result is successful.

Returns

MLResultMLResult_InvalidParamMeshes were not updated due to an invalid parameter.
MLResultMLResult_OkMeshes was populated successfully.
MLResultMLResult_PedingMeshes pending update.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

MLMeshingFreeResource​

MLResult MLMeshingFreeResource(
MLHandle client_handle,
MLHandle * request_handle
)

Free resources created by the meshing APIS. Needs to be called whenever MLMeshingGetMeshInfoResult, MLMeshingGetMeshResult return a success.

Parameters

MLHandleclient_handleThe handle to the created client.
MLHandle *request_handleThe handle populated in a prev request.

Returns

MLResultMLResult_InvalidParamResources were not freed due to an invalid parameter.
MLResultMLResult_OkResources were freed successfully.
MLResultMLResult_PerceptionSystemNotStartedPerception System has not been started.

Required Permissions:

  • None

Source code​

// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
// Copyright (c) 2017 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Software License Agreement,
// located here: https://www.magicleap.com/software-license-agreement-ml2
// Terms and conditions applicable to third-party materials accompanying
// this distribution may also be found in the top-level NOTICE file
// appearing herein.
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%

#pragma once

#include "ml_api.h"
#include "ml_types.h"

ML_EXTERN_C_BEGIN

typedef enum MLMeshingFlags {
MLMeshingFlags_PointCloud = 1 << 0,
MLMeshingFlags_ComputeNormals = 1 << 1,
MLMeshingFlags_ComputeConfidence = 1 << 2,
MLMeshingFlags_Planarize = 1 << 3,
MLMeshingFlags_RemoveMeshSkirt = 1 << 4,
MLMeshingFlags_IndexOrderCW = 1 << 5,
MLMeshingFlags_Ensure32Bits = 0x7FFFFFFF
} MLMeshingFlags;

typedef enum MLMeshingLOD {
MLMeshingLOD_Minimum,
MLMeshingLOD_Medium,
MLMeshingLOD_Maximum,
MLMeshingLOD_Ensure32Bits = 0x7FFFFFFF
} MLMeshingLOD;

typedef enum MLMeshingResult {
MLMeshingResult_Success,
MLMeshingResult_Failed,
MLMeshingResult_Pending,
MLMeshingResult_PartialUpdate,
MLMeshingResult_Ensure32Bits = 0x7FFFFFFF
} MLMeshingResult;

typedef enum MLMeshingMeshState {
MLMeshingMeshState_New,
MLMeshingMeshState_Updated,
MLMeshingMeshState_Deleted,
MLMeshingMeshState_Unchanged,
MLMeshingMeshState_Ensure32Bits = 0x7FFFFFFF
} MLMeshingMeshState;

typedef struct MLMeshingSettings {
uint32_t flags;
float fill_hole_length;
float disconnected_component_area;
} MLMeshingSettings;

typedef struct MLMeshingExtents {
MLVec3f center;
MLQuaternionf rotation;
MLVec3f extents;
} MLMeshingExtents;

typedef struct MLMeshingBlockInfo {
MLCoordinateFrameUID id;
MLMeshingExtents extents;
MLTime timestamp;
MLMeshingMeshState state;
} MLMeshingBlockInfo;

typedef struct MLMeshingMeshInfo {
MLTime timestamp;
uint32_t data_count;
MLMeshingBlockInfo *data;
} MLMeshingMeshInfo;

typedef struct MLMeshingBlockRequest {
MLCoordinateFrameUID id;
MLMeshingLOD level;
} MLMeshingBlockRequest;

typedef struct MLMeshingMeshRequest {
int request_count;
MLMeshingBlockRequest *data;
} MLMeshingMeshRequest;

typedef struct MLMeshingBlockMesh {
MLMeshingResult result;
MLCoordinateFrameUID id;
MLMeshingLOD level;
uint32_t flags;
uint16_t index_count;
uint32_t vertex_count;
MLVec3f *vertex;
uint16_t *index;
MLVec3f *normal;
float *confidence;
} MLMeshingBlockMesh;

typedef struct MLMeshingMesh {
MLMeshingResult result;
MLTime timestamp;
uint32_t data_count;
MLMeshingBlockMesh *data;
} MLMeshingMesh;

ML_API MLResult ML_CALL MLMeshingCreateClient(MLHandle *out_client_handle, const MLMeshingSettings *settings);

ML_API MLResult ML_CALL MLMeshingDestroyClient(MLHandle client_handle);

ML_API MLResult ML_CALL MLMeshingInitSettings(MLMeshingSettings *out_settings);

ML_API MLResult ML_CALL MLMeshingUpdateSettings(MLHandle client_handle, const MLMeshingSettings *settings);

ML_API MLResult ML_CALL MLMeshingRequestMeshInfo(MLHandle client_handle, const MLMeshingExtents *extents, MLHandle *out_request_handle);

ML_API MLResult ML_CALL MLMeshingGetMeshInfoResult(MLHandle client_handle, MLHandle request_handle, MLMeshingMeshInfo *out_info);

ML_API MLResult ML_CALL MLMeshingRequestMesh(MLHandle client_handle, const MLMeshingMeshRequest *request, MLHandle *out_request_handle);

ML_API MLResult ML_CALL MLMeshingGetMeshResult(MLHandle client_handle, MLHandle request_handle, MLMeshingMesh *out_mesh);

ML_API MLResult ML_CALL MLMeshingFreeResource(MLHandle client_handle, MLHandle *request_handle);

ML_EXTERN_C_END