ردیابی حاشیهنویسی فضایی XR_ANDROID
رشته نام
XR_ANDROID_spatial_annotation_tracking
نوع افزونه
افزونه نمونه
شماره داخلی ثبت شده
۷۹۵ عدد
بازنگری
۱
وضعیت تصویب
تصویب نشده
وابستگیهای افزونه و نسخه
XR_EXT_spatial_entity
و
XR_EXT_spatial_image_tracking
آخرین تاریخ اصلاح
۲۰۲۶-۰۱-۱۲
وضعیت آیپی
هیچ ادعای مالکیت معنوی شناختهشدهای وجود ندارد.
مشارکتکنندگان
لوانا چن، گوگل
کریستوفر فیل، گوگل
مارتین ساندرمایر، گوگل
دیوید جوزف تان، گوگل
جارد فایندر، گوگل
نیهاو جین، گوگل
نمای کلی
این افزونه قابلیت ردیابی حاشیهنویسی را برای افزونه XR_EXT_spatial_entity فراهم میکند تا حاشیهنویسیهای مختلف در صحنه را ردیابی کند. این افزونه به برنامهها امکان میدهد تا روی اشیاء فیزیکی یا مجازی تعریفشده توسط ارجاعات زمان اجرا، پوششهایی قرار دهند.
این افزونه یک نوع حاشیهنویسی پایه "Quad" ارائه میدهد که یک چندضلعی است که دقیقاً ۴ ضلع دارد، یعنی چهارضلعی محدب، که یک جعبه محدودکننده دوبعدی تعمیمیافته را در یک مرجع زمان اجرا نشان میدهد. یک حاشیهنویسی چهارگانه ردیابیشده به عنوان یک موجودیت مکانی با (یا "دارای") اجزای زیر نمایش داده میشود:
-
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
برنامهها معمولاً میتوانند از افزونه ردیابی حاشیهنویسی مکانی در الگوهای زیر استفاده کنند:
- یک برنامه ابتدا یک هندل از XrSpatialReferenceCacheANDROID ایجاد میکند که شروع به ضبط ارجاعات زمان اجرا از منبع داده شده میکند.
- سپس برنامه یک ارجاع زمان اجرا از XrSpatialReferenceImageEXT را ضبط میکند و یک حاشیهنویسی دلخواه را درون ارجاع در طول بازه زمانی حافظه پنهان ارجاع تعریف میکند.
- سپس برنامه یک دستگیره XrSpatialContextEXT بر اساس XrSpatialReferenceImageEXT ارائه شده توسط XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ایجاد میکند.
- برنامه میتواند هندل XrSpatialReferenceCacheANDROID را از بین ببرد تا ضبط ارجاعات زمان اجرا را متوقف کند و مصرف حافظه را کاهش دهد، یا منتظر رویداد
XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDبماند تا نتیجه مقداردهی اولیه را تأیید کند. - سپس برنامه رویداد
XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDرا برای تأیید نتیجه مقداردهی اولیه حاشیهنویسی دریافت میکند. - اگر مقداردهی اولیه موفقیتآمیز باشد، برنامه میتواند رویداد
XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTرا برای ردیابی حاشیهنویسی دریافت کند. - اگر مقداردهی اولیه با شکست مواجه شود، برنامه میتواند از کد خطای برگردانده شده در رویداد برای تعیین دلیل شکست استفاده کند و دسته XrSpatialContextEXT موجود را برای شروع یک حاشیهنویسی جدید از بین ببرد.
- صرف نظر از نتیجه مقداردهی اولیه، برنامه میتواند پس از دریافت رویداد، بافر تصویر را آزاد کند تا میزان استفاده از حافظه کاهش یابد.
- این برنامه، حاشیهنویسیها را بر اساس الگوهای دسترسی به موجودیتهای مکانی کشف و پرسوجو میکند.
- برنامه میتواند یک هندل XrSpatialContextEXT اضافی ایجاد کند تا حاشیهنویسیهای درون یک ارجاع جدید را در طول بازه زمانی یک XrSpatialReferenceCacheANDROID معتبر ردیابی کند.
- این برنامه میتواند دستگیرههای XrSpatialContextEXT را از بین ببرد تا مجموعه حاشیهنویسیهای قابل تشخیص و قابل ردیابی را به صورت پویا در زمان اجرا کاهش دهد.
پشتیبانی زمان اجرا
یک زمان اجرا باید با ذکر قابلیت زیر، پشتیبانی خود را از قابلیت ردیابی حاشیهنویسی با استفاده از xrEnumerateSpatialCapabilitiesEXT اعلام کند:
-
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
وقتی زمان اجرا از قابلیت ردیابی حاشیهنویسی پشتیبانی میکند:
- باید حداقل از یک جزء حاشیهنویسی پشتیبانی کند، که این کار با فهرست کردن اجزای حاشیهنویسی پشتیبانیشده از طریق xrEnumerateSpatialCapabilityComponentTypesEXT امکانپذیر است.
- باید حداقل از یکی از XrSpatialReferenceImageFormatEXT پشتیبانی کند، که این کار با فهرست کردن فرمتهای مرجع پشتیبانیشده از طریق xrEnumerateSpatialReferenceImageFormatsEXT و تنظیم
capabilityXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDانجام میشود. - باید حداقل از یکی از XrSpatialAnnotationReferenceSourceANDROID پشتیبانی کند، که این کار با فهرست کردن منابع مرجع پشتیبانی شده از طریق xrEnumerateSpatialAnnotationReferenceSourcesANDROID با تنظیم
capabilityXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDانجام میشود.
تابع xrEnumerateSpatialAnnotationReferenceSourcesANDROID به صورت زیر تعریف شده است:
XrResult xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t sourceCapacityInput,
uint32_t* sourceCountOutput,
XrSpatialAnnotationReferenceSourceANDROID* sources);
توضیحات پارامتر
-
instanceیک هندل برای XrInstance است. -
systemIdهمانXrSystemIdاست که منابع مرجع آن شمارش خواهند شد. -
capability، XrSpatialCapabilityEXT است که منابع مرجع برای آن شمارش خواهند شد. -
sourceCapacityInputظرفیت آرایهsourcesاست، یا عدد ۰ نشاندهندهی درخواستی برای بازیابی ظرفیت مورد نیاز است. -
sourceCountOutputتعداد منابع یا ظرفیت مورد نیاز در صورتی است کهsourceCapacityInputکافی نباشد. -
sourcesآرایهای از XrSpatialAnnotationReferenceSourceANDROID است. اگرsourceCapacityInputبرابر با ۰ باشد، میتواندNULLباشد. - برای توضیحات مفصل در مورد بازیابی اندازه
sourcesمورد نیاز، به بخش پارامترهای اندازه بافر مراجعه کنید.
برنامه میتواند فهرست منابع مرجع پشتیبانیشده توسط یک XrSystemId مشخص را با استفاده از xrEnumerateSpatialAnnotationReferenceSourcesANDROID بشمارد.
زمان اجرا نباید منابع مرجعی را که instance پسوند آنها فعال نیست، فهرست کند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از فراخوانی xrEnumerateSpatialAnnotationReferenceSourcesANDROID فعال شود. -
instanceباید یک شناسه معتبر XrInstance باشد. -
capabilityباید یک مقدار معتبر XrSpatialCapabilityEXT باشد. -
sourceCountOutputباید یک اشارهگر به مقدارuint32_tباشد. - اگر
sourceCapacityInputبرابر با0نباشد،sourcesباید اشارهگری به آرایهای از مقادیرsourceCapacityInputXrSpatialAnnotationReferenceSourceANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_VALIDATION_FAILURE
typedef enum XrSpatialAnnotationReferenceSourceANDROID {
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID = 0,
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MEDIA_PROJECTION_ANDROID = 1,
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialAnnotationReferenceSourceANDROID;
شمارش XrSpatialAnnotationReferenceSourceANDROID منبع مرجعی را توصیف میکند که فرادادههای یک حاشیهنویسی را فراهم میکند.
enum ها معانی زیر را دارند:
توضیحات شمارشی
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID
تصویر مرجع، یک تصویر برشنخورده خروجی از یک API دوربین اندروید است، مثلاً تصویری از یک ImageReader مرتبط با Camera2 CameraDevice یا یک ImageProxy از یک ImageAnalysis مرتبط با CameraX. این معمولاً یکی از دوربینهای RGB رو به جلو است.
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MEDIA_PROJECTION_ANDROID
تصویر مرجع، یک خروجی تصویر برشنخورده از API اندروید MediaProjection است، مثلاً تصویری از یک ImageReader مرتبط با یک نمایشگر مجازی MediaProjection. این تصویر میتواند شامل محتوای مجازی و واقعی باشد.
ساختار XrSystemSpatialAnnotationPropertiesANDROID به صورت زیر تعریف شده است:
typedef struct XrSystemSpatialAnnotationPropertiesANDROID {
XrStructureType type;
void* next;
uint32_t referenceCacheTimespan;
uint32_t maxReferencePixelWidth;
uint32_t maxReferencePixelHeight;
uint32_t maxReferenceCount;
uint32_t maxAnnotationCount;
} XrSystemSpatialAnnotationPropertiesANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
referenceCacheTimespanنشان دهندهی بازه زمانی بر حسب ثانیه از یک هندل معتبر XrSpatialReferenceCacheANDROID است. -
maxReferencePixelWidthحداکثر عرض لبه تصاویر مرجع را بر حسب پیکسل نشان میدهد. -
maxReferencePixelHeightحداکثر ارتفاع لبه تصاویر مرجع را بر حسب پیکسل نشان میدهد. -
maxReferenceCountحداکثر تعداد تصاویر مرجعی را که همزمان اختصاص داده میشوند، نشان میدهد. -
maxAnnotationCountحداکثر تعداد حاشیهنویسیهایی را که باید همزمان ردیابی شوند، نشان میدهد.
وقتی زمان اجرا از قابلیت ردیابی حاشیهنویسی پشتیبانی میکند، یک برنامه میتواند با اتصال ساختار XrSystemSpatialAnnotationPropertiesANDROID به XrSystemProperties هنگام فراخوانی xrGetSystemProperties، ویژگیهای سیستم مربوطه را بررسی کند.
اگر XrSpatialReferenceImageEXT :: width از XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference از maxReferencePixelWidth بیشتر شود، زمان اجرا باید هنگام فراخوانی xrCreateSpatialContextAsyncEXT، XR_ERROR_VALIDATION_FAILURE برگرداند.
اگر XrSpatialReferenceImageEXT :: height from XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference از maxReferencePixelHeight بیشتر شود، زمان اجرا باید هنگام فراخوانی xrCreateSpatialContextAsyncEXT، XR_ERROR_VALIDATION_FAILURE را برگرداند.
اگر time XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: خارج از بازه زمانی XrSpatialReferenceCacheANDROID :: cache باشد، زمان اجرا باید هنگام فراخوانی xrCreateSpatialContextAsyncEXT XR_ERROR_TIME_INVALID را برگرداند. برنامه میتواند دسته XrSpatialContextEXT را با یک ارجاع جدید در بازه زمانی XrSpatialReferenceCacheANDROID بازسازی کند.
اگر تعداد تصاویر مرجع اختصاص داده شده maxReferenceCount بیشتر شود، زمان اجرا باید XR_ERROR_LIMIT_REACHED برگرداند و از طریق XrEventDataSpatialAnnotationTrackingANDROID :: initializationResult شکست مقداردهی اولیه را نشان دهد. برنامه میتواند هندل XrSpatialContextEXT را از بین ببرد و پس از تکمیل مقداردهی اولیه در انتظار، دوباره امتحان کند.
اگر تعداد حاشیهنویسیهای فعال از maxAnnotationCount بیشتر شود، زمان اجرا باید هنگام فراخوانی xrCreateSpatialContextAsyncEXT XR_ERROR_VALIDATION_FAILURE را برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSystemSpatialAnnotationPropertiesANDROID فعال شود. -
typeبایدXR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد.
حافظه نهان مرجع زمان اجرا
XR_DEFINE_HANDLE(XrSpatialReferenceCacheANDROID)
هندل XrSpatialReferenceCacheANDROID نشاندهندهی یک حافظهی نهان (cache) از ارجاعات زمان اجرا است که از یک منبع مشخص ثبت شدهاند.
تابع xrCreateSpatialReferenceCacheAsyncANDROID به صورت زیر تعریف شده است:
XrResult xrCreateSpatialReferenceCacheAsyncANDROID(
XrSession session,
const XrSpatialReferenceCacheCreateInfoANDROID* createInfo,
XrFutureEXT* future);
توضیحات پارامتر
-
sessionیک XrSession است که در آن حافظه نهان مرجع فعال خواهد بود. -
createInfoیک اشارهگر به XrSpatialReferenceCacheCreateInfoANDROID است که برای تعیین پارامترهای حافظه نهان مرجع استفاده میشود. -
futureیک اشارهگر به خروجی یکXrFutureEXTاست.
برنامه میتواند با فراخوانی xrCreateSpatialReferenceCacheAsyncANDROID، یک هندل XrSpatialReferenceCacheANDROID ایجاد کند. ممکن است زمان اجرا برای مقداردهی اولیه سرویسهای ردیابی کمی طول بکشد. سپس برنامه میتواند xrCreateSpatialReferenceCacheCompleteANDROID را بارها و بارها فراخوانی کند تا تکمیل این عملیات ناهمزمان را بررسی کند.
اگر capability XrSpatialReferenceCacheCreateInfoANDROID :: توسط xrEnumerateSpatialCapabilitiesEXT فهرست نشده باشد، زمان اجرا باید XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT را برگرداند.
اگر source XrSpatialReferenceCacheCreateInfoANDROID :: توسط xrEnumerateSpatialAnnotationReferenceSourcesANDROID برای قابلیت داده شده فهرست نشده باشد، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED برگرداند.
برنامه فقط میتواند برای هر منبع و برای یک قابلیت مشخص، یک هندل ایجاد کند. در غیر این صورت، زمان اجرا باید XR_ERROR_LIMIT_REACHED برگرداند.
سپس برنامه میتواند ارجاعات زمان اجرا را در طول بازه زمانی هندل XrSpatialReferenceCacheANDROID ثبت کند تا یک هندل جدید XrSpatialContextEXT پیکربندی کند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از فراخوانی xrCreateSpatialReferenceCacheAsyncANDROID فعال شود. -
sessionباید یک دسته XrSession معتبر باشد -
createInfoباید یک اشارهگر به ساختار معتبر XrSpatialReferenceCacheCreateInfoANDROID باشد. -
futureباید اشارهگری به مقدارXrFutureEXTباشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT -
XR_ERROR_VALIDATION_FAILURE
ساختار XrSpatialReferenceCacheCreateInfoANDROID به صورت زیر تعریف شده است:
typedef struct XrSpatialReferenceCacheCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
XrSpatialAnnotationReferenceSourceANDROID source;
} XrSpatialReferenceCacheCreateInfoANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextباNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. چنین ساختارهایی در هسته OpenXR یا این افزونه تعریف نشدهاند. -
capability، یک XrSpatialCapabilityEXT است که توصیف میکند حافظه پنهان مرجع برای کدام قابلیت ایجاد شده است. -
sourceیک XrSpatialAnnotationReferenceSourceANDROID است که منبع حافظه نهان مرجع را توصیف میکند.
ساختار XrSpatialReferenceCacheCreateInfoANDROID اطلاعات لازم برای ایجاد یک هندل XrSpatialReferenceCacheANDROID را توصیف میکند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialReferenceCacheCreateInfoANDROID فعال شود. -
typeبایدXR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
capabilityباید یک مقدار معتبر XrSpatialCapabilityEXT باشد. -
sourceباید یک مقدار معتبر XrSpatialAnnotationReferenceSourceANDROID باشد.
تابع xrCreateSpatialReferenceCacheCompleteANDROID به صورت زیر تعریف شده است:
XrResult xrCreateSpatialReferenceCacheCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrCreateSpatialReferenceCacheCompletionANDROID* completion);
توضیحات پارامتر
-
sessionهمان XrSession است که قبلاً به xrCreateSpatialReferenceCacheAsyncANDROID ::sessionارسال شده است. -
futureهمانXrFutureEXTدریافتی از xrCreateSpatialReferenceCacheAsyncANDROID ::futureاست. -
completionیک اشارهگر به XrCreateSpatialReferenceCacheCompletionANDROID است.
برنامه میتواند xrCreateSpatialReferenceCacheCompleteANDROID را فراخوانی کند تا منتظر تکمیل عملیات ناهمزمان آغاز شده توسط xrCreateSpatialReferenceCacheAsyncANDROID بماند.
اگر future در حالت آماده نباشد، زمان اجرا باید XR_ERROR_FUTURE_PENDING_EXT برگرداند. اگر future قبلاً تکمیل یا لغو شده باشد، زمان اجرا باید XR_ERROR_FUTURE_INVALID_EXT را برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از فراخوانی xrCreateSpatialReferenceCacheCompleteANDROID فعال شود. -
sessionباید یک دسته XrSession معتبر باشد -
completionباید یک اشارهگر به ساختار XrCreateSpatialReferenceCacheCompletionANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_FUTURE_INVALID_EXT -
XR_ERROR_FUTURE_PENDING_EXT -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_VALIDATION_FAILURE
ساختار XrCreateSpatialReferenceCacheCompletionANDROID به صورت زیر تعریف میشود:
typedef struct XrCreateSpatialReferenceCacheCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialReferenceCacheANDROID referenceCache;
} XrCreateSpatialReferenceCacheCompletionANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextباNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. چنین ساختارهایی در هسته OpenXR یا این افزونه تعریف نشدهاند. -
futureResultXrResult مربوط به عملیات ایجاد حافظه پنهان مرجع است. - در صورت موفقیتآمیز بودن عملیات،
referenceCacheهمان هندل XrSpatialReferenceCacheANDROID است.
کدهای بازگشت آینده
مقادیر futureResult :
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_SESSION_LOST -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_LIMIT_REACHED
اگر futureResult یک کد موفقیتآمیز باشد، زمان اجرا باید یک هندل معتبر referenceCache برگرداند. اگر referenceCache معتبر باشد، فقط در طول عمر xrCreateSpatialReferenceCacheAsyncANDROID :: session یا تا زمانی که برنامه هندل را با xrDestroySpatialReferenceCacheANDROID از بین ببرد، هر کدام که زودتر اتفاق بیفتد، معتبر باقی میماند.
وقتی referenceCache معتبر باشد، حافظههای نهان را درون XrSystemSpatialAnnotationPropertiesANDROID :: referenceCacheTimespan ثبت میکند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrCreateSpatialReferenceCacheCompletionANDROID فعال شود. -
typeبایدXR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
futureResultباید یک مقدار معتبر XrResult باشد. -
referenceCacheباید یک شناسه معتبر XrSpatialReferenceCacheANDROID باشد.
تابع xrDestroySpatialReferenceCacheANDROID به صورت زیر تعریف میشود:
XrResult xrDestroySpatialReferenceCacheANDROID(
XrSpatialReferenceCacheANDROID cacheHandle);
توضیحات پارامتر
-
cacheHandleیک XrSpatialReferenceCacheANDROID است که قبلاً توسط xrCreateSpatialReferenceCacheAsyncANDROID ایجاد شده است.
برنامه میتواند تابع xrDestroySpatialReferenceCacheANDROID را فراخوانی کند تا پس از اتمام ایجاد زمینه مکانی، هندل cacheHandle و منابع زیرین را آزاد کند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از فراخوانی xrDestroySpatialReferenceCacheANDROID فعال شود. -
cacheHandleباید یک شناسه معتبر XrSpatialReferenceCacheANDROID باشد.
ایمنی رزوه
- دسترسی به
cacheHandleو هر handler فرزندی باید به صورت خارجی هماهنگسازی شود.
کدهای بازگشت
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID
پیکربندی
ساختار XrSpatialCapabilityConfigurationAnnotationTrackingANDROID به صورت زیر تعریف میشود:
typedef struct XrSpatialCapabilityConfigurationAnnotationTrackingANDROID {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialReferenceCacheANDROID cache;
XrTime time;
XrSpatialReferenceImageEXT reference;
} XrSpatialCapabilityConfigurationAnnotationTrackingANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
capabilityیک XrSpatialCapabilityEXT است و بایدXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDباشد. -
enabledComponentCountیکuint32_tاست که تعداد عناصر موجود در آرایهenabledComponentsرا توصیف میکند. -
enabledComponentsیک اشارهگر به آرایهای از XrSpatialComponentTypeEXT است. -
cacheیک XrSpatialReferenceCacheANDROID است که قبلاً برای ثبت ارجاعات زمان اجرا برای پیکربندیreferenceایجاد شده است. -
time،XrTimeاست که در آنreferenceثبت میشود. -
referenceیک XrSpatialReferenceImageEXT است که حاشیهنویسیهای آن به اشارهگر بعدیاش زنجیر شدهاند.
برنامهها میتوانند قابلیت مکانی XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID را با اضافه کردن یک اشارهگر به ساختار XrSpatialCapabilityConfigurationAnnotationTrackingANDROID در XrSpatialContextCreateInfoEXT :: capabilityConfigs فعال کنند.
اگر capability XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID نباشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
اگر reference حاوی هیچ حاشیهنویسی نباشد، زمان اجرا باید XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT را برگرداند.
اگر کامپوننت annotation در enabledComponents فهرست شده باشد اما هیچ annotation متناظری با reference مرتبط نشده باشد، زمان اجرا باید XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT را برگرداند.
اگر cache متعلق به همان XrSession ارسالی به xrCreateSpatialContextAsyncEXT نباشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
اگر time خارج از بازه زمانی cache باشد، زمان اجرا باید XR_ERROR_TIME_INVALID برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialCapabilityConfigurationAnnotationTrackingANDROID فعال شود. -
typeبایدXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
capabilityباید یک مقدار معتبر XrSpatialCapabilityEXT باشد. -
enabledComponentsباید اشارهگری به آرایهای ازenabledComponentCountبا مقادیر معتبر XrSpatialComponentTypeEXT باشد. -
cacheباید یک شناسه معتبر XrSpatialReferenceCacheANDROID باشد. -
referenceباید یک ساختار معتبر XrSpatialReferenceImageEXT باشد - پارامتر
enabledComponentCountباید بزرگتر از0باشد.
رویدادهای ردیابی حاشیهنویسی
ساختار XrEventDataSpatialAnnotationTrackingANDROID به صورت زیر تعریف شده است:
typedef struct XrEventDataSpatialAnnotationTrackingANDROID {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
uint32_t annotationIndex;
XrResult initializationResult;
} XrEventDataSpatialAnnotationTrackingANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
spatialContextهمان XrSpatialContextEXT است که ردیابی حاشیهنویسی برای آن فعال شده است. -
annotationIndexبه اندیس آرایه annotation مرتبط با XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::referenceمیکند. -
initializationResultنتیجهی مقداردهی اولیهی حاشیهنویسی (annotation) برابرXR_SUCCESSنیست. برنامه میتواند دستگیرهی XrSpatialContextEXT را از بین ببرد و دوباره ایجاد کند تا حاشیهنویسی را دوباره مقداردهی اولیه کند، یا به استفاده ازspatialContextبرای ردیابی سایر حاشیهنویسیها ادامه دهد.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrEventDataSpatialAnnotationTrackingANDROID فعال شود. -
typeبایدXR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد.
زمان اجرا باید برای هر حاشیهنویسی، XrEventDataSpatialAnnotationTrackingANDROID را پر کند تا تکمیل مقداردهی اولیه آن را نشان دهد. صرف نظر از نتیجه مقداردهی اولیه، برنامه میتواند پس از دریافت رویداد، بافر تصویر را آزاد کند تا استفاده از حافظه کاهش یابد.
اگر حاشیهنویسی با موفقیت مقداردهی اولیه شود، زمان اجرا باید مقداردهی initializationResult با XR_SUCCESS پر کند. سپس برنامه میتواند رویداد XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT را برای ردیابی حاشیهنویسی دریافت کند.
در غیر این صورت، زمان اجرا باید مقداردهی initializationResult را با یک کد خطای مناسب پر کند تا دلیل شکست را نشان دهد. برنامه میتواند دستهی XrSpatialContextEXT را از بین ببرد تا یک حاشیهنویسی جدید شروع شود یا به استفاده از spatialContext برای ردیابی سایر حاشیهنویسیها ادامه دهد.
حاشیهنویسی چهارگانه
یک زمان اجرا باید با استفاده از xrEnumerateSpatialCapabilityComponentTypesEXT و با ذکر نوع کامپوننت زیر، پشتیبانی خود را از حاشیهنویسیهای چهارگانه اعلام کند:
-
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
مرجع چهارگانه
ساختار XrSpatialAnnotationQuadReferenceANDROID به صورت زیر تعریف میشود:
typedef struct XrSpatialAnnotationQuadReferenceANDROID {
XrStructureType type;
const void* next;
uint32_t quadCount;
const XrSpatialAnnotationQuadANDROID* quads;
} XrSpatialAnnotationQuadReferenceANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
quadCountیکuint32_tاست که تعداد عناصر موجود در آرایهquadsرا توصیف میکند. -
quadsاشارهگری به آرایهای از XrSpatialAnnotationQuadANDROID است.
وقتی زمان اجرا از حاشیهنویسیهای چهارگانه پشتیبانی میکند، یک برنامه میتواند با زنجیر کردن ساختار XrSpatialAnnotationQuadReferenceANDROID به XrSpatialReferenceImageEXT :: next ، حاشیهنویسیها را پیکربندی کند و هنگام ایجاد هندل XrSpatialContextEXT ، reference را در مرجع XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: تنظیم کند.
اگر quadCount برابر با ۰ باشد، زمان اجرا باید XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT از xrCreateSpatialContextAsyncEXT برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialAnnotationQuadReferenceANDROID فعال شود. -
typeبایدXR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
quadsباید اشارهگری به آرایهای ازquadCountبا ساختارهای معتبر XrSpatialAnnotationQuadANDROID باشند. - پارامتر
quadCountباید بزرگتر از0باشد.
ساختار XrSpatialAnnotationQuadANDROID به صورت زیر تعریف میشود:
typedef struct XrSpatialAnnotationQuadANDROID {
XrSpatialAnnotationQuadAlignmentANDROID alignment;
XrVector2f upperLeft;
XrVector2f upperRight;
XrVector2f lowerRight;
XrVector2f lowerLeft;
} XrSpatialAnnotationQuadANDROID;
توضیحات اعضا
-
alignment، XrSpatialAnnotationQuadAlignmentANDROID مربوط به چهارضلعی است. -
upperLeftیک XrVector2f است که مختصات گوشه بالا سمت چپ چهارضلعی مربوط به مبدا را توصیف میکند. -
upperRightیک XrVector2f است که مختصات گوشه سمت راست بالای چهارضلعی مربوط به مبدا را توصیف میکند. -
lowerRightیک XrVector2f است که مختصات گوشه پایین سمت راست چهارضلعی مربوط به مبدا را توصیف میکند. -
lowerLeftیک XrVector2f است که مختصات گوشه پایین سمت چپ چهارضلعی مربوط به مبدا را توصیف میکند.
یک چهارضلعی در فضای دوبعدی، یک چهارضلعی محدب با ترتیب عقربههای ساعت است. مقدار ۴ گوشه به مبدأ (۰، ۰) که چهارضلعی به آن مرتبط است، مربوط میشود.
- وقتی با XrSpatialReferenceImageEXT مرتبط باشد، مبدأ تصویر گوشه بالا سمت چپ تصویر است که در آن X به پیکسل در عرض و Y به پیکسل در ارتفاع نگاشت میشود.
- وقتی با XrSpatialAnnotationQuadDataANDROID مرتبط باشد، مبدأ توسط XrSpaceLocationData ::
poseمربوط به XrSpatialAnnotationQuadDataANDROID ::originنشان داده میشود.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialAnnotationQuadANDROID فعال شود. -
alignmentباید یک مقدار معتبر XrSpatialAnnotationQuadAlignmentANDROID باشد.
typedef enum XrSpatialAnnotationQuadAlignmentANDROID {
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SCREEN_ANDROID = 0,
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID = 1,
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialAnnotationQuadAlignmentANDROID;
شمارش XrSpatialAnnotationQuadAlignmentANDROID ترازبندی حاشیهنویسی چهارگانه را توصیف میکند.
enum ها معانی زیر را دارند:
توضیحات شمارشی
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SCREEN_ANDROID
کواد حاشیهنویسی موازی با صفحه نمایش است، در حالی که چرخش درون صفحهای آن به گرانش جهانی قفل شده است. خروجی به صورت یک جعبه مرزی منظم و قائم ظاهر میشود.
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID
چهارضلعی حاشیهنویسی مستقیماً به جسم متصل میشود و با ترازبندی تعریفشده در تصویر مرجع مطابقت دارد. خروجی یک چهارضلعی محدب است که شکل آن را برای مطابقت با پرسپکتیو جسم تنظیم میکند.
اجزای چهارگانه
ساختار XrSpatialAnnotationQuadDataANDROID به صورت زیر تعریف میشود:
typedef struct XrSpatialAnnotationQuadDataANDROID {
uint32_t annotationIndex;
XrSpaceLocationData origin;
XrSpatialAnnotationQuadANDROID quad;
} XrSpatialAnnotationQuadDataANDROID;
توضیحات اعضا
-
annotationIndexنگاشت اندیس به آرایه XrSpatialAnnotationQuadReferenceANDROID ::quadsمرتبط با مرجع ارسال شده توسط XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::referenceاست. -
originیک XrSpaceLocationData است که origin یک صفحه دوبعدی را که quad در آن ریشه دارد، توصیف میکند. زمان اجرا باید XrSpaceLocationData ::locationFlagsرا برای نشان دادن بیتهای معتبر origin position تنظیم کند. -
quadیک XrSpatialAnnotationQuadANDROID است که کواد را در فضای محلی نشان میدهد.originبرای تبدیل کواد به فضای پوز استفاده کنید.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialAnnotationQuadDataANDROID فعال شود. -
originباید یک ساختار XrSpaceLocationData معتبر باشد. -
quadباید یک ساختار XrSpatialAnnotationQuadANDROID معتبر باشد.
ساختار XrSpatialComponentAnnotationQuadListANDROID به صورت زیر تعریف شده است:
typedef struct XrSpatialComponentAnnotationQuadListANDROID {
XrStructureType type;
void* next;
uint32_t quadCount;
XrSpatialAnnotationQuadDataANDROID* quads;
} XrSpatialComponentAnnotationQuadListANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
quadCountیکuint32_tاست که تعداد عناصر موجود در آرایهquadsرا توصیف میکند. -
quadsآرایهای از XrSpatialAnnotationQuadDataANDROID است.
برنامه میتواند با اضافه کردن XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID در XrSpatialComponentDataQueryConditionEXT :: componentTypes و اضافه کردن XrSpatialComponentAnnotationQuadListANDROID به زنجیره اشارهگر بعدی XrSpatialComponentDataQueryResultEXT ، کامپوننت quad annotation مربوط به موجودیتهای مکانی در XrSpatialSnapshotEXT را جستجو کند.
اگر XrSpatialComponentAnnotationQuadListANDROID در زنجیره بعدی XrSpatialComponentDataQueryResultEXT :: next باشد، اما XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID در XrSpatialComponentDataQueryConditionEXT :: componentTypes گنجانده نشده باشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE از xrQuerySpatialComponentDataEXT بازگرداند.
اگر quadCount کمتر از XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput باشد، زمان اجرا باید XR_ERROR_SIZE_INSUFFICIENT از xrQuerySpatialComponentDataEXT برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_spatial_annotation_trackingباید قبل از استفاده از XrSpatialComponentAnnotationQuadListANDROID فعال شود. -
typeبایدXR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
quadsباید اشارهگری به آرایهای از ساختارهایquadCountXrSpatialAnnotationQuadDataANDROID باشند. - پارامتر
quadCountباید بزرگتر از0باشد.
کد مثال
بررسی پشتیبانی از زمان اجرا
کد مثال زیر نحوه بررسی پشتیبانی زمان اجرا از قابلیت ردیابی حاشیهنویسی را نشان میدهد.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
PFN_xrEnumerateSpatialCapabilitiesEXT xrEnumerateSpatialCapabilitiesEXT;
PFN_xrEnumerateSpatialAnnotationReferenceSourcesANDROID xrEnumerateSpatialAnnotationReferenceSourcesANDROID;
PFN_xrEnumerateSpatialReferenceImageFormatsEXT xrEnumerateSpatialReferenceImageFormatsEXT;
PFN_xrEnumerateSpatialCapabilityComponentTypesEXT xrEnumerateSpatialCapabilityComponentTypesEXT;
// Check spatial annotation tracking capability
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0,
&capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount,
&capabilityCount,
capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(),
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID) ==
capabilities.end()) {
// System does not support spatial annotation tracking.
return;
}
// Inspect system properties for annotation tracking variables
XrSystemSpatialAnnotationPropertiesANDROID annotationSystemProperties{
XR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &annotationSystemProperties,
.systemId = systemId};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (annotationSystemProperties.maxAnnotationCount == 0) {
// System does not support any active annotations.
return;
}
// Enumerate supported reference sources
uint32_t sourceCountOutput = 0;
XrSpatialAnnotationReferenceSourceANDROID desiredSource =
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID;
CHK_XR(xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
0, &sourceCountOutput, nullptr));
std::vector<XrSpatialAnnotationReferenceSourceANDROID> sources(sourceCountOutput);
CHK_XR(xrEnumerateSpatialAnnotationReferenceSourcesANDROID(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
sourceCountOutput, &sourceCountOutput, sources.data()));
if (std::find(sources.begin(), sources.end(), desiredSource) == sources.end()) {
// The desired source is not supported.
return;
}
// Enumerate supported reference image formats, provided by XR_EXT_spatial_image_tracking.
uint32_t formatCountOutput = 0;
XrSpatialReferenceImageFormatEXT desiredFormat =
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_YUV_420_888_EXT; // Or XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT for screenshot.
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID, 0,
&formatCountOutput, nullptr));
std::vector<XrSpatialReferenceImageFormatEXT> formats(formatCountOutput);
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
formats.size(), &formatCountOutput, formats.data()));
if (std::find(formats.begin(), formats.end(), desiredFormat) == formats.end()) {
// The desired format is not supported
return;
}
// Enumerate supported components for annotation tracking capability.
XrSpatialCapabilityComponentTypesEXT capabilityComponentTypes{
XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
&capabilityComponentTypes));
std::vector<XrSpatialComponentTypeEXT>
annotationTypes(capabilityComponentTypes.componentTypeCountOutput);
capabilityComponentTypes.componentTypeCapacityInput = annotationTypes.size();
capabilityComponentTypes.componentTypes = annotationTypes.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, systemId, XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
&capabilityComponentTypes));
// Check supported annotation components.
XrSpatialComponentTypeEXT desiredComponent =
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID;
const auto supportedComponent = [&annotationTypes](
XrSpatialComponentTypeEXT component) {
return std::find(annotationTypes.begin(), annotationTypes.end(), component) !=
annotationTypes.end();
};
if (!supportedComponent(desiredComponent)) {
// The desired annotation is not supported.
return;
}
پیکربندی حاشیهنویسی چهارگانه
کد مثال زیر نحوه پیکربندی حاشیهنویسی چهارگانه را نشان میدهد.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
PFN_xrCreateSpatialReferenceCacheAsyncANDROID xrCreateSpatialReferenceCacheAsyncANDROID;
PFN_xrCreateSpatialReferenceCacheCompleteANDROID xrCreateSpatialReferenceCacheCompleteANDROID;
PFN_xrDestroySpatialReferenceCacheANDROID xrDestroySpatialReferenceCacheANDROID;
PFN_xrCreateSpatialContextAsyncEXT xrCreateSpatialContextAsyncEXT;
PFN_xrCreateSpatialContextCompleteEXT xrCreateSpatialContextCompleteEXT;
void (*waitUntilReady)(XrFutureEXT);
XrSpatialReferenceImageFormatEXT desiredFormat;
XrSpatialAnnotationReferenceSourceANDROID desiredSource;
XrSpatialComponentTypeEXT desiredComponent;
// Create and start reference cache to prepare for capturing reference images.
XrSpatialReferenceCacheANDROID referenceCache;
XrSpatialReferenceCacheCreateInfoANDROID cacheCreateInfo{
.type = XR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROID,
.next = nullptr,
.capability = XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID,
.source = desiredSource,
};
XrFutureEXT cacheFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialReferenceCacheAsyncANDROID(session, &cacheCreateInfo, &cacheFuture));
waitUntilReady(cacheFuture);
XrCreateSpatialReferenceCacheCompletionANDROID cacheCompletion{
XR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROID};
CHK_XR(xrCreateSpatialReferenceCacheCompleteANDROID(session, cacheFuture,
&cacheCompletion));
if (cacheCompletion.futureResult != XR_SUCCESS) {
// Error, reference cache creation failed
return;
}
referenceCache = cacheCompletion.referenceCache;
// Create the reference image with quad annotations
// YUV 4:2:0 Planar:
// ----------------------
// | Y |Cb |Cr |
// ----------------------
XrSpatialReferenceImagePlaneEXT cameraImagePlanes[3];
// for each plane (0=Y, 1=U(cb), 2=V(Cr)) return by Image#getPlanes().
for (int i = 0; i < 3; ++i) {
cameraImagePlanes[i].buffer; // read from Plane#getBuffer().
cameraImagePlanes[i].bufferSize; // set each buffer size. Y = width * height (bytes); U = Y / 4 (bytes); V = Y / 4 (bytes).
cameraImagePlanes[i].rowStride; // read from Plane#getRowStride().
cameraImagePlanes[i].pixelStride; // read from Plane#getPixelStride().
}
XrSpatialReferenceImageEXT referenceImage{
XR_TYPE_SPATIAL_REFERENCE_IMAGE_EXT};
referenceImage.width = 640;
referenceImage.height = 480;
referenceImage.format = desiredFormat;
referenceImage.planeCount = 3;
referenceImage.planes = cameraImagePlanes;
XrSpatialAnnotationQuadANDROID
quad; // quad coordinates within the reference image.
quad.alignment = XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID;
// Set unnormalized pixel coordinates of 4 corners.
quad.upperLeft = {0.0, 0.0};
quad.upperRight = {0.0, 100.0};
quad.lowerRight = {100.0, 100.0};
quad.lowerLeft = {0.0, 100.0};
XrSpatialAnnotationQuadReferenceANDROID quadReference{
XR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROID};
quadReference.quads = &quad;
quadReference.quadCount = 1;
referenceImage.next = &quadReference;
// Create the spatial context with annotation configuration.
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
desiredComponent,
};
// Configure annotation tracking
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID annotationConfig{
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROID};
annotationConfig.capability =
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID;
annotationConfig.enabledComponentCount = enabledComponents.size();
annotationConfig.enabledComponents = enabledComponents.data();
annotationConfig.cache = referenceCache;
annotationConfig.time; // The time when this reference image is captured.
annotationConfig.reference = referenceImage;
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT *>
capabilityConfigs;
capabilityConfigs.push_back(
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT *>(
&annotationConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{
XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo,
&createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture,
&completion));
if (completion.futureResult != XR_SUCCESS) {
// Error, spatial context creation failed
return;
}
spatialContext = completion.spatialContext;
CHK_XR(xrDestroySpatialReferenceCacheANDROID(referenceCache));
}
حاشیهنویسیهای فعال را کشف کنید
کد مثال زیر نحوه کشف و پرس و جو از حاشیه نویسی ها را نشان می دهد.
XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrSpace localSpace; // previously initialized, e.g. from
// XR_REFERENCE_SPACE_TYPE_LOCAL
XrSpatialContextEXT spatialContext; // previously created
PFN_xrCreateSpatialDiscoverySnapshotAsyncEXT xrCreateSpatialDiscoverySnapshotAsyncEXT;
PFN_xrCreateSpatialDiscoverySnapshotCompleteEXT xrCreateSpatialDiscoverySnapshotCompleteEXT;
PFN_xrQuerySpatialComponentDataEXT xrQuerySpatialComponentDataEXT;
PFN_xrDestroySpatialSnapshotEXT xrDestroySpatialSnapshotEXT;
PFN_xrPollEvent xrPollEvent;
PFN_xrDestroySpatialContextEXT xrDestroySpatialContextEXT;
void (*waitUntilReady)(XrFutureEXT);
XrSpatialComponentTypeEXT desiredComponent; // e.g. XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
auto discoverAnnotations = [&](XrSpatialContextEXT spatialContext, XrTime time,
XrSpace baseSpace) {
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents{desiredComponent};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT discoveryFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(
spatialContext, &snapshotCreateInfo, &discoveryFuture));
waitUntilReady(discoveryFuture);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = baseSpace;
completionInfo.time = time;
completionInfo.future = discoveryFuture;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{
XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(
spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for desired annotation data, e.g. quad.
XrSpatialComponentTypeEXT componentsToQuery[] = {
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID};
XrSpatialComponentDataQueryConditionEXT queryCond{
XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = componentsToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{
XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond,
&queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(
queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(
queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialAnnotationQuadDataANDROID> quads(
queryResult.entityIdCountOutput);
XrSpatialComponentAnnotationQuadListANDROID quadList{
XR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROID};
quadList.quadCount = quads.size();
quadList.quads = quads.data();
queryResult.next = &quadList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond,
&queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
const XrSpatialAnnotationQuadDataANDROID ¤tQuad = quads[i];
// Rendering quad in the view.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// For every frame in frame loop
XrSpace space; // Application's play space.
XrFrameState frameState; // Previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROID: {
const XrEventDataSpatialAnnotationTrackingANDROID &eventdata =
*reinterpret_cast<XrEventDataSpatialAnnotationTrackingANDROID *>(
&event);
if (eventdata.initializationResult != XR_SUCCESS) {
// handle initialization failure.
// e.g. CHK_XR(xrDestroySpatialContextEXT(spatialContext));
}
break;
}
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT &eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT *>(
&event);
// Discover spatial entities for the context that we received the
// "discovery recommended" event for.
//discoverSpatialEntities(eventdata.spatialContext, time, space);
break;
}
}
}
// Finish frame loop
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
انواع شیء جدید
دستورات جدید
- xrCreateSpatialReferenceCacheAsyncANDROID
- xrCreateSpatialReferenceCacheCompleteANDROID
- xrDestroySpatialReferenceCacheANDROID
- xrEnumerateSpatialAnnotationReferenceSourcesANDROID
سازههای جدید
- تکمیل حافظه نهان مرجع مکانی XrCreateSpatialReferenceCacheANDROID
- ردیابی حاشیهنویسی مکانی XrEventDataANDROID
- XrSpatialAnnotationQuadANDROID
- XrSpatialAnnotationQuadDataANDROID
- XrSpatialCapabilityConfigurationAnnotationTrackingANDROID
- XrSpatialReferenceCacheایجاد اطلاعاتدروید
بسط XrSystemProperties :
Enum های جدید
ثابتهای شمارشی جدید
-
XR_ANDROID_SPATIAL_ANNOTATION_TRACKING_EXTENSION_NAME -
XR_ANDROID_spatial_annotation_tracking_SPEC_VERSION بسط XrObjectType :
-
XR_OBJECT_TYPE_SPATIAL_REFERENCE_CACHE_ANDROID
-
گسترش XrSpatialCapabilityEXT :
-
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
-
بسط XrSpatialComponentTypeEXT :
-
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
-
گسترش XrStructureType :
-
XR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROID -
XR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROID -
XR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROID -
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROID -
XR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROID -
XR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROID -
XR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROID
-
مسائل
تاریخچه نسخه
بازبینی 1، 17/09/2025 (لوانا چن)
- توضیحات اولیه افزونه