מחרוזת שם
XR_ANDROID_device_anchor_persistence
סוג התוסף
תוסף למכונה
מספר תוסף רשום
458
גרסה
1
תלות בתוספים ובגרסאות
XR_EXT_uuid וכן XR_ANDROID_trackables
תאריך השינוי האחרון
2024-10-10
סטטוס כתובת ה-IP
לא ידוע על תלונות על הפרת זכויות יוצרים בנושא כתובת IP.
שותפים ביצירת התוכן
Nihav Jain, Google
לונן צ'ן, Google
ספנסר קווין (Spencer Quin), Google
Kenny Vercaemer, Google
סקירה כללית
התוסף הזה מאפשר לאפליקציה לשמור, לאחזר ולבטל את השמירה של עוגנים במכשיר הנוכחי עבור המשתמש הנוכחי, בין אפליקציות ובין סשנים במכשיר.
בדיקת יכולות המערכת
המבנה XrSystemDeviceAnchorPersistencePropertiesANDROID מוגדר באופן הבא:
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
תיאורי חברים
typeהוא XrStructureType של המבנה הזה.nextהואNULLאו הפניה למבנה הבא בשרשרת המבנים. אין מבנים כאלה מוגדרים ב-OpenXR או בתוסף הזה.supportsAnchorPersistenceהואXrBool32שמציין אם המערכת הנוכחית תומכת בעקביות של עוגנים לעוגנים מרחביים.
אפליקציה יכולה לבדוק אם המערכת מסוגלת לשמור עוגנים מרחביים (ראו xrCreateAnchorSpaceANDROID) על ידי הרחבת XrSystemProperties עם המבנה XrSystemDeviceAnchorPersistencePropertiesANDROID בזמן הקריאה ל-xrGetSystemProperties. לגבי עוגנים נתמכים שניתן לעקוב אחריהם, אפליקציה יכולה להשתמש ב-xrEnumerateSupportedPersistenceAnchorTypesANDROID כדי לשלוח שאילתה לגבי הסוגים הנתמכים.
אם הערך XR_FALSE מוחזר עבור supportsAnchorPersistence, הערך XR_ERROR_FEATURE_UNSUPPORTED יוחזר מפונקציות העקביות של עוגן המכשיר שפועלות על עוגן מרחבי.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמשתמשים ב-XrSystemDeviceAnchorPersistencePropertiesANDROID. - הערך של
typeחייב להיותXR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבנים
הפונקציה xrEnumerateSupportedPersistenceAnchorTypesANDROID מוגדרת באופן הבא:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
תיאורי פרמטרים
sessionהוא XrSession שיוצר את XrDeviceAnchorPersistenceANDROID.trackableTypeCapacityInputהיא הקיבולת שלtrackableTypes, או 0 כדי לאחזר את הקיבולת הנדרשת.trackableTypeCountOutputהוא הפניה למספר הפריטים במערך, או הפניה לקיבולת הנדרשת במקרה ש-trackableTypeCapacityInputלא מספיק.trackableTypesהוא מצביע למערך של XrTrackableTypeANDROID, אבל יכול להיותNULLאםtrackableTypeCapacityInputהוא0.- בקטע פרמטרים של גודל מאגר מפורט תיאור של אחזור הגודל הנדרש של
trackableTypes.
האפליקציה יכולה להשתמש ב-xrEnumerateSupportedPersistenceAnchorTypesANDROID כדי לבדוק אם יש תמיכה בשימור של עוגנים בפריטים אחרים למעקב מסוג XrTrackableTypeANDROID.
אם XrTrackableTypeANDROID נתון לא מוחזר במערך trackableTypes, הערך XR_ERROR_FEATURE_UNSUPPORTED יוחזר מפונקציות העקביות של עוגן המכשיר שפועלות על עוגן מהסוג הזה.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את הפונקציה xrEnumerateSupportedPersistenceAnchorTypesANDROID. instanceחייב להיות מזהה XrInstance חוקיtrackableTypeCountOutputחייב להיות הפניה לערךuint32_t- אם
trackableTypeCapacityInputהוא לא0, trackableTypes, חובה שהוא יהיה הפניה למערך שלtrackableTypeCapacityInputערכים מסוג XrTrackableTypeANDROID
קודי החזרה
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
יצירת ידן עקביות (handle) של עיגון למכשיר
XrDeviceAnchorPersistenceANDROID הוא כינוי שמייצג את המשאבים הנדרשים לשמירה ולמעקב אחרי עוגנים שנשמרו.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
הפונקציה xrCreateDeviceAnchorPersistenceANDROID מוגדרת בתור:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
תיאורי פרמטרים
sessionהוא XrSession שיוצר את XrDeviceAnchorPersistenceANDROID.createInfoהוא XrDeviceAnchorPersistenceCreateInfoANDROID שמכיל פרמטרים ל-XrDeviceAnchorPersistenceANDROID.outHandleהוא הפניה למזהה (handle) שבו מוחזר האובייקט שנוצר של XrDeviceAnchorPersistenceANDROID.
אפליקציה יכולה ליצור אחיזה מסוג XrDeviceAnchorPersistenceANDROID על ידי קריאה ל-xrCreateDeviceAnchorPersistenceANDROID. אפשר להשתמש ב-XrDeviceAnchorPersistenceANDROID בקריאות API הבאות כדי לשמור עוגנים או לבטל את השמירה שלהם. צריך לפנות את הטיפולן של XrDeviceAnchorPersistenceANDROID באמצעות הפונקציה xrDestroyDeviceAnchorPersistenceANDROID.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrCreateDeviceAnchorPersistenceANDROID sessionחייב להיות מזהה XrSession תקיןcreateInfoחייב להיות הפניה למבנה תקין של XrDeviceAnchorPersistenceCreateInfoANDROID- הערך של
outHandleחייב להיות הפניה למזהה של XrDeviceAnchorPersistenceANDROID
קודי החזרה
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 מוגדר כך:
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
XrStructureType type;
void* next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
תיאורי חברים
typeהוא XrStructureType של המבנה הזה.nextהואNULLאו הפניה למבנה הבא בשרשרת המבנים. אין מבנים כאלה מוגדרים ב-OpenXR או בתוסף הזה.
המבנה XrDeviceAnchorPersistenceCreateInfoANDROID מספק אפשרויות יצירה ל-XrDeviceAnchorPersistenceANDROID כשהוא מועבר ל-xrCreateDeviceAnchorPersistenceANDROID.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמשתמשים ב-XrDeviceAnchorPersistenceCreateInfoANDROID. - הערך של
typeחייב להיותXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבנים
הפונקציה xrDestroyDeviceAnchorPersistenceANDROID מוגדרת באופן הבא:
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
תיאורי פרמטרים
handleהוא מנוף מסוג XrDeviceAnchorPersistenceANDROID שנוצר בעבר על ידיxrCreateDeviceAnchorPersistenceANDROID.
הפונקציה xrDestroyDeviceAnchorPersistenceANDROID משמידה את הידית של עיגון המכשיר.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrDestroyDeviceAnchorPersistenceANDROID. handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקין
בטיחות בשרשור
- חובה לסנכרן באופן חיצוני את הגישה ל-
handleואת כל כינויי הילדים
קודי החזרה
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
שמירת עוגן
הפונקציה xrPersistAnchorANDROID מוגדרת כך:
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
תיאורי פרמטרים
handleהוא XrDeviceAnchorPersistenceANDROID.persistedInfoהוא XrPersistedAnchorSpaceInfoANDROID שמכיל פרמטרים לקביעת עמידות של עוגנים.anchorIdOutputהוא הפניה ל-XrUuidEXT שבו מוחזר ה-UUID של הצ'אנק המאוחסן.
האפליקציה יכולה לבקש שמיקומי עוגנים יישמרו על ידי קריאה ל-xrPersistAnchorANDROID. האפליקציה אסור להניח שערך ההחזרה של הצלחה מציין שהעוגן נשמר באופן מיידי. האפליקציה צריכה להשתמש ב-xrGetAnchorPersistStateANDROID כדי לבדוק את מצב השמירה של הצ'אנק באמצעות הצ'אנק המוחזר XrUuidEXT. האפליקציה יכולה להשתמש ב-xrUnpersistAnchorANDROID כדי לבטל את השמירה של הצמד.
- הערך
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDיוחזר אם לא מתבצע מעקב אחרי הצ'אט בזמן הקריאה. - הערך
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDיוחזר אם הנתונים שנשמרו לא מוכנים. - הערך של
XR_SUCCESSיוחזר אחרי שהעוגן יועבר לתור לשמירה.
שימוש תקין (מרומז)
- צריך להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrPersistAnchorANDROID handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקיןpersistedInfoחייב להיות הפניה למבנה XrPersistedAnchorSpaceInfoANDROID חוקיanchorIdOutputחייב להיות הפניה למבנה XrUuidEXT
קודי החזרה
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 מוגדר באופן הבא:
typedef struct XrPersistedAnchorSpaceInfoANDROID {
XrStructureType type;
void* next;
XrSpace anchor;
} XrPersistedAnchorSpaceInfoANDROID;
תיאורי חברים
typeהוא XrStructureType של המבנה הזה.nextהואNULLאו הפניה למבנה הבא בשרשרת המבנים. אין מבנים כאלה מוגדרים ב-OpenXR או בתוסף הזה.anchorהוא XrSpace מוגדר קבוע שנוצר קודם לכן על ידי xrCreateAnchorSpaceANDROID.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמשתמשים ב-XrPersistedAnchorSpaceInfoANDROID - הערך של
typeחייב להיותXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבניםanchorחייב להיות כינוי חוקי ב-XrSpace
הפונקציה xrGetAnchorPersistStateANDROID מוגדרת כך:
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
תיאורי פרמטרים
handleהוא XrDeviceAnchorPersistenceANDROID.anchorIdהוא XrUuidEXT של העוגן.persistStateהוא הפניה ל-XrAnchorPersistStateANDROID שבו מוחזר המצב של הצ'אנק.- הערך
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDיוחזר אם לא נמצאה האחיזה XrUuidEXT. - הערך
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDיוחזר אם הנתונים שנשמרו שלanchorIdלא מוכנים.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrGetAnchorPersistStateANDROID. handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקיןanchorIdחייב להיות הפניה למבנה XrUuidEXT תקיןpersistStateחייב להיות הפניה לערך של XrAnchorPersistStateANDROID
קודי החזרה
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 מוגדר כך:
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 |
תיאור |
|
לא התבקשה שימור של הצמדה על ידי האפליקציה. |
|
נשלחה בקשה לשמירת הצמדה, אבל היא עדיין לא נשמרה. |
|
ה-anchor נשמר בהצלחה בסביבת זמן הריצה. |
יצירת עוגן מנתונים שנשמרו
הפונקציה xrCreatePersistedAnchorSpaceANDROID מוגדרת כך:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
תיאורי פרמטרים
handleהוא XrDeviceAnchorPersistenceANDROID.createInfoהוא XrPersistedAnchorSpaceCreateInfoANDROID שמכיל פרמטרים ליצירת הצמד.anchorOutputהוא הפניה ל-XrSpace שבו מוחזר המרחב המשותף החדש.
האפליקציה יכולה ליצור עוגן XrSpace מעוגן שנשמר בעבר, על ידי קריאה ל-xrCreatePersistedAnchorSpaceANDROID עם אותו XrUuidEXT. זוהי דרך נוספת ליצירת עוגנים כפי שהם מוגדרים ב-XR_ANDROID_trackables.
- הערך
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDיוחזר אם לא נמצאה האחיזה XrUuidEXT.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrCreatePersistedAnchorSpaceANDROID. handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקיןcreateInfoחייב להיות הפניה למבנה חוקי של XrPersistedAnchorSpaceCreateInfoANDROIDanchorOutputחייב להיות מציין לכינוי XrSpace
קודי החזרה
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 מוגדר בתור:
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrUuidEXT anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
תיאורי חברים
typeהוא XrStructureType של המבנה הזה.nextהואNULLאו הפניה למבנה הבא בשרשרת המבנים. אין מבנים כאלה מוגדרים ב-OpenXR או בתוסף הזה.anchorIdהוא XrUuidEXT של העוגן הקבוע, שממנו יוצרים את העוגן XrSpace.
המבנה XrPersistedAnchorSpaceCreateInfoANDROID מספק אפשרויות יצירה של הצמד כשהוא מועבר ל-xrCreateDeviceAnchorPersistenceANDROID.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמשתמשים ב-XrPersistedAnchorSpaceCreateInfoANDROID - הערך של
typeחייב להיותXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת המבנים
ספירת עוגנים שנשמרו
הפונקציה xrEnumeratePersistedAnchorsANDROID מוגדרת באופן הבא:
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
תיאורי פרמטרים
handleהוא XrDeviceAnchorPersistenceANDROID.anchorIdsCapacityInputהוא הקיבולת של מערךanchorIds, או 0 כדי לציין בקשה לאחזור הקיבולת הנדרשת.anchorIdsCountOutputהוא הפניה למספר הפעמים ש-anchorIdsנכתב, או הפניה לקיבולת הנדרשת במקרה ש-anchorIdsCapacityInputלא מספיקה.anchorIdsהוא מצביע למערך של מבנים מסוג XrUuidEXT. הערך יכול להיותNULLאם הערך שלanchorIdsCapacityInputהוא 0.- בקטע פרמטרים של גודל מאגר מפורט תיאור של אחזור הגודל הנדרש של
anchorIds.
האפליקציה יכולה למנות את כל ה-anchors הנוכחיים שנשמרו על ידי קריאה ל-xrEnumeratePersistedAnchorsANDROID. המשתנה anchorIds יאחסן את מזהי ה-UUID של הווידג'טים הקבועים עד לקיבולת של המערך. אם הקיבולת לא מספיקה, לאפליקציות אין ערובה לגבי עוגנים שיוחזרו.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את הפונקציה xrEnumeratePersistedAnchorsANDROID. handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקיןanchorIdsCountOutputחייב להיות הפניה לערךuint32_t- אם
anchorIdsCapacityInputהוא לא0, anchorIds, חובה שהוא יהיה הפניה למערך שלanchorIdsCapacityInputמבני XrUuidEXT
קודי החזרה
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
ביטול השמירה של עוגן שנשמר
הפונקציה xrUnpersistAnchorANDROID מוגדרת באופן הבא:
XrResult xrUnpersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId);
תיאורי פרמטרים
handleהוא XrDeviceAnchorPersistenceANDROID.anchorIdהוא XrUuidEXT של העוגן שרוצים לבטל את השמירה שלו.
האפליקציה יכולה לבטל את השמירה של עוגן שנשמר על ידי קריאה ל-xrUnpersistAnchorANDROID והעברת הערך של עוגן XrUuidEXT שרוצים לבטל את השמירה שלו.
- הערך
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROIDיופיע אם הנתונים שנשמרו לא מוכנים. - הערך
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDיוחזר אם לא נמצאה האחיזה XrUuidEXT.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_device_anchor_persistenceלפני שמפעילים את xrUnpersistAnchorANDROID. handleחייב להיות מזהה XrDeviceAnchorPersistenceANDROID תקיןanchorIdחייב להיות הפניה למבנה XrUuidEXT תקין
קודי החזרה
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
קוד לדוגמה לשמירה של מודעות עוגן
דוגמת הקוד הבאה ממחישה איך לבדוק את יכולות המערכת, לשמור, למנות ולבטל שמירה של עוגנים, וגם ליצור עוגן מהעוגן השמור 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));
סוגי אובייקטים חדשים
קבועים חדשים של Enum
המניין XrObjectType הורחב עם:
XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
המניין XrResult הורחב עם:
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDXR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROIDXR_ERROR_ANCHOR_NOT_TRACKING_ANDROIDXR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
המניין XrStructureType הורחב עם:
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 חדשים
מבנים חדשים
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
פונקציות חדשות
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
בעיות
היסטוריית הגרסאות
- גרסה 1, 10 באוקטובר 2024 (Kenny Vercaemer)
- תיאור ראשוני של התוסף
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc., והם רשומים כסימנים מסחריים בסין, באיחוד האירופי, ביפן ובבריטניה.