Имя Строка
 XR_ANDROID_device_anchor_persistence
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
458
Пересмотр
1
Зависимости расширений и версий
 XR_EXT_uuid и XR_ANDROID_trackables
Дата последнего изменения
2024-10-10
Статус ИС
Нет известных претензий на права интеллектуальной собственности.
Участники
Нихав Джайн, Google
Левана Чен, Google
Спенсер Куин, Google
Кенни Веркемер, Google
Обзор
Это расширение позволяет приложению сохранять, извлекать и отменять привязки на текущем устройстве для текущего пользователя в разных приложениях и сеансах работы с устройством.
Проверить возможности системы
Структура XrSystemDeviceAnchorPersistencePropertiesANDROID определяется следующим образом:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Описания участников
-  
type— XrStructureType этой структуры. -  
next—NULLили указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении. -  
supportsAnchorPersistence— этоXrBool32указывающий, поддерживает ли текущая система сохранение якорей для пространственных якорей. 
Приложение может проверить, способна ли система сохранять пространственные якоря (см. xrCreateAnchorSpaceANDROID ), расширив XrSystemProperties с помощью структуры XrSystemDeviceAnchorPersistencePropertiesANDROID при вызове xrGetSystemProperties . Для поддерживаемых отслеживаемых якорей приложение может использовать xrEnumerateSupportedPersistenceAnchorTypesANDROID для запроса поддерживаемых типов.
 Если для supportsAnchorPersistence возвращается XR_FALSE , то из функций сохранения привязки устройства, работающих с пространственной привязкой, будет возвращено XR_ERROR_FEATURE_UNSUPPORTED
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед использованием XrSystemDeviceAnchorPersistencePropertiesANDROID -  
typeдолжен бытьXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID -  
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур 
Функция xrEnumerateSupportedPersistenceAnchorTypesANDROID определяется следующим образом:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    trackableTypeCapacityInput,
    uint32_t*                                   trackableTypeCountOutput,
    XrTrackableTypeANDROID*                     trackableTypes);
Описание параметров
-  
session— это XrSession , который создает XrDeviceAnchorPersistenceANDROID . -  
trackableTypeCapacityInput— это емкостьtrackableTypesили 0 для получения требуемой емкости. -  
trackableTypeCountOutput— указатель на количество элементов массива или указатель на требуемую емкость в случае, еслиtrackableTypeCapacityInputнедостаточно. -  
trackableTypes— это указатель на массив XrTrackableTypeANDROID , но может бытьNULL, еслиtrackableTypeCapacityInputравен0. -  Подробное описание получения требуемого размера 
trackableTypesсм. в разделе «Параметры размера буфера». 
Приложение может использовать xrEnumerateSupportedPersistenceAnchorTypesANDROID для проверки поддержки сохранения якорей в других отслеживаемых объектах XrTrackableTypeANDROID .
 Если заданный XrTrackableTypeANDROID не возвращается в массиве trackableTypes , то из функций сохранения привязки устройства, которые работают с привязкой этого типа, будет возвращено XR_ERROR_FEATURE_UNSUPPORTED
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrEnumerateSupportedPersistenceAnchorTypesANDROID -  
instanceдолжен быть допустимым дескриптором XrInstance -  
trackableTypeCountOutputдолжен быть указателем на значениеuint32_t -  Если 
trackableTypeCapacityInputне равен0, trackableTypesдолжен быть указателем на массив значенийtrackableTypeCapacityInputXrTrackableTypeANDROID. 
Коды возврата
-  
XR_SUCCESS 
-  
XR_ERROR_SYSTEM_INVALID -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SIZE_INSUFFICIENT -  
XR_ERROR_FUNCTION_UNSUPPORTED 
Создать дескриптор сохранения привязки устройства
XrDeviceAnchorPersistenceANDROID — это дескриптор, который представляет ресурсы, необходимые для сохранения и отслеживания сохраненных якорей.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
Функция xrCreateDeviceAnchorPersistenceANDROID определяется следующим образом:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
    XrSession                                   session,
    const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
    XrDeviceAnchorPersistenceANDROID*           outHandle);
Описание параметров
-  
session— это XrSession , который создает XrDeviceAnchorPersistenceANDROID . -  
createInfo— это XrDeviceAnchorPersistenceCreateInfoANDROID , содержащий параметры для XrDeviceAnchorPersistenceANDROID . -  
outHandle— указатель на дескриптор, в котором возвращается созданный XrDeviceAnchorPersistenceANDROID . 
Приложение может создать дескриптор XrDeviceAnchorPersistenceANDROID , вызвав xrCreateDeviceAnchorPersistenceANDROID . XrDeviceAnchorPersistenceANDROID может использоваться в последующих вызовах API для сохранения или отмены сохранения якорей. Дескриптор XrDeviceAnchorPersistenceANDROID должен быть в конечном итоге освобожден с помощью функции xrDestroyDeviceAnchorPersistenceANDROID .
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrCreateDeviceAnchorPersistenceANDROID -  
sessionдолжен быть действительным дескриптором XrSession -  
createInfoдолжен быть указателем на допустимую структуру XrDeviceAnchorPersistenceCreateInfoANDROID -  
outHandleдолжен быть указателем на дескриптор XrDeviceAnchorPersistenceANDROID 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_OUT_OF_MEMORY -  
XR_ERROR_LIMIT_REACHED 
Структура XrDeviceAnchorPersistenceCreateInfoANDROID определяется следующим образом:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Описания участников
-  
type— XrStructureType этой структуры. -  
next—NULLили указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении. 
Структура XrDeviceAnchorPersistenceCreateInfoANDROID предоставляет параметры создания для XrDeviceAnchorPersistenceANDROID при передаче в xrCreateDeviceAnchorPersistenceANDROID .
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед использованием XrDeviceAnchorPersistenceCreateInfoANDROID -  
typeдолжен бытьXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID -  
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур 
Функция xrDestroyDeviceAnchorPersistenceANDROID определяется следующим образом:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle);
Описание параметров
-  
handle— это дескриптор XrDeviceAnchorPersistenceANDROID , ранее созданныйxrCreateDeviceAnchorPersistenceANDROID. 
Функция xrDestroyDeviceAnchorPersistenceANDROID уничтожает дескриптор сохранения привязки устройства.
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrDestroyDeviceAnchorPersistenceANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID 
Безопасность потока
-  Доступ к 
handleи любым дочерним handle должен быть внешне синхронизирован. 
Коды возврата
-  
XR_SUCCESS 
-  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_HANDLE_INVALID 
Сохраняйте якорь
Функция xrPersistAnchorANDROID определяется как:
XrResult xrPersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceInfoANDROID*    persistedInfo,
    XrUuidEXT*                                  anchorIdOutput);
Описание параметров
-  
handle— XrDeviceAnchorPersistenceANDROID . -  
persistedInfo— это XrPersistedAnchorSpaceInfoANDROID , содержащий параметры для сохранения якоря. -  
anchorIdOutput— указатель на XrUuidEXT , в котором возвращается UUID сохраненного якоря. 
Приложение может запросить сохранение якорей, вызвав xrPersistAnchorANDROID . Приложение не должно предполагать, что возвращаемое значение успеха означает, что якорь немедленно сохраняется. Приложение должно использовать xrGetAnchorPersistStateANDROID для проверки состояния сохранения якоря с помощью возвращенного якоря XrUuidEXT . Приложение может использовать xrUnpersistAnchorANDROID для отмены сохранения якоря.
-  Если якорь не отслеживается во время вызова, будет возвращено сообщение 
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID -  Если сохраненные данные не готовы, будет возвращено 
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID. -  
XR_SUCCESSбудет возвращен после того, как якорь будет поставлен в очередь на сохранение. 
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrPersistAnchorANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID -  
persistedInfoдолжен быть указателем на допустимую структуру XrPersistedAnchorSpaceInfoANDROID -  
anchorIdOutputдолжен быть указателем на структуру XrUuidEXT 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID -  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_OUT_OF_MEMORY -  
XR_ERROR_LIMIT_REACHED 
Структура XrPersistedAnchorSpaceInfoANDROID определяется следующим образом:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrSpace            anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Описания участников
-  
type— XrStructureType этой структуры. -  
next—NULLили указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении. -  
anchor— это якорь XrSpace , ранее созданный xrCreateAnchorSpaceANDROID для сохранения. 
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед использованием XrPersistedAnchorSpaceInfoANDROID -  
typeдолжен бытьXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID -  
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур -  
anchorдолжен быть действительным дескриптором XrSpace 
Функция xrGetAnchorPersistStateANDROID определяется следующим образом:
XrResult xrGetAnchorPersistStateANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId,
    XrAnchorPersistStateANDROID*                persistState);
Описание параметров
-  
handle— XrDeviceAnchorPersistenceANDROID . -  
anchorId— это XrUuidEXT якоря. -  
persistState— это указатель на XrAnchorPersistStateANDROID , в котором возвращается состояние якоря. -  Если якорь XrUuidEXT не найден, будет возвращено 
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID. -  Если сохраненные данные 
anchorIdне готовы, будет возвращеноXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID 
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrGetAnchorPersistStateANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID -  
anchorIdдолжен быть указателем на допустимую структуру XrUuidEXT -  
persistStateдолжен быть указателем на значение XrAnchorPersistStateANDROID 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID 
 Перечисление XrAnchorPersistStateANDROID определяется как: 
typedef enum XrAnchorPersistStateANDROID {
    XR_ANCHOR_PERSIST_STATE_PERSIST_NOT_REQUESTED_ANDROID = 0,
    XR_ANCHOR_PERSIST_STATE_PERSIST_PENDING_ANDROID = 1,
    XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID = 2
} XrAnchorPersistStateANDROID;
Перечисление  | Описание  | 
   | Приложение не запросило сохранение якоря.  | 
   | Якорь был запрошен на сохранение, но пока не сохранен.  | 
   | Якорь успешно сохранен средой выполнения.  | 
Создать якорь из сохраненных данных
Функция xrCreatePersistedAnchorSpaceANDROID определяется следующим образом:
XrResult xrCreatePersistedAnchorSpaceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace*                                    anchorOutput);
Описание параметров
-  
handle— XrDeviceAnchorPersistenceANDROID . -  
createInfo— это XrPersistedAnchorSpaceCreateInfoANDROID , содержащий параметры для создания якоря. -  
anchorOutput— указатель на XrSpace , в котором возвращается новое якорное пространство. 
 Приложение может создать якорь XrSpace из ранее сохраненного якоря, вызвав xrCreatePersistedAnchorSpaceANDROID с тем же XrUuidEXT . Это еще один способ создания якорей, как определено в XR_ANDROID_trackables .
-  Если якорь XrUuidEXT не найден, будет возвращено 
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID. 
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrCreatePersistedAnchorSpaceANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID -  
createInfoдолжен быть указателем на допустимую структуру XrPersistedAnchorSpaceCreateInfoANDROID -  
anchorOutputдолжен быть указателем на дескриптор XrSpace 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_OUT_OF_MEMORY -  
XR_ERROR_LIMIT_REACHED -  
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID -  
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID 
Структура XrPersistedAnchorSpaceCreateInfoANDROID определяется следующим образом:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrUuidEXT          anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Описания участников
-  
type— XrStructureType этой структуры. -  
next—NULLили указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении. -  
anchorId— это XrUuidEXT сохраненного якоря, из которого создается якорь XrSpace . 
Структура XrPersistedAnchorSpaceCreateInfoANDROID предоставляет параметры создания якоря при передаче в xrCreateDeviceAnchorPersistenceANDROID .
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед использованием XrPersistedAnchorSpaceCreateInfoANDROID -  
typeдолжен бытьXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID -  
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур 
Перечислить постоянные якоря
Функция xrEnumeratePersistedAnchorsANDROID определяется следующим образом:
XrResult xrEnumeratePersistedAnchorsANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    uint32_t                                    anchorIdsCapacityInput,
    uint32_t*                                   anchorIdsCountOutput,
    XrUuidEXT*                                  anchorIds);
Описание параметров
-  
handle— XrDeviceAnchorPersistenceANDROID . -  
anchorIdsCapacityInput— емкость массиваanchorIdsили 0 для указания запроса на извлечение требуемой емкости. -  
anchorIdsCountOutput— указатель на количество записанныхanchorIdsили указатель на требуемую емкость в случае, еслиanchorIdsCapacityInputнедостаточно. -  
anchorIds— указатель на массив структур XrUuidEXT . Может бытьNULL, еслиanchorIdsCapacityInputравен 0. -  Подробное описание получения требуемого размера 
anchorIdsсм. в разделе «Параметры размера буфера». 
 Приложение может перечислить все текущие сохраненные якоря, вызвав xrEnumeratePersistedAnchorsANDROID . anchorIds будет хранить UUID сохраненных якорей до емкости массива. Если емкости недостаточно, у приложений нет никаких гарантий относительно того, какие якоря будут возвращены.
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrEnumeratePersistedAnchorsANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID -  
anchorIdsCountOutputдолжен быть указателем на значениеuint32_t -  Если 
anchorIdsCapacityInputне равен0, anchorIdsдолжен быть указателем на массив структурanchorIdsCapacityInputXrUuidEXT 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID -  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_SIZE_INSUFFICIENT 
Удалить сохраняющийся якорь
Функция xrUnpersistAnchorANDROID определяется как:
XrResult xrUnpersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId);
Описание параметров
-  
handle— XrDeviceAnchorPersistenceANDROID . -  
anchorId— это XrUuidEXT анкора, который необходимо отменить. 
Приложение может отменить сохранение сохраненного якоря, вызвав xrUnpersistAnchorANDROID и передав якорь XrUuidEXT для отмены сохранения.
-  Если сохраненные данные не готовы, будет возвращено 
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID. -  Если якорь XrUuidEXT не найден, будет возвращено 
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID. 
Допустимое использование (подразумеваемое)
-  Расширение 
XR_ANDROID_device_anchor_persistenceдолжно быть включено перед вызовом xrUnpersistAnchorANDROID -  
handleдолжен быть допустимым дескриптором XrDeviceAnchorPersistenceANDROID -  
anchorIdдолжен быть указателем на допустимую структуру XrUuidEXT 
Коды возврата
-  
XR_SUCCESS -  
XR_SESSION_LOSS_PENDING 
-  
XR_ERROR_FUNCTION_UNSUPPORTED -  
XR_ERROR_VALIDATION_FAILURE -  
XR_ERROR_RUNTIME_FAILURE -  
XR_ERROR_HANDLE_INVALID -  
XR_ERROR_INSTANCE_LOST -  
XR_ERROR_SESSION_LOST -  
XR_ERROR_OUT_OF_MEMORY -  
XR_ERROR_LIMIT_REACHED -  
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID -  
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID 
Пример кода для сохранения якоря
В следующем примере кода показано, как проверять возможности системы, сохранять, перечислять и отменять сохранение якорей, а также создавать якорь из сохраненного якоря XrUuidEXT .
XrSession session; // previously initialized
XrSpace anchor; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrEnumerateSupportedPersistenceAnchorTypesANDROID xrEnumerateSupportedPersistenceAnchorTypesANDROID; // previously initialized
PFN_xrCreateDeviceAnchorPersistenceANDROID xrCreateDeviceAnchorPersistenceANDROID; // previously initialized
PFN_xrDestroyDeviceAnchorPersistenceANDROID xrDestroyDeviceAnchorPersistenceANDROID; // previously initialized
PFN_xrPersistAnchorANDROID xrPersistAnchorANDROID; // previously initialized
PFN_xrGetAnchorPersistStateANDROID xrGetAnchorPersistStateANDROID; // previously initialized
PFN_xrCreatePersistedAnchorSpaceANDROID xrCreatePersistedAnchorSpaceANDROID; // previously initialized
PFN_xrEnumeratePersistedAnchorsANDROID xrEnumeratePersistedAnchorsANDROID; // previously initialized
PFN_xrUnpersistAnchorANDROID xrUnpersistAnchorANDROID; // previously initialized
// Create a device anchor persistence handle
XrDeviceAnchorPersistenceCreateInfoANDROID persistenceHandleCreateInfo;
persistenceHandleCreateInfo.type = XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID;
persistenceHandleCreateInfo.next = nullptr;
XrDeviceAnchorPersistenceANDROID persistenceHandle;
CHK_XR(xrCreateDeviceAnchorPersistenceANDROID(session, &persistenceHandleCreateInfo, &persistenceHandle));
/// Persist an anchor
XrPersistedAnchorSpaceInfo anchorSpaceInfo;
anchorSpaceInfo.type = XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID;
anchorSpaceInfo.next = nullptr;
anchorSpaceInfo.anchor = anchor;
XrUuidEXT anchorId;
do {
  XrResult result = xrPersistAnchorANDROID(
    persistenceHandle, &anchorSpaceInfo, &anchorId);
} while (result == XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID ||
         result == XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID);
if (result != XR_SUCCESS) {
  // Handle errors
}
// ... Update loop ...
// Poll for anchor persist state to confirm if it was successfully persisted
XrAnchorPersistStateANDROID persistState;
CHK_XR(xrGetAnchorPersistStateANDROID(persistenceHandle, &anchorId, &persistState));
if (persistState == XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID)  {
  // The anchor was persisted successfully
}
// Enumerate all persisted anchors
uint32_t anchorCountOutput = 0;
std::vector<XrUuidEXT> allAnchors;
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
  persistenceHandle,
  anchorCountOutput,
  &anchorCountOutput,
  nullptr
));
allAnchors.resize(anchorCountOutput, XR_NULL_HANDLE);
// Fetch the actual anchors in an appropriately resized array.
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
  persistenceHandle,
  anchorCountOutput,
  &anchorCountOutput,
  allAnchors.data()
));
// Creating an anchor from a previously persisted anchor using its UUID
XrTime updateTime; // Time used for the current frame's simulation update.
XrUuidEXT anchorId = allAnchors[0];
XrPersistedAnchorSpaceCreateInfo createInfo;
createInfo.type = XR_TYPE_PERSISTED_ANCHOR_CREATE_INFO_ANDROID;
createInfo.next = nullptr;
createInfo.anchorId = anchorId;
XrSpace anchorSpace = XR_NULL_HANDLE;
CHK_XR(xrCreatePersistedAnchorSpaceANDROID(
  persistenceHandle,
  &createInfo,
  &anchorSpace
));
// The anchor was found and retrieved from the local device successfully.
XrSpaceLocation anchorLocation = { XR_TYPE_SPACE_LOCATION };
CHK_XR(xrLocateSpace(anchorSpace, appSpace, updateTime, &anchorLocation));
XrPosef pose = anchorLocation.pose;
// Unpersist the anchor
do {
  XrResult result = xrUnpersistAnchorANDROID(persistenceHandle, &anchorId);
} while (result == XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID);
if (result != XR_SUCCESS) {
  // Handle errors
}
// Once app is done with all persistence related tasks
CHK_XR(xrDestroySpace(anchorSpace));
CHK_XR(xrDestroyDeviceAnchorPersistenceANDROID(persistenceHandle));
Новые типы объектов
Новые константы перечисления
Перечисление XrObjectType расширено с помощью:
-  
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID 
Перечисление XrResult расширено:
-  
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID -  
XR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROID -  
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID -  
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID 
Перечисление XrStructureType расширено:
-  
XR_TYPE_PERSISTED_ANCHOR_ANDROID -  
XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID -  
XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID -  
XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID 
Новые перечисления
Новые структуры
- XrDeviceAnchorPersistenceCreateInfoANDROID
 - XrPersistedAnchorSpaceCreateInfoANDROID
 - XrPersistedAnchorSpaceInfoANDROID
 - XrSystemDeviceAnchorPersistencePropertiesANDROID
 
Новые функции
- xrEnumerateПоддерживаемыеPersistenceAnchorTypesANDROID
 - xrCreateDeviceAnchorPersistenceANDROID
 - xrDestroyDeviceAnchorPersistenceANDROID
 - xrPersistAnchorANDROID
 - xrGetAnchorPersistStateANDROID
 - xrCreatePersistedAnchorSpaceANDROID
 - xrEnumeratePersistedAnchorsANDROID
 - xrUnpersistAnchorANDROID
 
Проблемы
История версий
-  Редакция 1, 10.10.2024 (Кенни Веркемер)
- Первоначальное описание расширения
 
 
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.