Chaîne de nom
XR_ANDROID_device_anchor_persistence
Type d'extension
Extension d'instance
Numéro d'extension enregistré
458
Révision
1
Dépendances d'extension et de version
XR_EXT_uuid et XR_ANDROID_trackables
Date de dernière modification
2024-10-10
État de l'adresse IP
Aucune revendication d'adresse IP connue.
Contributeurs
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Présentation
Cette extension permet à l'application de conserver, de récupérer et de supprimer les ancrages sur l'appareil actuel pour l'utilisateur actuel, entre les applications et les sessions de l'appareil.
Inspecter les fonctionnalités du système
La structure XrSystemDeviceAnchorPersistencePropertiesANDROID est définie comme suit :
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante d'une chaîne de structures. Aucune de ces structures n'est définie dans OpenXR de base ni dans cette extension.supportsAnchorPersistenceest unXrBool32qui indique si le système actuel est compatible avec la persistance des ancrages pour les ancrages spatiaux.
Une application peut vérifier si le système est capable de conserver des ancrages spatiaux (voir xrCreateAnchorSpaceANDROID) en étendant XrSystemProperties avec la structure XrSystemDeviceAnchorPersistencePropertiesANDROID lors de l'appel de xrGetSystemProperties. Pour les ancrages traçables compatibles, une application peut utiliser xrEnumerateSupportedPersistenceAnchorTypesANDROID pour interroger les types compatibles.
Si XR_FALSE est renvoyé pour supportsAnchorPersistence, XR_ERROR_FEATURE_UNSUPPORTED est renvoyé à partir des fonctions de persistance d'ancrage d'appareil qui fonctionnent sur un ancrage spatial.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'utiliser XrSystemDeviceAnchorPersistencePropertiesANDROID. typedoit êtreXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID.nextdoit êtreNULLou un pointeur valide vers la structure suivante d'une chaîne de structures.
La fonction xrEnumerateSupportedPersistenceAnchorTypesANDROID est définie comme suit :
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Descriptions des paramètres
sessionest l'XrSession qui crée l'XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInputcorrespond à la capacité detrackableTypes, ou à 0 pour récupérer la capacité requise.trackableTypeCountOutputest un pointeur vers le nombre de l'array ou un pointeur vers la capacité requise sitrackableTypeCapacityInputest insuffisant.trackableTypesest un pointeur vers un tableau de XrTrackableTypeANDROID, mais peut êtreNULLsitrackableTypeCapacityInputest0.- Pour obtenir une description détaillée de la récupération de la taille
trackableTypesrequise, consultez la section Paramètres de taille de la mémoire tampon.
L'application peut utiliser xrEnumerateSupportedPersistenceAnchorTypesANDROID pour vérifier la prise en charge de la persistance des ancres sur d'autres éléments de suivi XrTrackableTypeANDROID.
Si un XrTrackableTypeANDROID donné n'est pas renvoyé dans le tableau trackableTypes, XR_ERROR_FEATURE_UNSUPPORTED est renvoyé à partir des fonctions de persistance d'ancrage de l'appareil qui fonctionnent sur un ancrage de ce type.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrEnumerateSupportedPersistenceAnchorTypesANDROID. instancedoit être un identifiant XrInstance valide.trackableTypeCountOutputdoit être un pointeur vers une valeuruint32_t- Si
trackableTypeCapacityInputn'est pas0, trackableTypes, doit être un pointeur vers un tableau de valeurstrackableTypeCapacityInputXrTrackableTypeANDROID
Codes de retour
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
Créer un gestionnaire de persistance d'ancrage d'appareil
Un XrDeviceAnchorPersistenceANDROID est un gestionnaire qui représente les ressources requises pour persister et suivre les ancrages persistants.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
La fonction xrCreateDeviceAnchorPersistenceANDROID est définie comme suit :
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
Descriptions des paramètres
sessionest l'XrSession qui crée l'XrDeviceAnchorPersistenceANDROID.createInfoest le XrDeviceAnchorPersistenceCreateInfoANDROID contenant des paramètres pour XrDeviceAnchorPersistenceANDROID.outHandleest un pointeur vers un handle dans lequel l'XrDeviceAnchorPersistenceANDROID créé est renvoyé.
Une application peut créer un gestionnaire XrDeviceAnchorPersistenceANDROID en appelant xrCreateDeviceAnchorPersistenceANDROID. XrDeviceAnchorPersistenceANDROID peut être utilisé dans les appels d'API ultérieurs pour conserver ou supprimer les ancres. Le doit être libéré à terme à l'aide de la fonction xrDestroyDeviceAnchorPersistenceANDROID.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrCreateDeviceAnchorPersistenceANDROID. sessiondoit être un identifiant XrSession valide.createInfodoit être un pointeur vers une structure XrDeviceAnchorPersistenceCreateInfoANDROID valide.outHandledoit être un pointeur vers un gestionnaire XrDeviceAnchorPersistenceANDROID.
Codes de retour
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 structure XrDeviceAnchorPersistenceCreateInfoANDROID est définie comme suit :
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante d'une chaîne de structures. Aucune de ces structures n'est définie dans OpenXR de base ni dans cette extension.
La structure XrDeviceAnchorPersistenceCreateInfoANDROID fournit des options de création pour XrDeviceAnchorPersistenceANDROID lorsqu'elle est transmise à xrCreateDeviceAnchorPersistenceANDROID.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'utiliser XrDeviceAnchorPersistenceCreateInfoANDROID. typedoit êtreXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID.nextdoit êtreNULLou un pointeur valide vers la structure suivante d'une chaîne de structures.
La fonction xrDestroyDeviceAnchorPersistenceANDROID est définie comme suit :
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Descriptions des paramètres
handleest un gestionnaire XrDeviceAnchorPersistenceANDROID précédemment créé parxrCreateDeviceAnchorPersistenceANDROID.
La fonction xrDestroyDeviceAnchorPersistenceANDROID détruit le gestionnaire de persistance de l'ancrage de l'appareil.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrDestroyDeviceAnchorPersistenceANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID valide
Sécurité des threads
- L'accès à
handleet à tous les gestionnaires enfants doit être synchronisé en externe.
Codes de retour
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Persister une ancre
La fonction xrPersistAnchorANDROID est définie comme suit :
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
Descriptions des paramètres
handlecorrespond à XrDeviceAnchorPersistenceANDROID.persistedInfoest l'XrPersistedAnchorSpaceInfoANDROID contenant les paramètres de persistance des ancres.anchorIdOutputest un pointeur vers un XrUuidEXT dans lequel l'UUID de l'ancre persistante est renvoyé.
L'application peut demander la persistance des ancres en appelant xrPersistAnchorANDROID. L'application ne doit pas supposer qu'une valeur de retour de succès signifie que l'ancre est immédiatement conservée. L'application doit utiliser xrGetAnchorPersistStateANDROID pour vérifier l'état de persistance de l'ancre à l'aide de l'ancre XrUuidEXT renvoyée. L'application peut utiliser xrUnpersistAnchorANDROID pour supprimer la persistance de l'ancre.
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDest renvoyé si l'ancre n'est pas suivie au moment de l'appel.XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDest renvoyé si les données persistantes ne sont pas prêtes.XR_SUCCESSest renvoyé une fois que l'ancre a été mise en file d'attente pour la persistance.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrPersistAnchorANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID validepersistedInfodoit être un pointeur vers une structure XrPersistedAnchorSpaceInfoANDROID valide.anchorIdOutputdoit être un pointeur vers une structure XrUuidEXT.
Codes de retour
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 structure XrPersistedAnchorSpaceInfoANDROID est définie comme suit :
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante d'une chaîne de structures. Aucune de ces structures n'est définie dans OpenXR de base ni dans cette extension.anchorest un XrSpace d'ancrage précédemment créé par xrCreateAnchorSpaceANDROID pour persister.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'utiliser XrPersistedAnchorSpaceInfoANDROID. typedoit êtreXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID.nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.anchordoit être un gestionnaire XrSpace valide.
La fonction xrGetAnchorPersistStateANDROID est définie comme suit :
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
Descriptions des paramètres
handlecorrespond à XrDeviceAnchorPersistenceANDROID.anchorIdcorrespond à l'XrUuidEXT de l'ancre.persistStateest un pointeur vers un XrAnchorPersistStateANDROID dans lequel l'état de l'ancre est renvoyé.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDest renvoyé si l'ancre XrUuidEXT est introuvable.XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDest renvoyé si les données persistantes deanchorIdne sont pas prêtes.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrGetAnchorPersistStateANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID valideanchorIddoit être un pointeur vers une structure XrUuidEXT valide.persistStatedoit être un pointeur vers une valeur XrAnchorPersistStateANDROID.
Codes de retour
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
L'énumération XrAnchorPersistStateANDROID est définie comme suit :
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;
Énumération |
Description |
|
L'application n'a pas demandé à conserver l'ancrage. |
|
L'ancrage a été demandé à être persistant, mais il ne l'est pas encore. |
|
L'ancre a bien été conservée par l'environnement d'exécution. |
Créer une ancre à partir de données persistantes
La fonction xrCreatePersistedAnchorSpaceANDROID est définie comme suit :
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Descriptions des paramètres
handlecorrespond à XrDeviceAnchorPersistenceANDROID.createInfoest l'XrPersistedAnchorSpaceCreateInfoANDROID contenant les paramètres de création de l'ancre.anchorOutputest un pointeur vers un XrSpace dans lequel le nouvel espace d'ancrage est renvoyé.
L'application peut créer un ancrage XrSpace à partir d'un ancrage précédemment persistant en appelant xrCreatePersistedAnchorSpaceANDROID avec le même XrUuidEXT. Il s'agit d'une autre façon de créer des ancres, comme défini dans XR_ANDROID_trackables.
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDest renvoyé si l'ancre XrUuidEXT est introuvable.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrCreatePersistedAnchorSpaceANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID validecreateInfodoit être un pointeur vers une structure XrPersistedAnchorSpaceCreateInfoANDROID valide.anchorOutputdoit être un pointeur vers un handle XrSpace.
Codes de retour
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 structure XrPersistedAnchorSpaceCreateInfoANDROID est définie comme suit :
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante d'une chaîne de structures. Aucune de ces structures n'est définie dans OpenXR de base ni dans cette extension.anchorIdcorrespond à l'XrUuidEXT de l'ancre persistante à partir de laquelle créer un XrSpace.
La structure XrPersistedAnchorSpaceCreateInfoANDROID fournit des options de création pour l'ancrage lorsqu'elle est transmise à xrCreateDeviceAnchorPersistenceANDROID.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'utiliser XrPersistedAnchorSpaceCreateInfoANDROID. typedoit êtreXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID.nextdoit êtreNULLou un pointeur valide vers la structure suivante d'une chaîne de structures.
Énumérer les ancres persistantes
La fonction xrEnumeratePersistedAnchorsANDROID est définie comme suit :
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
Descriptions des paramètres
handlecorrespond à XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInputcorrespond à la capacité du tableauanchorIds, ou à 0 pour indiquer une requête visant à récupérer la capacité requise.anchorIdsCountOutputest un pointeur vers le nombre d'anchorIdsécrites ou un pointeur vers la capacité requise sianchorIdsCapacityInputest insuffisant.anchorIdsest un pointeur vers un tableau de structures XrUuidEXT. Il peut êtreNULLsianchorIdsCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
anchorIdsrequise, consultez la section Paramètres de taille de la mémoire tampon.
L'application peut énumérer tous les ancrages persistants actuels en appelant xrEnumeratePersistedAnchorsANDROID. anchorIds contiendra les UUID des ancrages persistants jusqu'à la capacité du tableau. Si la capacité est insuffisante, les applications n'ont aucune garantie sur les ancrages renvoyés.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrEnumeratePersistedAnchorsANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID valideanchorIdsCountOutputdoit être un pointeur vers une valeuruint32_t- Si
anchorIdsCapacityInputn'est pas0, anchorIds, doit être un pointeur vers un tableau de structuresanchorIdsCapacityInputXrUuidEXT
Codes de retour
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
Désactiver la persistance d'une ancre persistante
La fonction xrUnpersistAnchorANDROID est définie comme suit :
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
Descriptions des paramètres
handlecorrespond à XrDeviceAnchorPersistenceANDROID.anchorIdcorrespond à l'XrUuidEXT de l'ancre à supprimer.
L'application peut supprimer la persistance d'un ancrage persistant en appelant xrUnpersistAnchorANDROID et en transmettant l'ancrage XrUuidEXT de l'ancrage à supprimer.
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDest renvoyé si les données persistantes ne sont pas prêtes.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDest renvoyé si l'ancre XrUuidEXT est introuvable.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_device_anchor_persistencedoit être activée avant d'appeler xrUnpersistAnchorANDROID. handledoit être un gestionnaire XrDeviceAnchorPersistenceANDROID valideanchorIddoit être un pointeur vers une structure XrUuidEXT valide.
Codes de retour
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
Exemple de code pour la persistance des ancres
L'exemple de code suivant montre comment inspecter les fonctionnalités du système, persister, énumérer et supprimer des ancres, ainsi que créer une ancre à partir de l'ancre persistante 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));
Nouveaux types d'objets
Nouvelles constantes d'énumération
L'énumération XrObjectType est étendue avec :
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
L'énumération XrResult est étendue avec :
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
L'énumération XrStructureType est étendue avec :
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
Nouvelles énumérations
Nouvelles structures
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Nouvelles fonctions
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Problèmes
Historique des versions
- Révision 1, 10/10/2024 (Kenny Vercaemer)
- Description initiale de l'extension
OpenXR™ et le logo OpenXR sont des marques appartenant à The Khronos Group Inc. et sont enregistrés en tant que marques en Chine, dans l'Union européenne, au Japon et au Royaume-Uni.