Строка имени
XR_ANDROID_device_anchor_persistence
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
458
Редакция
1
Зависимости расширений и версий
XR_EXT_uuid
и XR_ANDROID_trackables
Дата последнего изменения
2024-10-10
IP-статус
Нет известных претензий на интеллектуальную собственность.
Авторы
Нихав Джайн, 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 для запроса поддерживаемых типов.
Если XR_FALSE
возвращается для supportsAnchorPersistence
, то 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
должен быть указателем на массив значенийtrackableTypeCapacityInput
XrTrackableTypeANDROID.
Коды возврата
-
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
и любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
-
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_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 , в котором возвращается состояние привязки. -
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена. -
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
будет возвращен, если сохраненныеanchorId
не готовы.
Допустимое использование (неявное)
- Расширение
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
.
-
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена.
Допустимое использование (неявное)
- Расширение
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
должен быть указателем на массив структурanchorIdsCapacityInput
XrUuidEXT.
Коды возврата
-
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
будет возвращен, если сохраненные данные не готовы. -
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена.
Допустимое использование (неявное)
- Расширение
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;
CHK_XR(xrPersistAnchorANDROID(persistenceHandle, &anchorSpaceInfo, &anchorId));
// ... 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;
// 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
Новые функции
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Проблемы
История версий
- Редакция 1, 10 октября 2024 г. (Кенни Веркамер)
- Первоначальное описание расширения
Строка имени
XR_ANDROID_device_anchor_persistence
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
458
Редакция
1
Зависимости расширений и версий
XR_EXT_uuid
и XR_ANDROID_trackables
Дата последнего изменения
2024-10-10
IP-статус
Нет известных претензий на интеллектуальную собственность.
Авторы
Нихав Джайн, 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 для запроса поддерживаемых типов.
Если XR_FALSE
возвращается для supportsAnchorPersistence
, то 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
должен быть указателем на массив значенийtrackableTypeCapacityInput
XrTrackableTypeANDROID.
Коды возврата
-
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
и любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
-
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_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 , в котором возвращается состояние привязки. -
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена. -
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
будет возвращен, если сохраненныеanchorId
не готовы.
Допустимое использование (неявное)
- Расширение
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
.
-
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена.
Допустимое использование (неявное)
- Расширение
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
должен быть указателем на массив структурanchorIdsCapacityInput
XrUuidEXT.
Коды возврата
-
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
будет возвращен, если сохраненные данные не готовы. -
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
будет возвращен, если привязка XrUuidEXT не найдена.
Допустимое использование (неявное)
- Расширение
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;
CHK_XR(xrPersistAnchorANDROID(persistenceHandle, &anchorSpaceInfo, &anchorId));
// ... 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;
// 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
Новые функции
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Проблемы
История версий
- Редакция 1, 10 октября 2024 г. (Кенни Веркамер)
- Первоначальное описание расширения