Cadena de nombre
XR_ANDROID_device_anchor_persistence
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
458
Revisión
1
Dependencias de extensiones y versiones
XR_EXT_uuid y XR_ANDROID_trackables
Fecha de la última modificación
2024-10-10
Estado de la IP
No hay reclamos de IP conocidos.
Colaboradores
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Descripción general
Esta extensión permite que la aplicación conserve, recupere y cancele las anclas en el dispositivo actual para el usuario actual, en todas las aplicaciones y sesiones del dispositivo.
Cómo inspeccionar la capacidad del sistema
La estructura XrSystemDeviceAnchorPersistencePropertiesANDROID se define de la siguiente manera:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.supportsAnchorPersistencees unXrBool32que indica si el sistema actual admite la persistencia de anclas para anclas espaciales.
Una aplicación puede inspeccionar si el sistema es capaz de conservar las anclas espaciales (consulta xrCreateAnchorSpaceANDROID) extendiendo XrSystemProperties con la estructura XrSystemDeviceAnchorPersistencePropertiesANDROID cuando se llama a xrGetSystemProperties. Para los anclas rastreables compatibles, una aplicación puede usar xrEnumerateSupportedPersistenceAnchorTypesANDROID para consultar los tipos compatibles.
Si se muestra XR_FALSE para supportsAnchorPersistence, se mostrará XR_ERROR_FEATURE_UNSUPPORTED desde las funciones de persistencia de la ancla del dispositivo que operan en una ancla espacial.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de usar XrSystemDeviceAnchorPersistencePropertiesANDROID. typedebe serXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID.nextdebe serNULLo un puntero válido a la próxima estructura en una cadena de estructuras.
La función xrEnumerateSupportedPersistenceAnchorTypesANDROID se define de la siguiente manera:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Descripciones de los parámetros
sessiones la XrSession que crea XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInputes la capacidad detrackableTypes, o 0 para recuperar la capacidad requerida.trackableTypeCountOutputes un puntero al recuento del array o un puntero a la capacidad requerida en caso de quetrackableTypeCapacityInputno sea suficiente.trackableTypeses un puntero a un array de XrTrackableTypeANDROID, pero puede serNULLsitrackableTypeCapacityInputes0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
trackableTypesrequerido.
La aplicación puede usar xrEnumerateSupportedPersistenceAnchorTypesANDROID para verificar la compatibilidad con la persistencia de anclas en otros elementos rastreables XrTrackableTypeANDROID.
Si no se muestra un XrTrackableTypeANDROID determinado en el array trackableTypes, se mostrará XR_ERROR_FEATURE_UNSUPPORTED desde las funciones de persistencia del ancla del dispositivo que operan en un ancla de ese tipo.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrEnumerateSupportedPersistenceAnchorTypesANDROID. instancedebe ser un identificador XrInstance válido.trackableTypeCountOutputdebe ser un puntero a un valoruint32_t.- Si
trackableTypeCapacityInputno es0, trackableTypes, debe ser un puntero a un array de valorestrackableTypeCapacityInputXrTrackableTypeANDROID.
Códigos de retorno
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
Crea un control de persistencia de ancla de dispositivo
Un XrDeviceAnchorPersistenceANDROID es un identificador que representa los recursos necesarios para conservar y hacer un seguimiento de los anclas persistentes.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
La función xrCreateDeviceAnchorPersistenceANDROID se define de la siguiente manera:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
Descripciones de los parámetros
sessiones la XrSession que crea XrDeviceAnchorPersistenceANDROID.createInfoes el XrDeviceAnchorPersistenceCreateInfoANDROID que contiene parámetros para XrDeviceAnchorPersistenceANDROID.outHandlees un puntero a un controlador en el que se muestra el XrDeviceAnchorPersistenceANDROID creado.
Una aplicación puede crear un control XrDeviceAnchorPersistenceANDROID llamando a xrCreateDeviceAnchorPersistenceANDROID. XrDeviceAnchorPersistenceANDROID se puede usar en llamadas posteriores a la API para conservar o anular la conservación de los ejes. El control XrDeviceAnchorPersistenceANDROID debe liberarse con la función xrDestroyDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrCreateDeviceAnchorPersistenceANDROID. sessiondebe ser un identificador XrSession válido.createInfodebe ser un puntero a una estructura XrDeviceAnchorPersistenceCreateInfoANDROID válida.outHandledebe ser un puntero a un controlador XrDeviceAnchorPersistenceANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
La estructura XrDeviceAnchorPersistenceCreateInfoANDROID se define de la siguiente manera:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
La estructura XrDeviceAnchorPersistenceCreateInfoANDROID proporciona opciones de creación para XrDeviceAnchorPersistenceANDROID cuando se pasa a xrCreateDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de usar XrDeviceAnchorPersistenceCreateInfoANDROID. typedebe serXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID.nextdebe serNULLo un puntero válido a la próxima estructura en una cadena de estructuras.
La función xrDestroyDeviceAnchorPersistenceANDROID se define de la siguiente manera:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Descripciones de los parámetros
handlees un control XrDeviceAnchorPersistenceANDROID quexrCreateDeviceAnchorPersistenceANDROIDcreó anteriormente.
La función xrDestroyDeviceAnchorPersistenceANDROID destruye el control de persistencia del ancla del dispositivo.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrDestroyDeviceAnchorPersistenceANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.
Seguridad de subprocesos
- El acceso a
handley a cualquier controlador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Cómo conservar un ancla
La función xrPersistAnchorANDROID se define de la siguiente manera:
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
Descripciones de los parámetros
handlees XrDeviceAnchorPersistenceANDROID.persistedInfoes el XrPersistedAnchorSpaceInfoANDROID que contiene parámetros para la persistencia de la ancla.anchorIdOutputes un puntero a un XrUuidEXT en el que se muestra el UUID del ancla persistente.
La aplicación puede solicitar que se conserven las anclas llamando a xrPersistAnchorANDROID. La aplicación no debe suponer que un valor que se muestra como correcto significa que el ancla se conserva de inmediato. La aplicación debe usar xrGetAnchorPersistStateANDROID para verificar el estado de persistencia del ancla con el ancla que se muestra XrUuidEXT. La aplicación puede usar xrUnpersistAnchorANDROID para anular la persistencia del ancla.
- Se mostrará
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDsi no se está haciendo un seguimiento del ancla en el momento de la llamada. - Se mostrará
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDsi los datos persistedos no están listos. - Se mostrará
XR_SUCCESSuna vez que el ancla se haya puesto en cola para la persistencia.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrPersistAnchorANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.persistedInfodebe ser un puntero a una estructura XrPersistedAnchorSpaceInfoANDROID válida.anchorIdOutputdebe ser un puntero a una estructura XrUuidEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
La estructura XrPersistedAnchorSpaceInfoANDROID se define de la siguiente manera:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.anchores un XrSpace de ancla que xrCreateAnchorSpaceANDROID creó anteriormente para que persista.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de usar XrPersistedAnchorSpaceInfoANDROID. typedebe serXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID.nextdebe serNULLo un puntero válido a la próxima estructura en una cadena de estructuras.anchordebe ser un identificador de XrSpace válido.
La función xrGetAnchorPersistStateANDROID se define de la siguiente manera:
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
Descripciones de los parámetros
handlees XrDeviceAnchorPersistenceANDROID.anchorIdes el XrUuidEXT del ancla.persistStatees un puntero a un XrAnchorPersistStateANDROID en el que se muestra el estado del ancla.- Se mostrará
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDsi no se encuentra el ancla XrUuidEXT. - Se mostrará
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDsi los datos persistentes deanchorIdno están listos.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrGetAnchorPersistStateANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.anchorIddebe ser un puntero a una estructura XrUuidEXT válida.persistStatedebe ser un puntero a un valor XrAnchorPersistStateANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
La enumeración XrAnchorPersistStateANDROID se define de la siguiente manera:
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;
Enum |
Descripción |
|
La app no solicitó que se conservara el ancla. |
|
Se solicitó que el ancla se mantenga, pero aún no se conserva. |
|
El entorno de ejecución persistió correctamente el ancla. |
Crea un ancla a partir de datos persistentes
La función xrCreatePersistedAnchorSpaceANDROID se define de la siguiente manera:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Descripciones de los parámetros
handlees XrDeviceAnchorPersistenceANDROID.createInfoes el XrPersistedAnchorSpaceCreateInfoANDROID que contiene parámetros para la creación de la ancla.anchorOutputes un puntero a un XrSpace en el que se muestra el nuevo espacio de anclaje.
La aplicación puede crear un ancla XrSpace a partir de una ancla persistente anterior llamando a xrCreatePersistedAnchorSpaceANDROID con el mismo XrUuidEXT. Esta es otra forma de crear anclas como se define en XR_ANDROID_trackables.
- Se mostrará
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDsi no se encuentra el ancla XrUuidEXT.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrCreatePersistedAnchorSpaceANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.createInfodebe ser un puntero a una estructura XrPersistedAnchorSpaceCreateInfoANDROID válida.anchorOutputdebe ser un puntero a un controlador de XrSpace.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
La estructura XrPersistedAnchorSpaceCreateInfoANDROID se define de la siguiente manera:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.anchorIdes el XrUuidEXT del ancla persistente desde el que se crea un XrSpace de ancla.
La estructura XrPersistedAnchorSpaceCreateInfoANDROID proporciona opciones de creación para el ancla cuando se pasa a xrCreateDeviceAnchorPersistenceANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de usar XrPersistedAnchorSpaceCreateInfoANDROID. typedebe serXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID.nextdebe serNULLo un puntero válido a la próxima estructura en una cadena de estructuras.
Cómo enumerar anclas persistentes
La función xrEnumeratePersistedAnchorsANDROID se define de la siguiente manera:
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
Descripciones de los parámetros
handlees XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInputes la capacidad del arrayanchorIds, o 0 para indicar una solicitud para recuperar la capacidad requerida.anchorIdsCountOutputes un puntero al recuento deanchorIdsescrito o un puntero a la capacidad requerida en caso de queanchorIdsCapacityInputsea insuficiente.anchorIdses un puntero a un array de estructuras XrUuidEXT. Puede serNULLsianchorIdsCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
anchorIdsrequerido.
La aplicación puede enumerar todas las anclas persistentes actuales llamando a xrEnumeratePersistedAnchorsANDROID. anchorIds retendrá los UUID de los anclajes persistentes hasta la capacidad del array. Si la capacidad es insuficiente, las aplicaciones no tienen garantías sobre qué anclas se muestran.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrEnumeratePersistedAnchorsANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.anchorIdsCountOutputdebe ser un puntero a un valoruint32_t.- Si
anchorIdsCapacityInputno es0, anchorIds, debe ser un puntero a un array de estructurasanchorIdsCapacityInputXrUuidEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENT
Cómo anular la persistencia de un ancla persistente
La función xrUnpersistAnchorANDROID se define de la siguiente manera:
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
Descripciones de los parámetros
handlees XrDeviceAnchorPersistenceANDROID.anchorIdes el XrUuidEXT del ancla que se anulará.
La aplicación puede anular la persistencia de un ancla persistente llamando a xrUnpersistAnchorANDROID y pasando el ancla XrUuidEXT del ancla que se anulará.
- Se mostrará
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDsi los datos persistentes no están listos. - Se mostrará
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDsi no se encuentra el ancla XrUuidEXT.
Uso válido (implícito)
- La extensión
XR_ANDROID_device_anchor_persistencedebe estar habilitada antes de llamar a xrUnpersistAnchorANDROID. handledebe ser un control XrDeviceAnchorPersistenceANDROID válido.anchorIddebe ser un puntero a una estructura XrUuidEXT válida.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
Ejemplo de código para la persistencia de anuncios fijos
En el siguiente código de ejemplo, se muestra cómo inspeccionar la capacidad del sistema, conservar, enumerar y anular la persistencia de los anclajes, además de crear un ancla a partir del ancla conservada 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));
Nuevos tipos de objetos
Nuevas constantes de enum
La enumeración XrObjectType se extiende con lo siguiente:
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
La enumeración XrResult se extiende con lo siguiente:
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
La enumeración XrStructureType se extiende con lo siguiente:
XR_TYPE_PERSISTED_ANCHOR_ANDROIDXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROIDXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROIDXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
Enumeraciones nuevas
Nuevas estructuras
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Funciones nuevas
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Problemas
Historial de versiones
- Revisión 1, 10/10/2024 (Kenny Vercaemer)
- Descripción inicial de la extensión
OpenXR™ y el logotipo de OpenXR son marcas comerciales de The Khronos Group Inc. y están registradas como marca comercial en China, la Unión Europea, Japón y el Reino Unido.