String de nome
XR_ANDROID_device_anchor_persistence
Tipo de extensão
Extensão de instância
Número de extensão registrado
458
Revisão
1
Dependências de extensão e versão
XR_EXT_uuid
e XR_ANDROID_trackables
Data da última modificação
2024-10-10
Status do IP
Nenhuma reivindicação de IP conhecida.
Colaboradores
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Visão geral
Essa extensão permite que o aplicativo mantenha, recupere e remova âncoras no dispositivo atual para o usuário atual, em aplicativos e sessões do dispositivo.
Inspecionar o capability do sistema
A estrutura XrSystemDeviceAnchorPersistencePropertiesANDROID é definida como:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.supportsAnchorPersistence
é umXrBool32
que indica se o sistema atual oferece suporte à persistência de âncoras para âncoras espaciais.
Um aplicativo pode inspecionar se o sistema é capaz de manter âncoras espaciais (consulte xrCreateAnchorSpaceANDROID) estendendo o XrSystemProperties com a estrutura XrSystemDeviceAnchorPersistencePropertiesANDROID ao chamar xrGetSystemProperties. Para os âncoras rastreáveis com suporte, um aplicativo pode usar xrEnumerateSupportedPersistenceAnchorTypesANDROID para consultar os tipos com suporte.
Se XR_FALSE
for retornado para supportsAnchorPersistence
, XR_ERROR_FEATURE_UNSUPPORTED
será retornado das funções de persistência
de âncora do dispositivo que operam em uma âncora espacial.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de usar XrSystemDeviceAnchorPersistencePropertiesANDROID. type
precisa serXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.
A função xrEnumerateSupportedPersistenceAnchorTypesANDROID é definida como:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Descrições dos parâmetros
session
é a XrSession que cria a XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInput
é a capacidade dotrackableTypes
ou 0 para recuperar a capacidade necessária.trackableTypeCountOutput
é um ponteiro para a contagem da matriz ou um ponteiro para a capacidade necessária casotrackableTypeCapacityInput
seja insuficiente.trackableTypes
é um ponteiro para uma matriz de XrTrackableTypeANDROID, mas pode serNULL
setrackableTypeCapacityInput
for0
.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada
de como recuperar o tamanho
trackableTypes
necessário.
O aplicativo pode usar xrEnumerateSupportedPersistenceAnchorTypesANDROID para verificar o suporte à persistência de âncoras em outros rastreáveis XrTrackableTypeANDROID.
Se um determinado
XrTrackableTypeANDROID não for retornado na matriz trackableTypes
, XR_ERROR_FEATURE_UNSUPPORTED
será retornado das funções de persistência
de âncora do dispositivo que operam em uma âncora desse tipo.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrEnumerateSupportedPersistenceAnchorTypesANDROID. instance
precisa ser um identificador XrInstance válidotrackableTypeCountOutput
precisa ser um ponteiro para um valoruint32_t
- Se
trackableTypeCapacityInput
não for0, trackableTypes
, precisa ser um ponteiro para uma matriz de valorestrackableTypeCapacityInput
XrTrackableTypeANDROID.
Códigos de retorno
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
Criar um identificador de persistência de âncora do dispositivo
Um XrDeviceAnchorPersistenceANDROID é um identificador que representa os recursos necessários para persistir e acompanhar as âncoras persistidas.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
A função xrCreateDeviceAnchorPersistenceANDROID é definida como:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
Descrições dos parâmetros
session
é a XrSession que cria a XrDeviceAnchorPersistenceANDROID.createInfo
é o XrDeviceAnchorPersistenceCreateInfoANDROID que contém parâmetros para XrDeviceAnchorPersistenceANDROID.outHandle
é um ponteiro para um identificador em que a XrDeviceAnchorPersistenceANDROID criada é retornada.
Um aplicativo pode criar um handle XrDeviceAnchorPersistenceANDROID chamando xrCreateDeviceAnchorPersistenceANDROID. A XrDeviceAnchorPersistenceANDROID pode ser usada em chamadas de API subsequentes para manter ou remover âncoras. O gerenciador XrDeviceAnchorPersistenceANDROID precisa ser liberado usando a função xrDestroyDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrCreateDeviceAnchorPersistenceANDROID. session
precisa ser um identificador XrSession válidocreateInfo
precisa ser um ponteiro para uma estrutura XrDeviceAnchorPersistenceCreateInfoANDROID válida.outHandle
precisa ser um ponteiro para um gerenciador XrDeviceAnchorPersistenceANDROID.
Códigos de retorno
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
A estrutura XrDeviceAnchorPersistenceCreateInfoANDROID é definida como:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.
A estrutura XrDeviceAnchorPersistenceCreateInfoANDROID oferece opções de criação para o XrDeviceAnchorPersistenceANDROID quando transmitido para xrCreateDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de usar XrDeviceAnchorPersistenceCreateInfoANDROID. type
precisa serXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.
A função xrDestroyDeviceAnchorPersistenceANDROID é definida como:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Descrições dos parâmetros
handle
é um identificador XrDeviceAnchorPersistenceANDROID criado anteriormente porxrCreateDeviceAnchorPersistenceANDROID
.
A função xrDestroyDeviceAnchorPersistenceANDROID destrói o identificador de persistência de âncora do dispositivo.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrDestroyDeviceAnchorPersistenceANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válido.
Segurança da linha de execução
- O acesso a
handle
e a qualquer identificador filho precisa ser sincronizado externamente
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Manter uma âncora
A função xrPersistAnchorANDROID é definida como:
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
Descrições dos parâmetros
handle
é o XrDeviceAnchorPersistenceANDROID.persistedInfo
é o XrPersistedAnchorSpaceInfoANDROID que contém parâmetros para a persistência de âncora.anchorIdOutput
é um ponteiro para um XrUuidEXT em que o UUID da âncora persistente é retornado.
O aplicativo pode solicitar que as âncoras sejam mantidas chamando xrPersistAnchorANDROID. O aplicativo não pode presumir que um valor de retorno de sucesso significa que a âncora é mantida imediatamente. O aplicativo deve usar xrGetAnchorPersistStateANDROID para verificar o estado de persistência da âncora usando a âncora XrUuidEXT retornada. O aplicativo pode usar xrUnpersistAnchorANDROID para remover a âncora.
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID
será retornado se o âncor não estiver sendo rastreado no momento da chamada.XR_SUCCESS
será retornado quando a âncora for enfileirada para persistência.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrPersistAnchorANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válido.persistedInfo
precisa ser um ponteiro para uma estrutura XrPersistedAnchorSpaceInfoANDROID válida.anchorIdOutput
precisa ser um ponteiro para uma estrutura XrUuidEXT.
Códigos de retorno
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
A estrutura XrPersistedAnchorSpaceInfoANDROID é definida como:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.anchor
é um XrSpace de âncora criado anteriormente por xrCreateAnchorSpaceANDROID para persistir.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de usar XrPersistedAnchorSpaceInfoANDROID. type
precisa serXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.anchor
precisa ser um identificador XrSpace válido.
A função xrGetAnchorPersistStateANDROID é definida como:
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
Descrições dos parâmetros
handle
é o XrDeviceAnchorPersistenceANDROID.anchorId
é o XrUuidEXT da âncora.persistState
é um ponteiro para um XrAnchorPersistStateANDROID em que o estado da âncora é retornado.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
será retornado se o âncor XrUuidEXT não for encontrado.XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
será retornado se os dados persistidos deanchorId
não estiverem prontos.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrGetAnchorPersistStateANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válido.anchorId
precisa ser um ponteiro para uma estrutura XrUuidEXT válida.persistState
precisa ser um ponteiro para um valor XrAnchorPersistStateANDROID.
Códigos de retorno
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
O tipo enumerado XrAnchorPersistStateANDROID
é definido como:
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;
Tipo enumerado |
Descrição |
|
A âncora não foi solicitada para ser mantida pelo app. |
|
A âncora foi solicitada para ser mantida, mas ainda não foi. |
|
A âncora foi mantida pelo ambiente de execução. |
Criar uma âncora com dados persistentes
A função xrCreatePersistedAnchorSpaceANDROID é definida como:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Descrições dos parâmetros
handle
é o XrDeviceAnchorPersistenceANDROID.createInfo
é o XrPersistedAnchorSpaceCreateInfoANDROID que contém parâmetros para a criação de âncoras.anchorOutput
é um ponteiro para um XrSpace em que o novo espaço de âncora é retornado.
O aplicativo pode criar uma âncora XrSpace de uma
âncora persistida anteriormente chamando
xrCreatePersistedAnchorSpaceANDROID com o mesmo
XrUuidEXT. Essa é outra maneira de criar âncoras, conforme definido
em XR_ANDROID_trackables
.
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
será retornado se o âncor XrUuidEXT não for encontrado.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrCreatePersistedAnchorSpaceANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válido.createInfo
precisa ser um ponteiro para uma estrutura XrPersistedAnchorSpaceCreateInfoANDROID válida.anchorOutput
precisa ser um ponteiro para um identificador XrSpace
Códigos de retorno
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
A estrutura XrPersistedAnchorSpaceCreateInfoANDROID é definida como:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.anchorId
é o XrUuidEXT da âncora persistente para criar um XrSpace.
A estrutura XrPersistedAnchorSpaceCreateInfoANDROID fornece opções de criação para a âncora quando transmitida para xrCreateDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de usar XrPersistedAnchorSpaceCreateInfoANDROID. type
precisa serXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estrutura.
Enumerar âncoras persistentes
A função xrEnumeratePersistedAnchorsANDROID é definida como:
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
Descrições dos parâmetros
handle
é o XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInput
é a capacidade da matrizanchorIds
ou 0 para indicar uma solicitação para recuperar a capacidade necessária.anchorIdsCountOutput
é um ponteiro para a contagem deanchorIds
gravada ou um ponteiro para a capacidade necessária casoanchorIdsCapacityInput
seja insuficiente.anchorIds
é um ponteiro para uma matriz de estruturas XrUuidEXT. Pode serNULL
seanchorIdsCapacityInput
for 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada
de como recuperar o tamanho
anchorIds
necessário.
O aplicativo pode enumerar todas as âncoras persistentes atuais chamando
xrEnumeratePersistedAnchorsANDROID. anchorIds
vai armazenar os
UUIDs dos âncoras persistentes até a capacidade da matriz. Se a capacidade
for insuficiente, os aplicativos não terão garantias sobre quais âncoras serão
retornadas.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrEnumeratePersistedAnchorsANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válido.anchorIdsCountOutput
precisa ser um ponteiro para um valoruint32_t
- Se
anchorIdsCapacityInput
não for0, anchorIds
, deve ser um ponteiro para uma matriz de estruturasanchorIdsCapacityInput
XrUuidEXT
Códigos de retorno
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
Remover a persistência de uma âncora
A função xrUnpersistAnchorANDROID é definida como:
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
Descrições dos parâmetros
handle
é o XrDeviceAnchorPersistenceANDROID.anchorId
é o XrUuidEXT da âncora a ser despersistência.
O aplicativo pode remover uma âncora persistente chamando xrUnpersistAnchorANDROID e transmitindo a âncora XrUuidEXT para remover a persistência.
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
será retornado se os dados persistidos não estiverem prontos.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
será retornado se o âncor XrUuidEXT não for encontrado.
Uso válido (implícito)
- A extensão
XR_ANDROID_device_anchor_persistence
precisa ser ativada antes de chamar xrUnpersistAnchorANDROID. handle
precisa ser um identificador XrDeviceAnchorPersistenceANDROID válidoanchorId
precisa ser um ponteiro para uma estrutura XrUuidEXT válida.
Códigos de retorno
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
Exemplo de código para a persistência de âncora
O exemplo de código abaixo demonstra como inspecionar o capability do sistema, permitir, enumerar e remover âncoras, além de criar uma âncora a partir da âncora persistente 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));
Novos tipos de objeto
Novas constantes de tipo enumerado
A enumeração XrObjectType é estendida com:
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
A enumeração XrResult foi ampliada com:
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
A enumeração XrStructureType é ampliada com:
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
Novos tipos enumerados
Novas estruturas
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Novas funções
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Problemas
Histórico de versões
- Revisão 1, 10/10/2024 (Kenny Vercaemer)
- Descrição inicial da extensão