Beispiel #1
0
            public unsafe override TrackableChanges <XRTrackedImage> GetChanges(
                XRTrackedImage defaultTrackedImage,
                Allocator allocator)
            {
                void *addedPtr, updatedPtr, removedPtr;
                int   addedLength, updatedLength, removedLength, stride;

                var context = UnityARKit_ImageTracking_AcquireChanges(
                    out addedPtr, out addedLength,
                    out updatedPtr, out updatedLength,
                    out removedPtr, out removedLength,
                    out stride);

                try
                {
                    return(new TrackableChanges <XRTrackedImage>(
                               addedPtr, addedLength,
                               updatedPtr, updatedLength,
                               removedPtr, removedLength,
                               defaultTrackedImage, stride,
                               allocator));
                }
                finally
                {
                    UnityARKit_ImageTracking_ReleaseChanges(context);
                }
            }
            public unsafe override TrackableChanges <XRTrackedImage> GetChanges(XRTrackedImage defaultTrackedImage, Allocator allocator)
            {
                if (!IsSubsystemStateValid())
                {
                    return(default(TrackableChanges <XRTrackedImage>));
                }

                void *addedPtr, updatedPtr, removedPtr;
                int   addedLength, updatedLength, removedLength, stride;

                var context = Native.AcquireChanges(
                    s_NativeProviderPtr,
                    out addedPtr, out addedLength,
                    out updatedPtr, out updatedLength,
                    out removedPtr, out removedLength,
                    out stride);

                try
                {
                    return(new TrackableChanges <XRTrackedImage>(
                               addedPtr, addedLength,
                               updatedPtr, updatedLength,
                               removedPtr, removedLength,
                               defaultTrackedImage, stride,
                               allocator));
                }
                finally
                {
                    Native.ReleaseChanges(context);
                }
            }
            public override TrackableChanges <XRTrackedImage> GetChanges(XRTrackedImage defaultTrackedImage, Allocator allocator)
            {
                TrackableChanges <XRTrackedImage> changes;
                var numAddedMarkers = m_Added.Count;

                if (numAddedMarkers > 0)
                {
                    Utils.EnsureCapacity(ref m_ConversionBuffer, numAddedMarkers);
                    for (var i = 0; i < numAddedMarkers; i++)
                    {
                        var added = m_Added[i];

                        // if the same trackable ID is present more than once in a frame, the ARF validation utility
                        // will throw an error in the editor and dev builds.  Because subsystem tracking doesn't update every frame,
                        // it's possible to get the same marker in both.  Use the most recent version as an add if this happens.
                        if (m_Updated.TryGetValue(added.id, out var updatedValue))
                        {
                            m_Added[i] = updatedValue;
                            m_Updated.Remove(added.id);
                        }
                    }

                    // create this after in case any have been removed from the updated collection
                    changes = new TrackableChanges <XRTrackedImage>(m_Added.Count, m_Updated.Count, m_Removed.Count, allocator);

                    for (var i = 0; i < numAddedMarkers; i++)
                    {
                        m_ConversionBuffer[i] = TrackedImageFromMRMarker(m_Added[i]);
                    }

                    NativeArray <XRTrackedImage> .Copy(m_ConversionBuffer, changes.added, numAddedMarkers);

                    m_Added.Clear();
                }
                else
                {
                    changes = new TrackableChanges <XRTrackedImage>(m_Added.Count, m_Updated.Count, m_Removed.Count, allocator);
                }

                var numUpdatedMarkers = m_Updated.Count;

                if (numUpdatedMarkers > 0)
                {
                    Utils.EnsureCapacity(ref m_ConversionBuffer, numUpdatedMarkers);
                    var i = 0;
                    foreach (var updatedMarker in m_Updated.Values)
                    {
                        m_ConversionBuffer[i++] = TrackedImageFromMRMarker(updatedMarker);
                    }

                    NativeArray <XRTrackedImage> .Copy(m_ConversionBuffer, changes.updated, numUpdatedMarkers);

                    m_Updated.Clear();
                }

                var numRemovedMarkers = m_Removed.Count;

                if (numRemovedMarkers > 0)
                {
                    Utils.EnsureCapacity(ref m_IdConversionBuffer, numRemovedMarkers);
                    var i = 0;
                    foreach (var id in m_Removed)
                    {
                        m_IdConversionBuffer[i++] = new TrackableId(id.subId1, id.subId2);
                    }

                    NativeArray <TrackableId> .Copy(m_IdConversionBuffer, changes.removed, numRemovedMarkers);

                    m_Removed.Clear();
                }

                return(changes);
            }
 /// <summary>
 /// Get the changes (added, updated, removed) to the tracked images since the last call to this method.
 /// </summary>
 /// <param name="defaultTrackedImage">An <see cref="XRTrackedImage"/> populated with default values.
 /// The implementation should first fill arrays of added, updated, and removed with copies of this
 /// before copying in its own values. This guards against additional fields added to the <see cref="XRTrackedImage"/> in the future.</param>
 /// <param name="allocator">The allocator to use for the returned data.</param>
 /// <returns>The set of changes (added, updated, removed) tracked images since the last call to this method.</returns>
 public abstract TrackableChanges <XRTrackedImage> GetChanges(XRTrackedImage defaultTrackedImage, Allocator allocator);