예제 #1
0
            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);
                }
            }
예제 #2
0
            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);
            }
예제 #3
0
        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);
예제 #4
0
            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);
예제 #6
0
 public override TrackableChanges <XRPointCloud> GetChanges(XRPointCloud defaultPointCloud, Allocator allocator) => default;