Ad dizesi
XR_ANDROID_device_anchor_persistence
Uzantı Türü
Örnek uzatma
Kayıtlı Uzatma Numarası
458
Düzeltme
1
Uzantı ve Sürüm Bağımlılıkları
XR_EXT_uuid ve XR_ANDROID_trackables
Son Değiştirilme Tarihi
2024-10-10
IP Durumu
Bilinen IP hak talepleri yok.
Katkıda bulunanlar
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Genel Bakış
Bu uzantı, uygulamanın uygulamalar ve cihaz oturumları arasında mevcut kullanıcı için geçerli cihazdaki sabitlemeleri sürdürmesine, almasına ve sürdürmemesini sağlamasına olanak tanır.
Sistem kapasitesini inceleme
XrSystemDeviceAnchorPersistencePropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.supportsAnchorPersistence, mevcut sistemin uzamsal sabitleyiciler için sabitleyici kalıcılığı destekleyip desteklemediğini belirten birXrBool32bağımsız değişkenidir.
Bir uygulama, xrGetSystemProperties çağrısı sırasında XrSystemProperties öğesini XrSystemDeviceAnchorPersistencePropertiesANDROID yapısıyla genişleterek sistemin uzamsal ankrajları (xrCreateAnchorSpaceANDROID bölümüne bakın) devam ettirip ettirmediğini kontrol edebilir. Uygulamalar, desteklenen izlenebilir ankrajlar için desteklenen türleri sorgulamak üzere xrEnumerateSupportedPersistenceAnchorTypesANDROID işlevini kullanabilir.
supportsAnchorPersistence için XR_FALSE döndürülürse XR_ERROR_FEATURE_UNSUPPORTED, bir mekansal ankraj üzerinde çalışan cihaz ankrajı kalıcılık işlevlerinden döndürülür.
Geçerli Kullanım (Dolayı)
- XrSystemDeviceAnchorPersistencePropertiesANDROID kullanılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. typeolmalıdırXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROIDnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
xrEnumerateSupportedPersistenceAnchorTypesANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Parametre Açıklamaları
session, XrDeviceAnchorPersistenceANDROID öğesini oluşturan XrSession'dir.trackableTypeCapacityInput,trackableTypesöğesinin kapasitesidir veya gerekli kapasiteyi almak için 0 değerini alır.trackableTypeCountOutput, dizinin sayısının işaretçisidir veyatrackableTypeCapacityInputyetersiz olduğunda gerekli kapasitenin işaretçisidir.trackableTypes, XrTrackableTypeANDROID dizisinin işaretçisidir ancaktrackableTypeCapacityInput0iseNULLolabilir.- Gerekli
trackableTypesboyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Uygulama, diğer XrTrackableTypeANDROID izlenebilen öğelerde ankraj kalıcılığı desteği olup olmadığını kontrol etmek için xrEnumerateSupportedPersistenceAnchorTypesANDROID işlevini kullanabilir.
Belirli bir XrTrackableTypeANDROID, trackableTypes dizisinde döndürülmezse bu tür bir ankraj üzerinde çalışan cihaz ankrajı kalıcılık işlevlerinden XR_ERROR_FEATURE_UNSUPPORTED döndürülür.
Geçerli Kullanım (Dolayı)
- xrEnumerateSupportedPersistenceAnchorTypesANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. instancegeçerli bir XrInstance herkese açık kullanıcı adı olmalıdır.trackableTypeCountOutput,uint32_tdeğerine işaret eden bir işaretçi olmalıdır.trackableTypeCapacityInput,0, trackableTypesdeğilsetrackableTypeCapacityInputXrTrackableTypeANDROID değerleri dizisinin işaretçisi olmalıdır.
İade Kodları
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
Cihaz ankrajı kalıcılık işleyicisi oluşturma
XrDeviceAnchorPersistenceANDROID, kalıcı ankrajları sürdürmek ve takip etmek için gereken kaynakları temsil eden bir herkese açık kullanıcı adıdır.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
xrCreateDeviceAnchorPersistenceANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
Parametre Açıklamaları
session, XrDeviceAnchorPersistenceANDROID öğesini oluşturan XrSession öğesidir.createInfo, XrDeviceAnchorPersistenceANDROID parametrelerini içeren XrDeviceAnchorPersistenceCreateInfoANDROID bağımsız değişkenidir.outHandle, oluşturulan XrDeviceAnchorPersistenceANDROID öğesinin döndürüldüğü bir tutamacın işaretçisidir.
Uygulamalar, xrCreateDeviceAnchorPersistenceANDROID işlevini çağırarak XrDeviceAnchorPersistenceANDROID işleyicisi oluşturabilir. XrDeviceAnchorPersistenceANDROID, sonraki API çağrılarında sabitlemeleri devam ettirmek veya kaldırmak için kullanıla bilir. XrDeviceAnchorPersistenceANDROID mülkünün xrDestroyDeviceAnchorPersistenceANDROID işlevi kullanılarak serbest bırakılması gerekir.
Geçerli Kullanım (Dolayı)
- xrCreateDeviceAnchorPersistenceANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. sessiongeçerli bir XrSession herkese açık kullanıcı adı olmalıdır.createInfo, geçerli bir XrDeviceAnchorPersistenceCreateInfoANDROID yapısının işaretçisi olmalıdır.outHandle, XrDeviceAnchorPersistenceANDROID sapları için bir işaretçi olmalıdır.
İade Kodları
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
XrDeviceAnchorPersistenceCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.
XrDeviceAnchorPersistenceCreateInfoANDROID yapısı, xrCreateDeviceAnchorPersistenceANDROID işlevine aktarıldığında XrDeviceAnchorPersistenceANDROID için oluşturma seçenekleri sağlar.
Geçerli Kullanım (Dolayı)
- XrDeviceAnchorPersistenceCreateInfoANDROID kullanılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. typeXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROIDolmalıdırnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
xrDestroyDeviceAnchorPersistenceANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Parametre Açıklamaları
handle, daha öncexrCreateDeviceAnchorPersistenceANDROIDtarafından oluşturulmuş bir XrDeviceAnchorPersistenceANDROID işleyicisidir.
xrDestroyDeviceAnchorPersistenceANDROID işlevi, cihaz ankrajı kalıcı işleyicisini yok eder.
Geçerli Kullanım (Dolayı)
- xrDestroyDeviceAnchorPersistenceANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.
Thread Güvenliği
handleve alt kimliklerine erişim, harici olarak senkronize edilmelidir.
İade Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Sabitleme
xrPersistAnchorANDROID işlevi şu şekilde tanımlanır:
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
Parametre Açıklamaları
handle, XrDeviceAnchorPersistenceANDROID bağımsız değişkenidir.persistedInfo, ankrajın kalıcılığını belirten parametreleri içeren XrPersistedAnchorSpaceInfoANDROID nesnesidir.anchorIdOutput, kalıcı ankrajın UUID'sinin döndürüldüğü bir XrUuidEXT işaretçisidir.
Uygulama, xrPersistAnchorANDROID çağrısını yaparak ankrajların kalıcı olmasını isteyebilir. Uygulama, başarılı bir döndürülen değerin ankrajın hemen kalıcı olduğu anlamına geldiğini varsaymamalıdır. Uygulama, döndürülen XrUuidEXT ankrajını kullanarak ankrajın kalıcı durumunu kontrol etmek için xrGetAnchorPersistStateANDROID işlevini kullanmalıdır. Uygulama, ankrajın kalıcılığını kaldırmak için xrUnpersistAnchorANDROID'ı kullanabilir.
- Arama sırasında ankraj izlenmiyorsa
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDdöndürülür. - Kayıtlı veriler hazır değilse
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDdöndürülür. - Sabitleme için sıraya eklenen ankraj
XR_SUCCESSdöndürülür.
Geçerli Kullanım (Dolayı)
- xrPersistAnchorANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.persistedInfo, geçerli bir XrPersistedAnchorSpaceInfoANDROID yapısına işaretçi olmalıdır.anchorIdOutput, XrUuidEXT yapısına işaretçi olmalıdır
İade Kodları
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
XrPersistedAnchorSpaceInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.anchor, xrCreateAnchorSpaceANDROID tarafından daha önce oluşturulmuş ve kalıcı olan bir ankraj XrSpace'tir.
Geçerli Kullanım (Dolayı)
- XrPersistedAnchorSpaceInfoANDROID kullanılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. typeXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROIDolmalıdırnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.anchorgeçerli bir XrSpace herkese açık kullanıcı adı olmalıdır.
xrGetAnchorPersistStateANDROID işlevi şu şekilde tanımlanır:
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
Parametre Açıklamaları
handle, XrDeviceAnchorPersistenceANDROID bağımsız değişkenidir.anchorId, ankrajın XrUuidEXT değeridir.persistState, ankrajın durumunun döndürüldüğü bir XrAnchorPersistStateANDROID işaretçisidir.- XrUuidEXT ankrajı bulunamazsa
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDdöndürülür. anchorIdiçin kalıcı veriler hazır değilseXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDdöndürülür.
Geçerli Kullanım (Dolayı)
- xrGetAnchorPersistStateANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.anchorId, geçerli bir XrUuidEXT yapısına işaretçi olmalıdırpersistState, XrAnchorPersistStateANDROID değerine işaret eden bir işaretçi olmalıdır.
İade Kodları
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
XrAnchorPersistStateANDROID enum şu şekilde tanımlanır:
typedef enum XrAnchorPersistStateANDROID {
XR_ANCHOR_PERSIST_STATE_PERSIST_NOT_REQUESTED_ANDROID = 0,
XR_ANCHOR_PERSIST_STATE_PERSIST_PENDING_ANDROID = 1,
XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID = 2
} XrAnchorPersistStateANDROID;
Enum |
Açıklama |
|
Sabitleme öğesinin uygulama tarafından kalıcı olarak saklanması istenmemiştir. |
|
Sabitlenmek istenen ankraj henüz sabitlenmemiştir. |
|
Sabitleme, çalışma zamanında başarıyla devam ettirilmiştir. |
Kayıtlı verilerden ana hat oluşturma
xrCreatePersistedAnchorSpaceANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Parametre Açıklamaları
handle, XrDeviceAnchorPersistenceANDROID bağımsız değişkenidir.createInfo, ankraj oluşturma parametrelerini içeren XrPersistedAnchorSpaceCreateInfoANDROID bağımsız değişkenidir.anchorOutput, yeni ana alan adının döndürüldüğü bir XrSpace işaretçisidir.
Uygulama, aynı XrUuidEXT ile xrCreatePersistedAnchorSpaceANDROID çağrısını yaparak daha önce kalıcılaştırılmış bir ankrajdan XrSpace ankrajı oluşturabilir. Bu, XR_ANDROID_trackables bölümünde tanımlandığı şekilde ankraj oluşturmanın başka bir yoludur.
- XrUuidEXT ankrajı bulunamazsa
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDdöndürülür.
Geçerli Kullanım (Dolayı)
- xrCreatePersistedAnchorSpaceANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.createInfo, geçerli bir XrPersistedAnchorSpaceCreateInfoANDROID yapısının işaretçisi olmalıdır.anchorOutput, XrSpace herkese açık kullanıcı adına işaret eden bir işaretçi olmalıdır.
İade Kodları
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
XrPersistedAnchorSpaceCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.anchorId, XrSpace ankrajı oluşturmak için kalıcı ankrajın XrUuidEXT değeridir.
XrPersistedAnchorSpaceCreateInfoANDROID yapısı, xrCreateDeviceAnchorPersistenceANDROID işlevine aktarıldığında ankraj için oluşturma seçenekleri sağlar.
Geçerli Kullanım (Dolayı)
- XrPersistedAnchorSpaceCreateInfoANDROID kullanılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. typeXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROIDolmalıdırnextNULLveya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
Kalıcı sabitleri numaralandırma
xrEnumeratePersistedAnchorsANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
Parametre Açıklamaları
handle, XrDeviceAnchorPersistenceANDROID bağımsız değişkenidir.anchorIdsCapacityInput,anchorIdsdizisinin kapasitesidir veya gerekli kapasiteyi alma isteğini belirtmek için 0 değerini alır.anchorIdsCountOutput, yazılananchorIdssayısının işaretçisidir veyaanchorIdsCapacityInputyetersiz olduğunda gereken kapasitenin işaretçisidir.anchorIds, XrUuidEXT yapılarının dizisine işaret eden bir işaretçidir.anchorIdsCapacityInput0 iseNULLolabilir.- Gerekli
anchorIdsboyutunu almayla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Uygulama, xrEnumeratePersistedAnchorsANDROID işlevini çağırarak mevcut tüm kalıcı ankrajları listeleyebilir. anchorIds, dizi kapasitesine kadar kalıcı ankrajların UUID'lerini tutar. Kapasite yetersizse uygulamalarda hangi ankrajların döndürüleceği garanti edilmez.
Geçerli Kullanım (Dolayı)
- xrEnumeratePersistedAnchorsANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.anchorIdsCountOutput,uint32_tdeğerine işaret eden bir işaretçi olmalıdır.anchorIdsCapacityInput0, anchorIdsdeğilseanchorIdsCapacityInputXrUuidEXT yapılarının bir dizisine işaretçi olmalıdır.
İade Kodları
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
Kalıcı bir ankrajın kalıcılığını kaldırma
xrUnpersistAnchorANDROID işlevi şu şekilde tanımlanır:
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
Parametre Açıklamaları
handle, XrDeviceAnchorPersistenceANDROID bağımsız değişkenidir.anchorId, kalıcılığını iptal edilecek ankrajın XrUuidEXT değeridir.
Uygulama, xrUnpersistAnchorANDROID çağrısını yaparak ve kalıcılığını kaldırmak istediği ankrajın XrUuidEXT değerini ileterek kalıcı bir ankrajın kalıcılığını kaldırabilir.
- Kalıcı veriler hazır değilse
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDdöndürülür. - XrUuidEXT ankrajı bulunamazsa
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDdöndürülür.
Geçerli Kullanım (Dolayı)
- xrUnpersistAnchorANDROID çağrılmadan önce
XR_ANDROID_device_anchor_persistenceuzantısı etkinleştirilmelidir. handle, geçerli bir XrDeviceAnchorPersistenceANDROID herkese açık kullanıcı adı olmalıdır.anchorId, geçerli bir XrUuidEXT yapısına işaretçi olmalıdır
İade Kodları
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
Sabit bağlantı sürdürülebilirliği için örnek kod
Aşağıdaki örnek kodda, sistem özelliğinin nasıl inceleneceği, sabitleneceği, listeleneceği ve sabitlemenin kaldırılacağı, ayrıca sabitlenmiş XrUuidEXT sabitleyicisinden sabitleyicinin nasıl oluşturulacağı gösterilmektedir.
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));
Yeni Nesne Türleri
Yeni Enum Constants
XrObjectType dizini aşağıdakilerle genişletildi:
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
XrResult dizini şu şekilde genişletildi:
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
XrStructureType dizini aşağıdakilerle genişletildi:
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
Yeni Sıralamalar
Yeni Yapılar
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Yeni İşlevler
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Sorunlar
Sürüm Geçmişi
- Düzeltme 1, 10.10.2024 (Kenny Vercaemer)
- İlk uzantı açıklaması
OpenXR™ ve OpenXR logosu, The Khronos Group Inc. şirketinin tescilli ticari markalarıdır ve Çin, Avrupa Birliği, Japonya ve Birleşik Krallık'ta ticari marka olarak tescil edilmiştir.