XR_ANDROID_depth_texture
מחרוזת שם
XR_ANDROID_depth_texture
סוג התוסף
הרחבת המכונה
מספר שלוחה רשום
703
Revision
1
סטטוס האישור
לא אושר
תלות בתוסף ובגרסה
תאריך השינוי האחרון
2024-09-11
סטטוס כתובת ה-IP
לא ידוע על תלונות על הפרת זכויות יוצרים שקשורות לכתובות 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חייב להיות מצביע למערך שלresolutionCapacityInputערכים מסוג XrDepthCameraResolutionANDROID
קודי החזרה
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
ה-enum 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;
תיאורים של ערכי enum
-
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הוא מצביע ל-handle שבו מוחזר XrDepthSwapchainANDROID שנוצר.
האפליקציה יכולה להשתמש בפונקציה xrCreateDepthSwapchainANDROID כדי ליצור שרשרת החלפה של עומק שמנהלת גם תמונות של עומק וגם תמונות של רמת הביטחון.
- סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_FEATURE_UNSUPPORTEDאם המערכת לא תומכת במעקב אחר עומק. - סביבת זמן הריצה חייבת להחזיר
XR_ERROR_PERMISSION_INSUFFICIENTאם ההרשאות הנדרשות לא ניתנו לאפליקציה שמבצעת את הקריאה. - סביבת זמן הריצה חייבת להחזיר את הערך
XR_ERROR_VALIDATION_FAILUREאם רזולוציית העומק שצוינה ב-XrDepthSwapchainCreateInfoANDROID לא נתמכת. - זמן הריצה צריך ליצור תמונות של רמת מהימנות העומק רק כשהביטים התואמים מוגדרים ל-
createInfoבזמן יצירת swapchain.
אפשר להשתמש בהמשך ב-handle של שרשרת ההחלפה של העומק שמוחזר בקריאות ל-API. חובה לשחרר את ה-handle של XrDepthSwapchainANDROID בסופו של דבר באמצעות הפונקציה xrDestroyDepthSwapchainANDROID.
שימוש תקף (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_depth_textureלפני הקריאה ל-xrCreateDepthSwapchainANDROID -
sessionחייב להיות מאחז XrSession תקין -
createInfomust be a pointer to a valid XrDepthSwapchainCreateInfoANDROID structure -
swapchainmust be a pointer to an XrDepthSwapchainANDROID handle
קודי החזרה
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_INVALID
גישה למרקמי עומק
הפונקציה 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 .
סביבת זמן הריצה חייבת להחזיר תמיד תוכן זהה של מאגרים מהספירה הזו למשך משך החיים של שרשרת ההחלפה.
שימוש תקף (משתמע)
- התוסף
XR_ANDROID_depth_textureחייב להיות מופעל לפני הקריאה ל-xrEnumerateDepthSwapchainImagesANDROID -
depthSwapchainחייב להיות ידית תקינה של XrDepthSwapchainANDROID -
depthImageCountOutputחייב להיות מצביע לערךuint32_t - אם
depthImageCapacityInputהוא לא0, depthImagesחייב להיות מצביע למערך שלdepthImageCapacityInputמבני XrDepthSwapchainImageANDROID
קודי החזרה
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או המצביע לתמונות של רמת מהימנות העומק המוחלקות עבור התצוגות השמאלית והימנית שהוקצו על ידי זמן הריצה.
הפוינטרים של מאגר התמונות יהיו תקפים רק במהלך משך החיים של ה-swapchain. אחרי שה-swapchain נהרס, המצביעים ייחשבו כ-dangling.
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 -
acquireInfomust be a pointer to a valid XrDepthAcquireInfoANDROID structure -
acquireResultmust be a pointer to an XrDepthAcquireResultANDROID structure
קודי החזרה
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 :
New Enums
מסיכות סיביות חדשות
New Enum Constants
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 (לבנה חן)
- תיאור ראשוני של התוסף