Ciąg znaków nazwy
XR_ANDROID_device_anchor_persistence
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
458
Wersja
1
Zależności rozszerzeń i wersji
XR_EXT_uuid i XR_ANDROID_trackables
Data ostatniej modyfikacji
2024-10-10
Stan adresu IP
Brak znanych roszczeń dotyczących praw autorskich do treści objętych ochroną prawną.
Twórcy
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Omówienie
To rozszerzenie umożliwia aplikacji zapisywanie, pobieranie i usuwanie kotwic na bieżącym urządzeniu dla bieżącego użytkownika w ramach sesji aplikacji i urządzeń.
Sprawdzanie możliwości systemu
Struktura XrSystemDeviceAnchorPersistencePropertiesANDROID jest zdefiniowana jako:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Opisy członków
- typeto XrStructureType tej struktury.
- nextto- NULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.
- supportsAnchorPersistenceto- XrBool32wskazujący, czy bieżący system obsługuje trwałość kotwicy w przypadku kotwic przestrzennych.
Aplikacja może sprawdzić, czy system jest w stanie przechowywać stałe lokalizacje (patrz xrCreateAnchorSpaceANDROID) przez rozszerzenie struktury XrSystemProperties o strukturę XrSystemDeviceAnchorPersistencePropertiesANDROID podczas wywołania xrGetSystemProperties. W przypadku obsługiwanych ścieżek anchor aplikacja może użyć metody xrEnumerateSupportedPersistenceAnchorTypesANDROID, aby zapytać o obsługiwane typy.
Jeśli dla argumentu supportsAnchorPersistence zwracana jest wartość XR_FALSE, funkcje trwałości kotwicy na urządzeniu, które działają na podstawie kotwicy przestrzennej, zwracają wartość XR_ERROR_FEATURE_UNSUPPORTED.
Prawidłowe użycie (domyślne)
- Przed użyciem rozszerzenia XrSystemDeviceAnchorPersistencePropertiesANDROID musisz włączyć rozszerzenie XR_ANDROID_device_anchor_persistence.
- typemusi być- XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID
- nextmusi być- NULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.
Funkcja xrEnumerateSupportedPersistenceAnchorTypesANDROID jest zdefiniowana w ten sposób:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    trackableTypeCapacityInput,
    uint32_t*                                   trackableTypeCountOutput,
    XrTrackableTypeANDROID*                     trackableTypes);
Opisy parametrów
- sessionto XrSession, który tworzy XrDeviceAnchorPersistenceANDROID.
- trackableTypeCapacityInputto pojemność- trackableTypes, a 0 to wymagana pojemność.
- trackableTypeCountOutputto wskaźnik do liczby tablicy lub wskaźnik do wymaganej pojemności w przypadku, gdy- trackableTypeCapacityInputjest niewystarczający.
- trackableTypesto wskaźnik do tablicy XrTrackableTypeANDROID, ale może być- NULL, jeśli- trackableTypeCapacityInputto- 0.
- Szczegółowe informacje o pobieraniu wymaganego rozmiaru trackableTypesznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może użyć funkcji xrEnumerateSupportedPersistenceAnchorTypesANDROID, aby sprawdzić, czy obsługuje trwałość kotwicy w przypadku innych obiektów XrTrackableTypeANDROID.
Jeśli dana wartość XrTrackableTypeANDROID nie zostanie zwrócona w tablicy trackableTypes, funkcje trwałości kotwicy urządzenia XR_ERROR_FEATURE_UNSUPPORTED zwracają wartość XR_ERROR_FEATURE_UNSUPPORTED, które działają na kotwicy tego typu.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrEnumerateSupportedPersistenceAnchorTypesANDROID musisz włączyć rozszerzenie XR_ANDROID_device_anchor_persistence.
- instancemusi być prawidłowym identyfikatorem XrInstance
- trackableTypeCountOutputmusi być wskaźnikiem na wartość- uint32_t
- Jeśli trackableTypeCapacityInputnie jest0, trackableTypes, musi być wskaźnikiem do tablicy wartościtrackableTypeCapacityInputXrTrackableTypeANDROID.
Kody zwrotne
- 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
Tworzenie uchwytu trwałości kotwicy urządzenia
XrDeviceAnchorPersistenceANDROID to uchwyt reprezentujący zasoby wymagane do trwałego przechowywania i śledzenia trwałych kotwic.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
Funkcja xrCreateDeviceAnchorPersistenceANDROID jest zdefiniowana w ten sposób:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
    XrSession                                   session,
    const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
    XrDeviceAnchorPersistenceANDROID*           outHandle);
Opisy parametrów
- sessionto XrSession, który tworzy XrDeviceAnchorPersistenceANDROID.
- createInfoto struktura XrDeviceAnchorPersistenceCreateInfoANDROID zawierająca parametry XrDeviceAnchorPersistenceANDROID.
- outHandleto wskaźnik do uchwytu, w którym zwracana jest utworzona XrDeviceAnchorPersistenceANDROID.
Aplikacja może utworzyć identyfikator XrDeviceAnchorPersistenceANDROID, wywołując funkcję xrCreateDeviceAnchorPersistenceANDROID. W kolejnych wywołaniach interfejsu API można użyć parametru XrDeviceAnchorPersistenceANDROID , aby zachować lub usunąć pozycję kotwicy. XrDeviceAnchorPersistenceANDROID musi zostać ostatecznie zwolniony za pomocą funkcji xrDestroyDeviceAnchorPersistenceANDROID.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrCreateDeviceAnchorPersistenceANDROIDmusisz włączyć rozszerzenie XR_ANDROID_device_anchor_persistence.
- sessionmusi być prawidłowym identyfikatorem XrSession
- createInfomusi być wskaźnikiem do prawidłowej struktury XrDeviceAnchorPersistenceCreateInfoANDROID
- outHandlemusi być wskaźnikiem do uchwytu XrDeviceAnchorPersistenceANDROID.
Kody zwrotne
- 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
Struktura XrDeviceAnchorPersistenceCreateInfoANDROID jest zdefiniowana jako:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Opisy członków
- typeto XrStructureType tej struktury.
- nextto- NULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.
Struktura XrDeviceAnchorPersistenceCreateInfoANDROID udostępnia opcje tworzenia dla typu XrDeviceAnchorPersistenceANDROID, gdy zostanie przekazana do funkcji xrCreateDeviceAnchorPersistenceANDROID.
Prawidłowe użycie (domyślne)
- Zanim użyjesz rozszerzenia XrDeviceAnchorPersistenceCreateInfoANDROID, musisz je włączyć.XR_ANDROID_device_anchor_persistence
- typemusi być- XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
- nextmusi być- NULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.
Funkcja xrDestroyDeviceAnchorPersistenceANDROID jest zdefiniowana jako:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle);
Opisy parametrów
- handleto obiekt XrDeviceAnchorPersistenceANDROID utworzony wcześniej przez- xrCreateDeviceAnchorPersistenceANDROID.
Funkcja xrDestroyDeviceAnchorPersistenceANDROID niszczy uchwyt trwałego odnośnika urządzenia.
Prawidłowe użycie (domyślne)
- Rozszerzenie XR_ANDROID_device_anchor_persistencemusi być włączone przed wywołaniem funkcji xrDestroyDeviceAnchorPersistenceANDROID.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
Bezpieczeństwo wątków
- Dostęp do handlei wszystkich jego obiektów potomnych musi być zsynchronizowany zewnętrznie.
Kody zwrotne
- XR_SUCCESS
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_HANDLE_INVALID
Zachowywanie kotwicy
Funkcja xrPersistAnchorANDROID jest zdefiniowana w ten sposób:
XrResult xrPersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceInfoANDROID*    persistedInfo,
    XrUuidEXT*                                  anchorIdOutput);
Opisy parametrów
- handleto XrDeviceAnchorPersistenceANDROID.
- persistedInfoto XrPersistedAnchorSpaceInfoANDROID zawierający parametry trwałości kotwicy.
- anchorIdOutputto wskaźnik do atrybutu XrUuidEXT, w którym zwracany jest identyfikator UUID trwałej kotwicy.
Aplikacja może poprosić o zapisanie kotwicy, wywołując funkcję xrPersistAnchorANDROID. Aplikacja nie może zakładać, że wartość zwracana przez metodę success oznacza, że kotwica została natychmiast zapisana. Aplikacja powinna używać funkcji xrGetAnchorPersistStateANDROID, aby sprawdzić stan trwałości za pomocą zwróconego parametru XrUuidEXT. Aplikacja może użyć funkcji xrUnpersistAnchorANDROID, aby usunąć trwałość kotwicy.
- XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDzostanie zwrócona, jeśli w momencie wywołania nie jest śledzona żadna belka.
- Jeśli zapisane dane nie są gotowe, zwrócony zostanie parametr XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID.
- XR_SUCCESSzostanie zwrócony, gdy kotwnik zostanie umieszczony w kolejce w celu zachowania.
Prawidłowe użycie (domyślne)
- Rozszerzenie XR_ANDROID_device_anchor_persistencemusi być włączone przed wywołaniem metody xrPersistAnchorANDROID.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
- persistedInfomusi być wskaźnikiem do prawidłowej struktury XrPersistedAnchorSpaceInfoANDROID.
- anchorIdOutputmusi wskazywać strukturę XrUuidEXT.
Kody zwrotne
- 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
Struktura XrPersistedAnchorSpaceInfoANDROID jest zdefiniowana w ten sposób:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrSpace            anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Opisy członków
- typeto XrStructureType tej struktury.
- nextto- NULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.
- anchorto kotwica XrSpace utworzona wcześniej przez funkcję xrCreateAnchorSpaceANDROID w celu zachowania.
Prawidłowe użycie (domyślne)
- Przed użyciem rozszerzenia XrPersistedAnchorSpaceInfoANDROID musi być włączone rozszerzenie XR_ANDROID_device_anchor_persistence.
- typemusi być- XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID
- nextmusi być- NULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.
- anchormusi być prawidłowym identyfikatorem XrSpace
Funkcja xrGetAnchorPersistStateANDROID jest zdefiniowana w ten sposób:
XrResult xrGetAnchorPersistStateANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId,
    XrAnchorPersistStateANDROID*                persistState);
Opisy parametrów
- handleto XrDeviceAnchorPersistenceANDROID.
- anchorIdto XrUuidEXT kotwicy.
- persistStateto wskaźnik do XrAnchorPersistStateANDROID, w którym zwracany jest stan kotwicy.
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDzostanie zwrócona, jeśli nie uda się znaleźć elementu zakotwiczenia XrUuidEXT.
- Jeśli zapisane dane anchorIdnie są gotowe, zwrócona zostanie wartośćXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrGetAnchorPersistStateANDROID musi być włączone rozszerzenie XR_ANDROID_device_anchor_persistence.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
- anchorIdmusi wskazywać prawidłową strukturę XrUuidEXT
- persistStatemusi być wskaźnikiem do wartości XrAnchorPersistStateANDROID.
Kody zwrotne
- 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
Wyliczenie XrAnchorPersistStateANDROID jest zdefiniowane w ten sposób:
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;
| Wyliczenie | Opis | 
| 
 | Aplikacja nie poprosiła o zapisanie kotwicy. | 
| 
 | Ank został zapisany, ale nie został jeszcze zapisany. | 
| 
 | Punkt kotwiczenia został zapisany przez środowisko uruchomieniowe. | 
Tworzenie kotwicy na podstawie utrwalonych danych
Funkcja xrCreatePersistedAnchorSpaceANDROID jest zdefiniowana w ten sposób:
XrResult xrCreatePersistedAnchorSpaceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace*                                    anchorOutput);
Opisy parametrów
- handleto XrDeviceAnchorPersistenceANDROID.
- createInfoto XrPersistedAnchorSpaceCreateInfoANDROID zawierający parametry do tworzenia kotwicy.
- anchorOutputto wskaźnik do XrSpace, w którym zwracana jest nowa przestrzeń kotwicy.
Aplikacja może utworzyć kotwicę XrSpace na podstawie wcześniej zapisanej kotwicy, wywołując funkcję xrCreatePersistedAnchorSpaceANDROID z tym samym parametrem XrUuidEXT. Jest to inny sposób tworzenia kotwic zgodnie z definicją w XR_ANDROID_trackables.
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDzostanie zwrócona, jeśli nie uda się znaleźć elementu zakotwiczenia XrUuidEXT.
Prawidłowe użycie (domyślne)
- Rozszerzenie XR_ANDROID_device_anchor_persistencemusi być włączone przed wywołaniem funkcji xrCreatePersistedAnchorSpaceANDROID.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
- createInfomusi być wskaźnikiem do prawidłowej struktury XrPersistedAnchorSpaceCreateInfoANDROID.
- anchorOutputmusi być wskaźnikiem do XrSpace
Kody zwrotne
- 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
Struktura XrPersistedAnchorSpaceCreateInfoANDROID jest zdefiniowana jako:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrUuidEXT          anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Opisy członków
- typeto XrStructureType tej struktury.
- nextto- NULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.
- anchorIdto XrUuidEXT zapisanej kotwicy, na podstawie której można utworzyć kotwicę XrSpace.
Struktura XrPersistedAnchorSpaceCreateInfoANDROID zawiera opcje tworzenia kotwicy, gdy jest ona przekazywana do funkcji xrCreateDeviceAnchorPersistenceANDROID.
Prawidłowe użycie (domyślne)
- Przed użyciem funkcji XrPersistedAnchorSpaceCreateInfoANDROID należy włączyć rozszerzenie XR_ANDROID_device_anchor_persistence.
- typemusi być- XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID
- nextmusi być- NULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.
Wyliczanie trwałych kotwic
Funkcja xrEnumeratePersistedAnchorsANDROID jest zdefiniowana w ten sposób:
XrResult xrEnumeratePersistedAnchorsANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    uint32_t                                    anchorIdsCapacityInput,
    uint32_t*                                   anchorIdsCountOutput,
    XrUuidEXT*                                  anchorIds);
Opisy parametrów
- handleto XrDeviceAnchorPersistenceANDROID.
- anchorIdsCapacityInputto pojemność tablicy- anchorIds, a 0 oznacza prośbę o pobranie wymaganej przepustowości.
- anchorIdsCountOutputto wskaźnik liczby zapisanych elementów- anchorIdslub wskaźnik wymaganej pojemności w przypadku, gdy- anchorIdsCapacityInputjest niewystarczająca.
- anchorIdsto wskaźnik do tablicy struktur XrUuidEXT. Może ona wynosić- NULL, jeśli- anchorIdsCapacityInput= 0.
- Szczegółowe informacje o pobieraniu wymaganego rozmiaru anchorIdsznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może wyliczyć wszystkie bieżące trwałe odnośniki, wywołując funkcję xrEnumeratePersistedAnchorsANDROID. anchorIds będzie przechowywać identyfikatory UUID zapisanych kotwic do pojemności tablicy. Jeśli pojemność jest niewystarczająca, aplikacje nie mają gwarancji, które kotwy zostaną zwrócone.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrEnumeratePersistedAnchorsANDROID musisz włączyć rozszerzenie XR_ANDROID_device_anchor_persistence.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
- anchorIdsCountOutputmusi być wskaźnikiem na wartość- uint32_t
- Jeśli anchorIdsCapacityInputnie jest0, anchorIds, musi być wskaźnikiem do tablicyanchorIdsCapacityInputstruktur XrUuidEXT.
Kody zwrotne
- 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
Odzyskiwanie trwałego zakotwiczenia
Funkcja xrUnpersistAnchorANDROID jest zdefiniowana w ten sposób:
XrResult xrUnpersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId);
Opisy parametrów
- handleto XrDeviceAnchorPersistenceANDROID.
- anchorIdto XrUuidEXT kotwicy, której nie chcesz zachować.
Aplikacja może usunąć trwałą kotwicę, wywołując metodę xrUnpersistAnchorANDROID i przekazując XrUuidEXT kotwicy, którą ma usunąć.
- Jeśli zapisane dane nie są gotowe, zwracana jest wartość XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID.
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDzostanie zwrócona, jeśli nie uda się znaleźć elementu zakotwiczenia XrUuidEXT.
Prawidłowe użycie (domyślne)
- Rozszerzenie XR_ANDROID_device_anchor_persistencemusi być włączone przed wywołaniem funkcji xrUnpersistAnchorANDROID.
- handlemusi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
- anchorIdmusi wskazywać prawidłową strukturę XrUuidEXT
Kody zwrotne
- 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
Przykładowy kod zapewniający trwałość kotwicy
Poniższy przykładowy kod pokazuje, jak sprawdzić możliwości systemu, zapisać, wyliczyć i usunąć z pamięci zapisane kotwy oraz utworzyć kotwę z zapisanej kotwy 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));
Nowe typy obiektów
Nowe stałe typu wyliczeniowego
Wyliczenie XrObjectType zostało rozszerzone o:
- XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
Wyliczenie XrResult zostało rozszerzone o:
- 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
Wyliczenie XrStructureType zostało rozszerzone o:
- 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
Nowe wartości w polu enum
Nowe struktury
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Nowe funkcje
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Problemy
Historia wersji
- Wersja 1, 2024-10-10 (Kenny Vercaemer)
- Początkowy opis rozszerzenia
 
OpenXR™ i logo OpenXR są znakami towarowymi należącymi do The Khronos Group Inc. i zarejestrowanymi jako znak towarowy w Chinach, Unii Europejskiej, Japonii i Wielkiej Brytanii.
