String Nama
XR_ANDROID_device_anchor_persistence
Jenis Ekstensi
Ekstensi instance
Registered Extension Number
458
Revisi
1
Dependensi Ekstensi dan Versi
XR_EXT_uuid dan XR_ANDROID_trackables
Tanggal Terakhir Diubah
2024-10-10
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Nihav Jain, Google
Levana Chen, Google
Spencer Quin, Google
Kenny Vercaemer, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi mempertahankan, mengambil, dan membatalkan mempertahankan anchor di perangkat saat ini untuk pengguna saat ini, di seluruh aplikasi dan sesi perangkat.
Memeriksa kemampuan sistem
Struktur XrSystemDeviceAnchorPersistencePropertiesANDROID ditentukan sebagai:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.supportsAnchorPersistenceadalahXrBool32yang menunjukkan apakah sistem saat ini mendukung persistensi anchor untuk anchor spasial.
Aplikasi dapat memeriksa apakah sistem mampu mempertahankan anchor spasial (lihat xrCreateAnchorSpaceANDROID) dengan memperluas XrSystemProperties dengan struktur XrSystemDeviceAnchorPersistencePropertiesANDROID saat memanggil xrGetSystemProperties. Untuk anchor yang dapat dilacak yang didukung, aplikasi dapat menggunakan xrEnumerateSupportedPersistenceAnchorTypesANDROID untuk membuat kueri jenis yang didukung.
Jika XR_FALSE ditampilkan untuk supportsAnchorPersistence, maka
XR_ERROR_FEATURE_UNSUPPORTED akan ditampilkan dari fungsi persistensi anchor
perangkat yang beroperasi pada anchor spasial.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum menggunakan XrSystemDeviceAnchorPersistencePropertiesANDROID typeharus berupaXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrEnumerateSupportedPersistenceAnchorTypesANDROID ditentukan sebagai:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
Deskripsi Parameter
sessionadalah XrSession yang membuat XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInputadalah kapasitastrackableTypes, atau 0 untuk mengambil kapasitas yang diperlukan.trackableTypeCountOutputadalah pointer ke jumlah array, atau pointer ke kapasitas yang diperlukan jikatrackableTypeCapacityInputtidak memadai.trackableTypesadalah pointer ke array XrTrackableTypeANDROID, tetapi dapat berupaNULLjikatrackableTypeCapacityInputadalah0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui penjelasan
mendetail tentang pengambilan ukuran
trackableTypesyang diperlukan.
Aplikasi dapat menggunakan xrEnumerateSupportedPersistenceAnchorTypesANDROID untuk memeriksa dukungan persistensi anchor pada pelacak XrTrackableTypeANDROID lainnya.
Jika
XrTrackableTypeANDROID tertentu tidak ditampilkan dalam array trackableTypes, XR_ERROR_FEATURE_UNSUPPORTED akan ditampilkan dari fungsi persistensi anchor
perangkat yang beroperasi pada anchor jenis tersebut.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrEnumerateSupportedPersistenceAnchorTypesANDROID instanceharus berupa nama sebutan channel XrInstance yang validtrackableTypeCountOutputharus berupa pointer ke nilaiuint32_t- Jika
trackableTypeCapacityInputbukan0, trackableTypes, harus berupa pointer ke array nilaitrackableTypeCapacityInputXrTrackableTypeANDROID
Kode Status
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
Membuat handle persistensi anchor perangkat
XrDeviceAnchorPersistenceANDROID adalah handle yang mewakili resource yang diperlukan untuk mempertahankan dan melacak anchor yang dipertahankan.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
Fungsi xrCreateDeviceAnchorPersistenceANDROID ditentukan sebagai:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
Deskripsi Parameter
sessionadalah XrSession yang membuat XrDeviceAnchorPersistenceANDROID.createInfoadalah XrDeviceAnchorPersistenceCreateInfoANDROID yang berisi parameter untuk XrDeviceAnchorPersistenceANDROID.outHandleadalah pointer ke handle tempat XrDeviceAnchorPersistenceANDROID yang dibuat ditampilkan.
Aplikasi dapat membuat ID XrDeviceAnchorPersistenceANDROID dengan memanggil xrCreateDeviceAnchorPersistenceANDROID. XrDeviceAnchorPersistenceANDROID dapat digunakan dalam panggilan API berikutnya untuk mempertahankan atau membatalkan anchor. Pegangan XrDeviceAnchorPersistenceANDROID harus pada akhirnya dibebaskan menggunakan fungsi xrDestroyDeviceAnchorPersistenceANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrCreateDeviceAnchorPersistenceANDROID sessionharus berupa nama sebutan channel XrSession yang validcreateInfoharus berupa pointer ke struktur XrDeviceAnchorPersistenceCreateInfoANDROID yang validoutHandleharus berupa pointer ke pengendali XrDeviceAnchorPersistenceANDROID
Kode Status
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
Struktur XrDeviceAnchorPersistenceCreateInfoANDROID ditentukan sebagai:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
Struktur XrDeviceAnchorPersistenceCreateInfoANDROID memberikan opsi pembuatan untuk XrDeviceAnchorPersistenceANDROID saat diteruskan ke xrCreateDeviceAnchorPersistenceANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum menggunakan XrDeviceAnchorPersistenceCreateInfoANDROID typeharus berupaXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyDeviceAnchorPersistenceANDROID ditentukan sebagai:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
Deskripsi Parameter
handleadalah handle XrDeviceAnchorPersistenceANDROID yang sebelumnya dibuat olehxrCreateDeviceAnchorPersistenceANDROID.
Fungsi xrDestroyDeviceAnchorPersistenceANDROID menghancurkan handle persistensi anchor perangkat.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrDestroyDeviceAnchorPersistenceANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang valid
Keamanan Thread
- Akses ke
handle, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Mempertahankan anchor
Fungsi xrPersistAnchorANDROID ditentukan sebagai:
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
Deskripsi Parameter
handleadalah XrDeviceAnchorPersistenceANDROID.persistedInfoadalah XrPersistedAnchorSpaceInfoANDROID yang berisi parameter untuk persistensi anchor.anchorIdOutputadalah pointer ke XrUuidEXT tempat UUID anchor yang dipertahankan ditampilkan.
Aplikasi dapat meminta anchor untuk dipertahankan dengan memanggil xrPersistAnchorANDROID. Aplikasi harus tidak mengasumsikan bahwa nilai yang ditampilkan berhasil berarti anchor segera dipertahankan. Aplikasi harus menggunakan xrGetAnchorPersistStateANDROID untuk memeriksa status persist anchor menggunakan anchor XrUuidEXT yang ditampilkan. Aplikasi dapat menggunakan xrUnpersistAnchorANDROID untuk membatalkan persistensi anchor.
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDakan ditampilkan jika anchor tidak dilacak pada saat panggilan.XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDakan ditampilkan jika data yang disimpan belum siap.XR_SUCCESSakan ditampilkan setelah anchor dimasukkan ke antrean untuk persistensi.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrPersistAnchorANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang validpersistedInfoharus berupa pointer ke struktur XrPersistedAnchorSpaceInfoANDROID yang validanchorIdOutputharus berupa pointer ke struktur XrUuidEXT
Kode Status
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
Struktur XrPersistedAnchorSpaceInfoANDROID ditentukan sebagai:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.anchoradalah anchor XrSpace yang sebelumnya dibuat oleh xrCreateAnchorSpaceANDROID untuk dipertahankan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum menggunakan XrPersistedAnchorSpaceInfoANDROID typeharus berupaXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturanchorharus berupa nama sebutan XrSpace yang valid
Fungsi xrGetAnchorPersistStateANDROID ditentukan sebagai:
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
Deskripsi Parameter
handleadalah XrDeviceAnchorPersistenceANDROID.anchorIdadalah XrUuidEXT anchor.persistStateadalah pointer ke XrAnchorPersistStateANDROID tempat status anchor ditampilkan.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDakan ditampilkan jika anchor XrUuidEXT tidak ditemukan.XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDakan ditampilkan jika dataanchorIdyang dipertahankan belum siap.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrGetAnchorPersistStateANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang validanchorIdharus berupa pointer ke struktur XrUuidEXT yang validpersistStateharus berupa pointer ke nilai XrAnchorPersistStateANDROID
Kode Status
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
Enum XrAnchorPersistStateANDROID ditentukan sebagai:
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 |
Deskripsi |
|
Anchor belum diminta untuk dipertahankan oleh aplikasi. |
|
Anchor telah diminta untuk dipertahankan, tetapi belum dipertahankan. |
|
Anchor telah berhasil dipertahankan oleh runtime. |
Membuat anchor dari data yang dipertahankan
Fungsi xrCreatePersistedAnchorSpaceANDROID ditentukan sebagai:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Deskripsi Parameter
handleadalah XrDeviceAnchorPersistenceANDROID.createInfoadalah XrPersistedAnchorSpaceCreateInfoANDROID yang berisi parameter untuk pembuatan anchor.anchorOutputadalah pointer ke XrSpace tempat ruang anchor baru ditampilkan.
Aplikasi dapat membuat anchor XrSpace dari
anchor yang dipertahankan sebelumnya dengan memanggil
xrCreatePersistedAnchorSpaceANDROID dengan
XrUuidEXT yang sama. Ini adalah cara lain untuk membuat anchor seperti yang ditentukan
dalam XR_ANDROID_trackables.
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDakan ditampilkan jika anchor XrUuidEXT tidak ditemukan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrCreatePersistedAnchorSpaceANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang validcreateInfoharus berupa pointer ke struktur XrPersistedAnchorSpaceCreateInfoANDROID yang validanchorOutputharus berupa pointer ke nama sebutan channel XrSpace
Kode Status
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
Struktur XrPersistedAnchorSpaceCreateInfoANDROID didefinisikan sebagai:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.anchorIdadalah XrUuidEXT dari anchor yang dipertahankan untuk membuat XrSpace anchor.
Struktur XrPersistedAnchorSpaceCreateInfoANDROID menyediakan opsi pembuatan untuk anchor saat diteruskan ke xrCreateDeviceAnchorPersistenceANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum menggunakan XrPersistedAnchorSpaceCreateInfoANDROID typeharus berupaXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Mengurutkan anchor yang dipertahankan
Fungsi xrEnumeratePersistedAnchorsANDROID ditentukan sebagai:
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
Deskripsi Parameter
handleadalah XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInputadalah kapasitas arrayanchorIds, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.anchorIdsCountOutputadalah pointer ke jumlahanchorIdsyang ditulis, atau pointer ke kapasitas yang diperlukan jikaanchorIdsCapacityInputtidak memadai.anchorIdsadalah pointer ke array struktur XrUuidEXT. Nilainya dapat berupaNULLjikaanchorIdsCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui penjelasan
mendetail tentang pengambilan ukuran
anchorIdsyang diperlukan.
Aplikasi dapat menghitung semua anchor persisten saat ini dengan memanggil
xrEnumeratePersistedAnchorsANDROID. anchorIds akan menyimpan
UUID anchor yang dipertahankan hingga kapasitas array. Jika kapasitas
tidak memadai, aplikasi tidak memiliki jaminan tentang anchor mana yang
ditampilkan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrEnumeratePersistedAnchorsANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang validanchorIdsCountOutputharus berupa pointer ke nilaiuint32_t- Jika
anchorIdsCapacityInputbukan0, anchorIds, harus berupa pointer ke array struktur XrUuidEXTanchorIdsCapacityInput
Kode Status
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
Menghapus anchor persisten
Fungsi xrUnpersistAnchorANDROID ditentukan sebagai:
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
Deskripsi Parameter
handleadalah XrDeviceAnchorPersistenceANDROID.anchorIdadalah XrUuidEXT anchor yang akan dihapus.
Aplikasi dapat menghapus anchor yang dipertahankan dengan memanggil xrUnpersistAnchorANDROID dan meneruskan anchor XrUuidEXT dari anchor yang akan dihapus.
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDakan ditampilkan jika data yang dipertahankan belum siap.XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDakan ditampilkan jika anchor XrUuidEXT tidak ditemukan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_device_anchor_persistenceharus diaktifkan sebelum memanggil xrUnpersistAnchorANDROID handleharus berupa handle XrDeviceAnchorPersistenceANDROID yang validanchorIdharus berupa pointer ke struktur XrUuidEXT yang valid
Kode Status
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
Contoh kode untuk persistensi anchor
Contoh kode berikut menunjukkan cara memeriksa kemampuan sistem, mempertahankan, menghitung, dan menghapus anchor, serta membuat anchor dari anchor yang dipertahankan 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));
Jenis Objek Baru
Konstanta Enum Baru
Enumerasi XrObjectType diperluas dengan:
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
Enumerasi XrResult diperluas dengan:
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
Enumerasi XrStructureType diperluas dengan:
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
Enum Baru
Struktur Baru
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
Fungsi Baru
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
Masalah
Histori Versi
- Revisi 1, 10-10-2024 (Kenny Vercaemer)
- Deskripsi ekstensi awal
OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.