Имя Строка
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. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.