/// <summary> /// Get the mesh data associated with the face with <paramref name="faceId"/>. The <paramref name="faceMesh"/> /// is reused if it is the correct size, otherwise, it is disposed and reallocated using <paramref name="allocator"/>. /// </summary> /// <param name="faceId">The <see cref="TrackableId"/> for a <see cref="XRFace"/>.</param> /// <param name="allocator">The allocator to use for the returned data if a resize is necessary. Must be <c>Allocator.TempJob</c> or <c>Allocator.Persistent</c>.</param> /// <param name="faceMesh">The container for the mesh data to either re-use or re-allocate.</param> /// <exception cref="System.InvalidOperationException">Thrown if <paramref name="allocator"> is <c>Allocator.Temp</c></exception> /// <exception cref="System.InvalidOperationException">Thrown if <paramref name="allocator"> is <c>Allocator.None</c></exception> public virtual void GetFaceMesh(TrackableId faceId, Allocator allocator, ref XRFaceMesh faceMesh) { if (allocator == Allocator.Temp) throw new InvalidOperationException("Allocator.Temp is not supported. Use Allocator.TempJob if you wish to use a temporary allocator."); if (allocator == Allocator.None) throw new InvalidOperationException("Allocator.None is not a valid allocator."); m_Provider.GetFaceMesh(faceId, allocator, ref faceMesh); }
/// <summary> /// Get the mesh data associated with the face with <paramref name="faceId"/>. The <paramref name="faceMesh"/> /// should be reused if it is the correct size, otherwise, its arrays should be reallocated with <paramref name="allocator"/>. /// Use <see cref="XRFaceMesh.Assign(XRFaceMesh)"/> to ensure unused <c>NativeArray</c>s are disposed properly and /// <see cref="CreateOrResizeNativeArrayIfNecessary"/> to resize individual arrays. /// </summary> /// <param name="faceId">The <see cref="TrackableId"/> for a <see cref="XRFace"/>.</param> /// <param name="allocator">The allocator to use for the returned data if a resize is necessary.</param> /// <param name="faceMesh">The container for the mesh data to either re-use or re-allocate.</param> /// <example> /// <code> /// var vertices = faceMesh.vertices; /// CreateOrResizeNativeArrayIfNecessary(numVertices, allocator, ref vertices); /// /// ... /// /// faceMesh.Assign(new XRFaceMesh /// { /// vertices = vertices, /// indices = ... /// }); /// </code> /// </example> public virtual void GetFaceMesh(TrackableId faceId, Allocator allocator, ref XRFaceMesh faceMesh) { faceMesh.Dispose(); faceMesh = default(XRFaceMesh); }