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.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.supportsAnchorPersistencetoXrBool32wskazują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_ANDROIDnextmusi 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, gdytrackableTypeCapacityInputjest niewystarczający.trackableTypesto wskaźnik do tablicy XrTrackableTypeANDROID, ale może byćNULL, jeślitrackableTypeCapacityInputto0.- 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 XrInstancetrackableTypeCountOutputmusi 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_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_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 XrSessioncreateInfomusi być wskaźnikiem do prawidłowej struktury XrDeviceAnchorPersistenceCreateInfoANDROIDoutHandlemusi być wskaźnikiem do uchwytu XrDeviceAnchorPersistenceANDROID.
Kody zwrotne
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
Struktura XrDeviceAnchorPersistenceCreateInfoANDROID jest zdefiniowana jako:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub 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_ANDROIDnextmusi 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 przezxrCreateDeviceAnchorPersistenceANDROID.
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_UNSUPPORTEDXR_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_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
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.nexttoNULLlub 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_ANDROIDnextmusi 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ę XrUuidEXTpersistStatemusi być wskaźnikiem do wartości XrAnchorPersistStateANDROID.
Kody zwrotne
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
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_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
Struktura XrPersistedAnchorSpaceCreateInfoANDROID jest zdefiniowana jako:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub 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_ANDROIDnextmusi 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ść tablicyanchorIds, a 0 oznacza prośbę o pobranie wymaganej przepustowości.anchorIdsCountOutputto wskaźnik liczby zapisanych elementówanchorIdslub wskaźnik wymaganej pojemności w przypadku, gdyanchorIdsCapacityInputjest niewystarczająca.anchorIdsto wskaźnik do tablicy struktur XrUuidEXT. Może ona wynosićNULL, jeślianchorIdsCapacityInput= 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_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
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_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
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_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
Wyliczenie XrStructureType zostało rozszerzone o:
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
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.