XR_ANDROID_depth_texture
מחרוזת שם
XR_ANDROID_depth_texture
סוג התוסף
תוסף למכונה
מספר השלוחה הרשום
703
גרסה
1
סטטוס האישור
לא אושר
תלויות של תוספים וגרסאות
תאריך השינוי האחרון
2024-09-11
סטטוס IP
אין תלונות ידועות על הפרת קניין רוחני.
שותפים ביצירת התוכן
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
סקירה כללית
התוסף הזה מאפשר לאפליקציה לבקש מפות עומק של הסביבה האמיתית מסביב למשקפיים, ולשאול לגבי רזולוציות עומק נתמכות בזמן היצירה.
התוסף הזה נועד לחשוף עומק גולמי וחלק לצורך הסתרה, בדיקות של מיקום המצביע ומשימות ספציפיות אחרות שמנצלות גיאומטריה מדויקת של סצנה, למשל זיהוי פנים מזויפות.
הערה
מפות העומק נוצרות על ידי סביבת זמן הריצה ומשותפות עם האפליקציה באמצעות XrDepthSwapchainANDROID . זמן הריצה לא יכול לשנות את הרזולוציות של תמונת העומק שמוחזרות דרך xrEnumerateDepthResolutionsANDROID במהלך כל משך החיים של האפליקציה.
הרשאות
התוסף הזה חושף טקסטורת עומק שנדגמה בתדירות נמוכה יותר כדי לצמצם את החששות לגבי פרטים אישיים מזהים (PII). אפליקציות ל-Android חייבות לכלול את ההרשאה android.permission.SCENE_UNDERSTANDING_FINE במניפסט שלהן, כי התוסף הזה חושף את הגיאומטריה של הסביבה. ההרשאה android.permission.SCENE_UNDERSTANDING_FINE נחשבת להרשאה מסוכנת. האפליקציה חייבת לבקש את ההרשאה בזמן הריצה כדי להשתמש בפונקציות האלה:
(רמת הגנה: מסוכן)
בדיקת יכולות המערכת
המבנה של XrSystemDepthTrackingPropertiesANDROID מוגדר כך:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
supportsDepthTrackingהואXrBool32שמציין אם המערכת הנוכחית תומכת במעקב אחר עומק.
אפליקציה יכולה לבדוק אם המערכת מסוגלת לעקוב אחרי עומק על ידי הרחבת XrSystemProperties באמצעות המבנה XrSystemDepthTrackingPropertiesANDROID כשקוראים ל-xrGetSystemProperties .
אם ורק אם סביבת זמן הריצה מחזירה את הערך XR_FALSE עבור supportsDepthTracking , סביבת זמן הריצה חייבת להחזיר את הערך XR_ERROR_FEATURE_UNSUPPORTED מ-xrCreateDepthSwapchainANDROID .
שימוש תקין (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrSystemDepthTrackingPropertiesANDROID -
typeחייב להיותXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
רזולוציות של עומק השאילתה
הפונקציה xrEnumerateDepthResolutionsANDROID מוגדרת כך:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
תיאורי פרמטרים
-
sessionהוא ה-XrSession שמפרט את רזולוציות העומק הנתמכות. -
resolutionCapacityInputהוא הקיבולת שלresolutions, או 0 כדי לאחזר את הקיבולת הנדרשת. -
resolutionCountOutputהוא מצביע למספר שלuint64_tresolutionsשנכתבו, או מצביע לקיבולת הנדרשת במקרה ש-resolutionCapacityInputלא מספיק. -
resolutionsהוא מצביע למערך של XrDepthCameraResolutionANDROID , אבל יכול להיותNULLאםresolutionCapacityInputהוא0. - בקטע פרמטרים של שטח אחסון זמני יש תיאור מפורט של אחזור הגודל הנדרש של
resolutions.
הפונקציה xrEnumerateDepthResolutionsANDROID מפרטת את רזולוציות העומק שנתמכות בסשן הנוכחי. רזולוציות העומק צריכות להיות מסודרות לפי סדר העדיפות של זמן הריצה, מהגבוהה ביותר לנמוכה ביותר. כדי להשיג ביצועים ואיכות אופטימליים, האפליקציה צריכה להשתמש בהעדפה הגבוהה ביותר שהיא תומכת בה.
זמני הריצה חייבים תמיד להחזיר תוכן מאגר זהה מהספירה הזו למשך הסשן.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שקוראים לפונקציה xrEnumerateDepthResolutionsANDROID -
sessionחייב להיות כינוי תקין של XrSession -
resolutionCountOutputחייב להיות מצביע לערךuint32_t - אם הערך של
resolutionCapacityInputהוא לא0, הערך שלresolutionsחייב להיות מצביע למערך של ערכיresolutionCapacityInputXrDepthCameraResolutionANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
הערך של XrDepthCameraResolutionANDROID מתאר את רזולוציות העומק הנתמכות כשיוצרים XrDepthSwapchainANDROID .
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
תיאורי ערכים מספריים
-
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID– הרזולוציה של תמונות העומק והסמך היא 80x80. XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— הרזולוציה של תמונות העומק והמהימנות היא 160x160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— הרזולוציה של תמונות העומק והסמך היא 320x320.
יצירת שרשרת החלפה של עומק
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID הוא כינוי של שרשרת החלפה של עומק.
הפונקציה xrCreateDepthSwapchainANDROID מוגדרת כך:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
תיאורי פרמטרים
-
sessionהוא ה-XrSession שיוצר את שרשרת ההחלפה של העומק. -
createInfoהוא מצביע למבנה XrDepthSwapchainCreateInfoANDROID שמכיל פרמטרים שמשמשים ליצירת ה-swapchain. -
swapchainהוא מצביע לכינוי שבו מוחזר ה-XrDepthSwapchainANDROID שנוצר.
האפליקציה יכולה להשתמש בפונקציה xrCreateDepthSwapchainANDROID כדי ליצור שרשרת החלפה של עומק שמנהלת גם תמונות עומק וגם תמונות רמת סמך.
- סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_FEATURE_UNSUPPORTEDאם המערכת לא תומכת במעקב אחר עומק. - סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_PERMISSION_INSUFFICIENTאם ההרשאות הנדרשות לא ניתנו לאפליקציה שמבצעת את הקריאה החוזרת. - זמן הריצה חייב להחזיר את הערך
XR_ERROR_VALIDATION_FAILUREאם אין תמיכה ברזולוציית העומק שצוינה ב-XrDepthSwapchainCreateInfoANDROID. - סביבת זמן הריצה צריכה ליצור תמונות של רמת הסמך של העומק רק כשהביטים התואמים מוגדרים ל-
createInfoבזמן היצירה של swapchain.
יכול להיות שבהמשך, המזהה של שרשרת ההחלפה של עומק שמוחזר ישמש בקריאות ל-API. בסופו של דבר, צריך לשחרר את נקודת האחיזה XrDepthSwapchainANDROID באמצעות הפונקציה xrDestroyDepthSwapchainANDROID.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שקוראים ל-xrCreateDepthSwapchainANDROID -
sessionחייב להיות כינוי תקין של XrSession -
createInfoחייב להיות מצביע למבנה XrDepthSwapchainCreateInfoANDROID תקין -
swapchainחייב להיות מצביע לכינוי XrDepthSwapchainANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
המבנה של XrDepthSwapchainCreateInfoANDROID מוגדר כך:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
resolutionהוא XrDepthCameraResolutionANDROID שבאמצעותו נוצרות טקסטורות העומק והסמך. -
createFlagsהוא אחד או יותר מ-XrDepthSwapchainCreateFlagsANDROID .
המבנה XrDepthSwapchainCreateInfoANDROID מספק אפשרויות ליצירת XrDepthSwapchainANDROID כשמעבירים אותו אל xrCreateDepthSwapchainANDROID .
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrDepthSwapchainCreateInfoANDROID -
typeחייב להיותXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
resolutionחייב להיות ערך XrDepthCameraResolutionANDROID תקין -
createFlagsחייב להיות שילוב תקין של ערכי XrDepthSwapchainCreateFlagBitsANDROID -
createFlagsלא יכול להיות0
הדגל XrDepthSwapchainCreateFlagsANDROID מציין אפשרויות ליצירת XrDepthSwapchainANDROID .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
הביטים התקינים של XrDepthSwapchainCreateFlagsANDROID מוגדרים על ידי XrDepthSwapchainCreateFlagBitsANDROID , שמוגדר כך:
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
תיאורי הדגלים
-
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID— מציין ששרשרת ההחלפה תספק תמונות עומק חלקות. -
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID— מציין ששרשרת ההחלפה תספק תמונות חלקות של רמת הסמך של העומק. -
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID– מציין ששרשרת ההחלפה תספק תמונות עומק גולמיות. XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID— מציין ששרשרת ההחלפה תספק תמונות גולמיות של רמת הסמך של העומק.
הפונקציה xrDestroyDepthSwapchainANDROID מוגדרת כך:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
תיאורי פרמטרים
-
swapchainהוא נקודת אחיזה של XrDepthSwapchainANDROID שנוצרה בעבר על ידי xrCreateDepthSwapchainANDROID .
הפונקציה xrDestroyDepthSwapchainANDROID משמידה את שרשרת ההחלפה של העומק. אחרי הקריאה הזו, סביבת זמן הריצה עשויה לפנות את כל הזיכרון והמשאבים שקשורים אליה.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שקוראים ל-xrDestroyDepthSwapchainANDROID -
swapchainחייב להיות נקודת אחיזה תקינה של XrDepthSwapchainANDROID
Thread Safety
- הגישה אל
swapchain, ואל כל נקודות האחיזה הצאצאות, חייבת להיות מסונכרנת באופן חיצוני
קודי החזרה
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
גישה למרקמי עומק
הפונקציה xrEnumerateDepthSwapchainImagesANDROID מוגדרת כך:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
תיאורי פרמטרים
-
depthSwapchainהוא ה-XrDepthSwapchainANDROID שממנו מקבלים תמונות. -
depthImageCapacityInputהוא הקיבולת של המערךdepthImages, או 0 כדי לציין בקשה לאחזור הקיבולת הנדרשת. -
depthImageCountOutputהוא מצביע למספר שלdepthImagesשנכתבו, או מצביע לקיבולת הנדרשת במקרה ש-depthImageCapacityInputלא מספיק. -
depthImagesהוא מצביע למערך של מבני XrDepthSwapchainImageANDROID. הערך שלNULLיכול להיותdepthImageCapacityInputאם הוא 0. - בקטע פרמטרים של שטח אחסון זמני יש תיאור מפורט של אחזור הגודל הנדרש של
depthImages.
xrEnumerateDepthSwapchainImagesANDROID ממלא מערך של מבני XrDepthSwapchainImageANDROID. המשאבים חייבים להיות קבועים ותקפים למשך כל משך החיים של XrDepthSwapchainANDROID . הפונקציה הזו פועלת באופן דומה ל-xrEnumerateSwapchainImages .
סביבת זמן הריצה חייבת תמיד להחזיר תוכן מאגר זהה מהספירה הזו למשך כל חיי ה-swapchain.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שקוראים לפונקציה xrEnumerateDepthSwapchainImagesANDROID -
depthSwapchainחייב להיות נקודת אחיזה תקינה של XrDepthSwapchainANDROID -
depthImageCountOutputחייב להיות מצביע לערךuint32_t - אם
depthImageCapacityInputהוא לא0,depthImagesחייב להיות מצביע למערך של מבניdepthImageCapacityInputXrDepthSwapchainImageANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
המבנה של XrDepthSwapchainImageANDROID מוגדר כך:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
rawDepthImageהואNULLאו המצביע לתמונות עומק גולמיות של התצוגה השמאלית והימנית שהוקצו על ידי זמן הריצה. הערכים הם במטרים. ערכים מיוחדים:0.0מציין פיקסל עומק לא חוקי או ריק בעומק הגולמי,Infמציין עומק ידוע שנמצא למעשה במרחק אינסופי, -
rawDepthConfidenceImageהואNULLאו המצביע לתמונות מהימנות של עומק גולמי לתצוגות שמאלה וימינה שהוקצו על ידי זמן הריצה. -
smoothDepthImageהואNULLאו המצביע לתמונות עומק חלקות לתצוגות שמאלה וימינה שהוקצו על ידי זמן הריצה. הערכים הם במטרים. ערכים מיוחדים:0.0מציין פיקסל עומק לא חוקי או ריק בעומק החלק,Infמציין עומק ידוע שנמצא למעשה במרחק אינסופי. -
smoothDepthConfidenceImageהואNULLאו המצביע לתמונות של רמת הדיוק של עומק חלק בתצוגות השמאלית והימנית שהוקצו על ידי זמן הריצה.
המצביעים למאגר התמונות יהיו תקפים רק במהלך מחזור החיים של שרשרת ההחלפה. אחרי שרשרת ההחלפה נהרסת, המצביעים נחשבים למצביעים תלויים.
XrDepthSwapchainImageANDROID מייצג את תמונות העומק מ-XrDepthSwapchainANDROID קריא, שהוקצה כפי שמתואר ב-XrDepthSwapchainCreateInfoANDROID :: resolution וב-XrDepthSwapchainCreateInfoANDROID :: createFlags בזמן הקריאה ל-xrCreateDepthSwapchainANDROID . לכל תמונת עומק:
- ערכי התמונה מסודרים בזיכרון לפי סדר השורות, בלי ריפוד בין השורות.
- הערך הראשון הוא בפינה השמאלית העליונה והערך האחרון הוא בפינה הימנית התחתונה.
- גודל הזיכרון שאליו מצביע המצביע נקבע לפי הערך של xrEnumerateDepthSwapchainImagesANDROID ומוגדר על ידי XrDepthSwapchainCreateInfoANDROID ::
resolutionבזמן הקריאה ל-xrCreateDepthSwapchainANDROID . לדוגמה, אם XrDepthSwapchainCreateInfoANDROID ::resolutionהואXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID, תמונות העומק יהיו בגודל2*160*160*sizeof(float). - הערך של
rawDepthImageחייב להיותNULLאם XrDepthSwapchainCreateInfoANDROID ::createFlagsלא כלל אתXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID. - הערך של
rawDepthConfidenceImageחייב להיותNULLאם XrDepthSwapchainCreateInfoANDROID ::createFlagsלא כלל אתXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID. - הערך של
smoothDepthImageחייב להיותNULLאם XrDepthSwapchainCreateInfoANDROID ::createFlagsלא כלל אתXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID. - הערך של
smoothDepthImageחייב להיותNULLאם XrDepthSwapchainCreateInfoANDROID ::createFlagsלא כלל אתXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrDepthSwapchainImageANDROID -
typeחייב להיותXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
הפונקציה xrAcquireDepthSwapchainImagesANDROID מוגדרת כך:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
תיאורי פרמטרים
-
depthSwapchainהוא נקודת אחיזה של XrDepthSwapchainANDROID לתמונת העומק. -
acquireInfoהוא XrDepthAcquireInfoANDROID שמכיל מידע על האופן שבו אפשר לקבל את תמונת העומק. -
acquireResultהוא הערך המוחזר של XrDepthAcquireResultANDROID שמכיל מידע על תמונת העומק שנרכשה.
אפליקציות יכולות להשתמש בפונקציה xrAcquireDepthSwapchainImagesANDROID כדי לקבל את האינדקס העדכני ביותר של תמונת swapchain, כלומר XrDepthAcquireResultANDROID :: acquiredIndex , לתוך המערך XrDepthSwapchainImageANDROID שמופיע ב-xrEnumerateDepthSwapchainImagesANDROID . האובייקט XrDepthAcquireResultANDROID שמוחזר מכיל גם מידע אחר, כמו שדה הראייה והתנוחה, שנדרשים כדי לפרש את נתוני העומק. אפשר לקרוא בבטחה מהמשבצת שנרכשה במערך התמונות עד לקריאה הבאה ל-xrAcquireDepthSwapchainImagesANDROID .
אסור שתהיה יותר מקריאה אחת ל-xrAcquireDepthSwapchainImagesANDROID בין כל זוג של קריאות תואמות ל-xrBeginFrame ול-xrEndFrame בסשן.
- יכול להיות שזמן הריצה ייחסם אם זמן הריצה עדיין משתמש בתמונות של שרשרת החלפה שנרכשו בעבר.
- זמן הריצה חייב להחזיר את הערך
XR_ERROR_CALL_ORDER_INVALIDאם הפונקציה xrAcquireDepthSwapchainImagesANDROID נקראת לפני xrBeginFrame או אחרי xrEndFrame . - סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_LIMIT_REACHEDאם הפונקציה xrAcquireDepthSwapchainImagesANDROID נקראת יותר מפעם אחת בכל פריים – כלומר בסשן פעיל, אחרי קריאה לפונקציה xrBeginFrame שלא משויכת לפונקציה xrEndFrame. - יכול להיות שזמן הריצה יחזיר את הערך
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDאם נתוני העומק של הסביבה עדיין לא זמינים. במקרה כזה, האפליקציה צריכה להפעיל שוב את xrAcquireDepthSwapchainImagesANDROID בפריים מאוחר יותר.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שקוראים ל-xrAcquireDepthSwapchainImagesANDROID -
depthSwapchainחייב להיות נקודת אחיזה תקינה של XrDepthSwapchainANDROID -
acquireInfoחייב להיות מצביע למבנה XrDepthAcquireInfoANDROID תקין -
acquireResultחייב להיות מצביע למבנה XrDepthAcquireResultANDROID
קודי החזרה
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
המבנה של XrDepthAcquireInfoANDROID מוגדר כך:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
spaceהוא XrSpace שמגדיר את מסגרת הייחוס של התנוחה שמוחזרת ב-XrDepthAcquireResultANDROID ::views. -
displayTimeהואXrTimeשמציין את הזמן ששימש לחישוב התנוחה של התנוחה שהוחזרה ב-XrDepthAcquireResultANDROID ::views. האפליקציות צריכות להעביר את זמן התצוגה החזוי של הפריים הנוכחי.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrDepthAcquireInfoANDROID -
typeחייב להיותXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
spaceחייב להיות כינוי תקין ב-XrSpace
המבנה של XrDepthAcquireResultANDROID מוגדר כך:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
acquiredIndexהוא האינדקס של הטקסטורה שנרכשה במערך XrDepthSwapchainImageANDROID שמופיע ב-xrEnumerateDepthSwapchainImagesANDROID . -
exposureTimestampהואXrTimeשמציין את השעה שבה מפת העומק צולמה. -
viewsהוא מערך של שני XrDepthViewANDROID , אחד לכל עין, כאשר אינדקס 0 הוא העין השמאלית ואינדקס 1 הוא העין הימנית.
שימוש תקין (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrDepthAcquireResultANDROID -
typeחייב להיותXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים - כל רכיב נתון של
viewsחייב להיות מבנה XrDepthViewANDROID תקין
המבנה של XrDepthViewANDROID מוגדר כך:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים. מבנים כאלה לא מוגדרים ב-OpenXR או בתוסף הזה. -
fovהוא XrFovf שמציין את שדה הראייה ששימש ליצירת התצוגה הזו. התצוגה אף פעם לא מתהפכת אופקית או אנכית. -
poseהוא XrPosef שמציין את התנוחה שממנה רונדרה מפת העומק. מסגרת הייחוס מצוינת ב-XrDepthAcquireInfoANDROID .
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
XR_ANDROID_depth_textureלפני שמשתמשים ב-XrDepthViewANDROID -
typeחייב להיותXR_TYPE_DEPTH_VIEW_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
קוד לדוגמה למעקב אחר עומק הגלילה
הקוד לדוגמה הבא ממחיש איך לקבל תמונות עומק ולהשתמש בערכי עומק כדי למפות קואורדינטות של תמונת עומק למרחב הבמה.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
float tanf(float);
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time
};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below shows how to find the stageSpace position of
// the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
סוגי אובייקטים חדשים
פקודות חדשות
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
מבנים חדשים
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
הרחבת XrSystemProperties :
ערכי Enums חדשים
מסכות סיביות חדשות
קבועי Enum חדשים
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONהרחבה של XrObjectType :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
הרחבת XrResult :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
הרחבה של XrStructureType :
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
בעיות
היסטוריית הגרסאות
גרסה 1, 09.09.2024 (Levana Chen)
- תיאור התוסף הראשוני