Ciąg znaków nazwy
XR_ANDROID_device_anchor_persistence
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
458
Weryfikacja
1
Zależności rozszerzenia i wersji
XR_EXT_uuid
i XR_ANDROID_trackables
Data ostatniej modyfikacji
2024-10-10
Stan adresu IP
Brak znanych roszczeń dotyczących adresu IP.
Twórcy
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Omówienie
To rozszerzenie umożliwia aplikacji przechowywanie, pobieranie i usuwanie kotwic na bieżącym urządzeniu dla bieżącego użytkownika w ramach sesji aplikacji i urządzenia.
Sprawdzanie możliwości systemu
Struktura XrSystemDeviceAnchorPersistencePropertiesANDROID jest zdefiniowana jako:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Opisy członków
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.supportsAnchorPersistence
toXrBool32
wskazują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 XrSystemProperties o strukturę XrSystemDeviceAnchorPersistencePropertiesANDROID podczas wywołania xrGetSystemProperties. W przypadku obsługiwanych elementów śledzenia aplikacja może użyć metody xrEnumerateSupportedPersistenceAnchorTypesANDROID, aby zapytać o obsługiwane typy.
Jeśli dla supportsAnchorPersistence
zwracana jest wartość XR_FALSE
, funkcje trwałości kotwicy na urządzeniu zwracają wartość XR_ERROR_FEATURE_UNSUPPORTED
, które działają na podstawie kotwicy przestrzennej.
Prawidłowe użycie (domyślne)
- Przed użyciem rozszerzenia XrSystemDeviceAnchorPersistencePropertiesANDROID musisz włączyć rozszerzenie
XR_ANDROID_device_anchor_persistence
. type
musi byćXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID
next
musi byćNULL
lub 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
session
to XrSession, który tworzy XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInput
to pojemnośćtrackableTypes
, a 0 to wymagana pojemność.trackableTypeCountOutput
to wskaźnik do liczby tablicy lub wskaźnik do wymaganej pojemności w przypadku, gdytrackableTypeCapacityInput
jest niewystarczająca.trackableTypes
to wskaźnik do tablicy XrTrackableTypeANDROID, ale może byćNULL
, jeślitrackableTypeCapacityInput
to0
.- Szczegółowe informacje o pobieraniu wymaganego rozmiaru
trackableTypes
znajdziesz 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
. instance
musi być prawidłowym identyfikatorem XrInstancetrackableTypeCountOutput
musi być wskaźnikiem na wartośćuint32_t
- Jeśli
trackableTypeCapacityInput
nie jest0, trackableTypes
, musi być wskaźnikiem do tablicy wartościtrackableTypeCapacityInput
XrTrackableTypeANDROID.
Kody zwrotu
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, który reprezentuje 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
session
to XrSession, który tworzy XrDeviceAnchorPersistenceANDROID.createInfo
to XrDeviceAnchorPersistenceCreateInfoANDROID zawierający parametry XrDeviceAnchorPersistenceANDROID.outHandle
to 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ąć znaczniki. Musisz ostatecznie uwolnić uchwyt XrDeviceAnchorPersistenceANDROID za pomocą funkcji xrDestroyDeviceAnchorPersistenceANDROID.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrCreateDeviceAnchorPersistenceANDROIDmusisz włączyć rozszerzenie
XR_ANDROID_device_anchor_persistence
. session
musi być prawidłowym identyfikatorem XrSessioncreateInfo
musi być wskaźnikiem do prawidłowej struktury XrDeviceAnchorPersistenceCreateInfoANDROIDoutHandle
musi być wskaźnikiem do uchwytu XrDeviceAnchorPersistenceANDROID.
Kody zwrotu
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
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym 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)
- Przed użyciem rozszerzenia XrDeviceAnchorPersistenceCreateInfoANDROIDnależy go włączyć.
XR_ANDROID_device_anchor_persistence
type
musi byćXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
next
musi byćNULL
lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.
Funkcja xrDestroyDeviceAnchorPersistenceANDROID jest zdefiniowana jako:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Opisy parametrów
handle
to 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_persistence
musi być włączone przed wywołaniem funkcji xrDestroyDeviceAnchorPersistenceANDROID. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.
Bezpieczeństwo wątków
- Dostęp do
handle
i wszystkich jego obiektów potomnych musi być zsynchronizowany zewnętrznie.
Kody zwrotu
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
handle
to XrDeviceAnchorPersistenceANDROID.persistedInfo
to XrPersistedAnchorSpaceInfoANDROID zawierający parametry trwałości kotwicy.anchorIdOutput
to wskaźnik do XrUuidEXT, w którym zwracany jest UUID zapisanej 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żyć funkcji xrGetAnchorPersistStateANDROID, aby sprawdzić stan trwałości za pomocą zwróconego parametru XrUuidEXT. Aplikacja może użyć metody xrUnpersistAnchorANDROID, aby usunąć trwałość zakotwiczenia.
- Jeśli w momencie wywołania nie jest śledzona żadna pozycja, zwracana jest wartość
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID
. XR_SUCCESS
zostanie zwrócony, gdy kotwnik zostanie umieszczony w kolejce w celu zachowania.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_device_anchor_persistence
musi być włączone przed wywołaniem metody xrPersistAnchorANDROID. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.persistedInfo
musi być wskaźnikiem do prawidłowej struktury XrPersistedAnchorSpaceInfoANDROIDanchorIdOutput
musi wskazywać strukturę XrUuidEXT.
Kody zwrotu
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
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.anchor
to zakotwiczony XrSpace utworzony 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
. type
musi byćXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID
next
musi byćNULL
lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktury.anchor
musi 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
handle
to XrDeviceAnchorPersistenceANDROID.anchorId
to XrUuidEXT kotwicy.persistState
to wskaźnik do XrAnchorPersistStateANDROID, w którym zwracany jest stan kotwicy.- Jeśli nie uda się znaleźć elementu zaczepu XrUuidEXT, zwrócona zostanie wartość
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
. - Jeśli zapisane dane
anchorId
nie 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
. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.anchorId
musi wskazywać prawidłową strukturę XrUuidEXTpersistState
musi być wskaźnikiem do wartości XrAnchorPersistStateANDROID.
Kody zwrotu
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. |
|
Ankierze została wysłana prośba o zapisanie, ale nie została jeszcze zapisana. |
|
Ankier 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
handle
to XrDeviceAnchorPersistenceANDROID.createInfo
to XrPersistedAnchorSpaceCreateInfoANDROID zawierający parametry do tworzenia kotwicy.anchorOutput
to 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
.
- Jeśli nie uda się znaleźć elementu zaczepu XrUuidEXT, zwrócona zostanie wartość
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrCreatePersistedAnchorSpaceANDROID musi być włączone rozszerzenie
XR_ANDROID_device_anchor_persistence
. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.createInfo
musi być wskaźnikiem do prawidłowej struktury XrPersistedAnchorSpaceCreateInfoANDROIDanchorOutput
musi wskazywać na nick w XrSpace.
Kody zwrotu
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
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.anchorId
to 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
. type
musi byćXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID
next
musi byćNULL
lub 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
handle
to XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInput
to pojemność tablicyanchorIds
, a 0 oznacza prośbę o pobranie wymaganej pojemności.anchorIdsCountOutput
to wskaźnik liczby zapisanych elementówanchorIds
lub wskaźnik wymaganej pojemności w przypadku, gdyanchorIdsCapacityInput
jest niewystarczająca.anchorIds
to wskaźnik do tablicy struktur XrUuidEXT. Może ona wynosićNULL
, jeślianchorIdsCapacityInput
= 0.- Szczegółowe informacje o pobieraniu wymaganego rozmiaru
anchorIds
znajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może wyliczyć wszystkie bieżące trwałe odnośniki, wywołując funkcję xrEnumeratePersistedAnchorsANDROID. Tablica anchorIds
będzie przechowywać identyfikatory UUID zapisane w pliku w ramach dostępnej 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)
- Rozszerzenie
XR_ANDROID_device_anchor_persistence
musi być włączone przed wywołaniem funkcji xrEnumeratePersistedAnchorsANDROID. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.anchorIdsCountOutput
musi być wskaźnikiem na wartośćuint32_t
- Jeśli
anchorIdsCapacityInput
nie jest0, anchorIds
, musi być wskaźnikiem do tablicyanchorIdsCapacityInput
struktur XrUuidEXT.
Kody zwrotu
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
handle
to XrDeviceAnchorPersistenceANDROID.anchorId
to 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
. - Jeśli nie uda się znaleźć elementu zaczepu XrUuidEXT, zwrócona zostanie wartość
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_device_anchor_persistence
musi być włączone przed wywołaniem funkcji xrUnpersistAnchorANDROID. handle
musi być prawidłowym uchwytem XrDeviceAnchorPersistenceANDROID.anchorId
musi wskazywać prawidłową strukturę XrUuidEXT
Kody zwrotu
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;
CHK_XR(xrPersistAnchorANDROID(persistenceHandle, &anchorSpaceInfo, &anchorId));
// ... Update loop ...
// Poll for anchor persist state to confirm if it was successfully persisted
XrAnchorPersistStateANDROID persistState;
CHK_XR(xrGetAnchorPersistStateANDROID(persistenceHandle, &anchorId, &persistState));
if (persistState == XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID) {
// The anchor was persisted successfully
}
// Enumerate all persisted anchors
uint32_t anchorCountOutput = 0;
std::vector<XrUuidEXT> allAnchors;
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
persistenceHandle,
anchorCountOutput,
&anchorCountOutput,
nullptr
));
allAnchors.resize(anchorCountOutput, XR_NULL_HANDLE);
// Fetch the actual anchors in an appropriately resized array.
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
persistenceHandle,
anchorCountOutput,
&anchorCountOutput,
allAnchors.data()
));
// Creating an anchor from a previously persisted anchor using its UUID
XrTime updateTime; // Time used for the current frame's simulation update.
XrUuidEXT anchorId = allAnchors[0];
XrPersistedAnchorSpaceCreateInfo createInfo;
createInfo.type = XR_TYPE_PERSISTED_ANCHOR_CREATE_INFO_ANDROID;
createInfo.next = nullptr;
createInfo.anchorId = anchorId;
XrSpace anchorSpace = XR_NULL_HANDLE;
CHK_XR(xrCreatePersistedAnchorSpaceANDROID(
persistenceHandle,
&createInfo,
&anchorSpace
));
// The anchor was found and retrieved from the local device successfully.
XrSpaceLocation anchorLocation = { XR_TYPE_SPACE_LOCATION };
CHK_XR(xrLocateSpace(anchorSpace, appSpace, updateTime, &anchorLocation));
XrPosef pose = anchorLocation.pose;
// Once app is done with all persistence related tasks
CHK_XR(xrDestroySpace(anchorSpace));
CHK_XR(xrDestroyDeviceAnchorPersistenceANDROID(persistenceHandle));
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)
- Wstępny opis rozszerzenia