Имя Строка
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
должен быть указателем на массив значений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
и любым дочерним 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 , в котором возвращается состояние якоря. - Если якорь 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
должен быть указателем на массив структур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
. - Если якорь 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;
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
Новые функции
- xrEnumerateПоддерживаемыеPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Проблемы
История версий
- Редакция 1, 10.10.2024 (Кенни Веркемер)
- Первоначальное описание расширения
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.