public override unsafe TrackableChanges <XRPointCloud> GetChanges( XRPointCloud defaultPointCloud, Allocator allocator) { int addedLength, updatedLength, removedLength, elementSize; void *addedPtr, updatedPtr, removedPtr; var context = UnityARKit_depth_acquireChanges( out addedPtr, out addedLength, out updatedPtr, out updatedLength, out removedPtr, out removedLength, out elementSize); try { return(new TrackableChanges <XRPointCloud>( addedPtr, addedLength, updatedPtr, updatedLength, removedPtr, removedLength, defaultPointCloud, elementSize, allocator)); } finally { UnityARKit_depth_releaseChanges(context); } }
public override TrackableChanges <XRPointCloud> GetChanges(XRPointCloud defaultPointCloud, Allocator allocator) { var pointClouds = m_PointClouds; var added = pointClouds.Keys.Except(m_PreviousIds); var updated = pointClouds.Keys.Intersect(m_PreviousIds); var removed = m_PreviousIds.Except(pointClouds.Keys); var numAdded = added.Count(); var numUpdated = updated.Count(); var numRemoved = removed.Count(); var changes = new TrackableChanges <XRPointCloud>(numAdded, numUpdated, numRemoved, allocator); if (numAdded > 0) { Utils.EnsureCapacity(ref m_ConversionBuffer, numAdded); var i = 0; foreach (var pointCloud in added) { m_ConversionBuffer[i++] = new XRPointCloud(new TrackableId(pointCloud.subId1, pointCloud.subId2), Pose.identity, TrackingState.Tracking, IntPtr.Zero); } NativeArray <XRPointCloud> .Copy(m_ConversionBuffer, changes.added, numAdded); } if (numUpdated > 0) { Utils.EnsureCapacity(ref m_ConversionBuffer, numUpdated); var i = 0; foreach (var pointCloud in updated) { m_ConversionBuffer[i++] = new XRPointCloud(new TrackableId(pointCloud.subId1, pointCloud.subId2), Pose.identity, TrackingState.Tracking, IntPtr.Zero); } NativeArray <XRPointCloud> .Copy(m_ConversionBuffer, changes.updated, numUpdated); } if (numRemoved > 0) { var removedArray = removed.Select(id => new TrackableId(id.subId1, id.subId2)).ToArray(); changes.removed.CopyFrom(removedArray); } m_PreviousIds.Clear(); m_PreviousIds.AddRange(pointClouds.Keys); return(changes); }
public static TrackableChanges <XRPointCloud> ConsumeChanges(XRPointCloud defaultPointCloud, Allocator allocator) { lock (stateLock) { try { if (allocator != Allocator.None) { T[] EfficientArray <T>(IEnumerable <DepthApi.DepthInfo> collection, Func <DepthApi.DepthInfo, T> converter) => collection.Any(m => true) ? collection.Select(converter).ToArray() : Array.Empty <T>(); return(TrackableChanges <XRPointCloud> .CopyFrom( new NativeArray <XRPointCloud>( EfficientArray(DepthApi.added, m => m.ToPointCloud(defaultPointCloud)), allocator), new NativeArray <XRPointCloud>( EfficientArray(DepthApi.updated, m => m.ToPointCloud(defaultPointCloud)), allocator), new NativeArray <TrackableId>( EfficientArray(DepthApi.removed, m => m.trackableId), allocator), allocator)); } else { return(default);
public override unsafe TrackableChanges <XRPointCloud> GetChanges( XRPointCloud defaultPointCloud, Allocator allocator) { var context = UnityARCore_depth_AcquireChanges( out var addedPtr, out var addedLength, out var updatedPtr, out var updatedLength, out var removedPtr, out var removedLength, out var elementSize); try { return(new TrackableChanges <XRPointCloud>( addedPtr, addedLength, updatedPtr, updatedLength, removedPtr, removedLength, defaultPointCloud, elementSize, allocator)); } finally { UnityARCore_depth_ReleaseChanges(context); } }
public override TrackableChanges <XRPointCloud> GetChanges(XRPointCloud defaultPointCloud, Allocator allocator) => DepthApi.ConsumeChanges(defaultPointCloud, allocator);
public override TrackableChanges <XRPointCloud> GetChanges(XRPointCloud defaultPointCloud, Allocator allocator) => default;