سلسلة الاسم
XR_ANDROID_device_anchor_persistence
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
458
المراجعة
1
التبعيات المتعلّقة بالإصدارات والإضافات
XR_EXT_uuid وXR_ANDROID_trackables
تاريخ آخر تعديل
2024-10-10
حالة عنوان IP
ما مِن مطالبات معروفة بعناوين IP.
المساهمون
نيهاف جاين، Google
ليفانا تشين، من Google
سبنسر كوين، Google
"كيني فيركامر"، 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_ANDROIDnextيجب أن يكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية.
يتم تعريف الدالة xrEnumerateSupportedPersistenceAnchorTypesANDROID على النحو التالي:
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
أوصاف المَعلمات
sessionهو XrSession الذي ينشئ XrDeviceAnchorPersistenceANDROID.-
trackableTypeCapacityInputهي سعةtrackableTypes، أو 0 ل retrieving the required capacity. 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، يجب أن تكون مُشيرًا إلى صفيف من قيمtrackableTypeCapacityInputXrTrackableTypeANDROID.
رموز الإرجاع
XR_SUCCESS
XR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_FUNCTION_UNSUPPORTED
إنشاء معرّف دائم لعنصر التثبيت في الجهاز
XrDeviceAnchorPersistenceANDROID هو اسم معرِّف يمثّل الموارد المطلوبة للحفاظ على ثبات المرسّيات وتتبُّعها.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
يتم تعريف الدالة xrCreateDeviceAnchorPersistenceANDROID على النحو التالي:
XrResult xrCreateDeviceAnchorPersistenceANDROID(
XrSession session,
const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
XrDeviceAnchorPersistenceANDROID* outHandle);
أوصاف المَعلمات
sessionهو XrSession الذي ينشئ XrDeviceAnchorPersistenceANDROID.createInfoهو XrDeviceAnchorPersistenceCreateInfoANDROID الذي يحتوي على مَعلمات XrDeviceAnchorPersistenceANDROID.outHandleهو مؤشر إلى معرّف يتم من خلاله عرض القيمة التي تم إنشاؤها XrDeviceAnchorPersistenceANDROID.
يمكن للتطبيق إنشاء معرّف XrDeviceAnchorPersistenceANDROID من خلال استدعاء xrCreateDeviceAnchorPersistenceANDROID. يمكن استخدام XrDeviceAnchorPersistenceANDROID في طلبات البيانات اللاحقة من واجهة برمجة التطبيقات للحفاظ على ثبات نقاط الربط أو إلغاء ثباتها. يجب في النهاية إلغاء تخصيص معرّف XrDeviceAnchorPersistenceANDROID باستخدام الدالة xrDestroyDeviceAnchorPersistenceANDROID.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_device_anchor_persistenceقبل استدعاء xrCreateDeviceAnchorPersistenceANDROID. sessionيجب أن يكون معرّف XrSession صالحًاcreateInfoيجب أن يكون مؤشرًا إلى بنية XrDeviceAnchorPersistenceCreateInfoANDROID صالحة.outHandleيجب أن يكون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_ANDROIDnextيجب أن يكون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_ANDROIDnextيجب أن يكون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يجب أن يكون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. |
|
تم طلب الاحتفاظ بـ Anchor، ولكن لم يتم الاحتفاظ به بعد. |
|
تم الاحتفاظ بالإشارة بنجاح من خلال وقت التشغيل. |
إنشاء عنصر تثبيت من البيانات الثابتة
يتم تعريف الدالة xrCreatePersistedAnchorSpaceANDROID على النحو التالي:
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
أوصاف المَعلمات
-
handleهو XrDeviceAnchorPersistenceANDROID. createInfoهو XrPersistedAnchorSpaceCreateInfoANDROID الذي يحتوي على مَعلمات لإنشاء العنصر الأساسي.anchorOutputهو مؤشر إلى XrSpace يتم من خلاله عرض مساحة الربط الجديدة.
يمكن للتطبيق إنشاء عنصر تثبيت XrSpace من XrAnchor تم حفظه سابقًا من خلال استدعاء xrCreatePersistedAnchorSpaceANDROID باستخدامXrUuidEXT نفسه. هذه طريقة أخرى لإنشاء عناصر الربط كما هو محدّد
في XR_ANDROID_trackables.
- سيتم عرض
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROIDفي حال عدم العثور على العنصر الثابت XrUuidEXT.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_device_anchor_persistenceقبل استدعاء xrCreatePersistedAnchorSpaceANDROID. handleيجب أن يكون اسم معرِّف XrDeviceAnchorPersistenceANDROID صالحًاcreateInfoيجب أن يكون مؤشرًا إلى بنية XrPersistedAnchorSpaceCreateInfoANDROID صالحة.anchorOutputيجب أن يكون مؤشرًا إلى اسم حساب على 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 options لإنشاء العنصر الأساسي عند تمريرها إلى xrCreateDeviceAnchorPersistenceANDROID.
الاستخدام الصالح (ضمني)
- يجبتفعيل إضافة
XR_ANDROID_device_anchor_persistenceقبل استخدام XrPersistedAnchorSpaceCreateInfoANDROID. typeيجب أن يكونXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROIDnextيجب أن يكون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المطلوب.
يجوز للتطبيق سرد جميع نقاط الربط الحالية الثابتة من خلال استدعاء xrEnumeratePersistedAnchorsANDROID. سيحتوي anchorIds على
أرقام UUID لعناصر الربط الثابتة حتى سعة المصفوفة. إذا كانت السعة
غير كافية، لا تتوفّر للتطبيقات أيّ ضمانات بشأن العناصر الأساسية التي يتم
عرضها.
الاستخدام الصالح (ضمني)
- يجب تفعيل امتداد
XR_ANDROID_device_anchor_persistenceقبل استدعاء xrEnumeratePersistedAnchorsANDROID. handleيجب أن يكون اسم معرِّف XrDeviceAnchorPersistenceANDROID صالحًاanchorIdsCountOutputيجب أن يكون مؤشرًا إلى قيمةuint32_t.- إذا لم يكن
anchorIdsCapacityInputهو0, anchorIds، يجب أن يكون مؤشرًا إلى صفيف منanchorIdsCapacityInputXrUuidEXT
رموز الإرجاع
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));
أنواع العناصر الجديدة
ثوابت قائمة التعداد الجديدة
تم توسيع قائمة 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
عمليات التعداد الجديدة
التصاميم الجديدة
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
الدوالّ الجديدة
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
المشاكل
سجلّ الإصدارات
- النسخة 1، 10-10-2024 (كيني فيركمير)
- الوصف الأوّلي للإضافة
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجَّلتان كعلامتَين تجاريتَين في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.