XR_ANDROID_spatial_annotation_tracking
নামের স্ট্রিং
XR_ANDROID_spatial_annotation_tracking
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
795
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_EXT_spatial_entity
এবং
XR_EXT_spatial_image_tracking
শেষবার পরিবর্তন করার তারিখ
2026-01-12
IP স্ট্যাটাস
IP সংক্রান্ত কোনও দাবি নেই।
কন্ট্রিবিউটর
Levana Chen, Google
Christopher Feil, Google
Martin Sundermeyer, Google
David Joseph Tan, Google
Jared Finder, Google
Nihav Jain, Google
এক নজরে
এই এক্সটেনশনটি দৃশ্যে বিভিন্ন অ্যানোটেশন ট্র্যাক করার জন্য XR_EXT_spatial_entity এক্সটেনশনের জন্য অ্যানোটেশন ট্র্যাকিং ক্ষমতা প্রদান করে। এটি রানটাইম রেফারেন্স দ্বারা সংজ্ঞায়িত ফিজিক্যাল বা ভার্চুয়াল অবজেক্টে ওভারলে রাখার জন্য অ্যাপ্লিকেশনগুলিকে সক্ষম করে।
এই এক্সটেনশনটি একটি প্রাথমিক অ্যানোটেশন টাইপ "কোয়াড" প্রদান করে, যা একটি বহুভুজ যার ঠিক ৪টি বাহু রয়েছে, অর্থাৎ উত্তল চতুর্ভুজ, যা রানটাইম রেফারেন্সের মধ্যে একটি সাধারণ 2D বাউন্ডিং বক্সকে উপস্থাপন করে। ট্র্যাক করা কোয়াড অ্যানোটেশনকে নিম্নলিখিত কম্পোনেন্ট সহ (বা "যেটিতে আছে") স্পেশিয়াল এন্টিটি হিসেবে দেখানো হয়:
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
অ্যাপ্লিকেশনগুলি সাধারণত নিম্নলিখিত প্যাটার্নে স্পেশিয়াল অ্যানোটেশন ট্র্যাকিং এক্সটেনশন ব্যবহার করতে পারে:
- একটি অ্যাপ্লিকেশন প্রথমে XrSpatialReferenceCacheANDROID-এর একটি হ্যান্ডেল তৈরি করে যা প্রদত্ত সোর্স থেকে রানটাইম রেফারেন্স রেকর্ড করা শুরু করে।
- অ্যাপ্লিকেশনটি তখন XrSpatialReferenceImageEXT-এর একটি রানটাইম রেফারেন্স ক্যাপচার করে এবং রেফারেন্স ক্যাশের সময়সীমার মধ্যে রেফারেন্সের মধ্যে একটি কাঙ্ক্ষিত অ্যানোটেশন সংজ্ঞায়িত করে।
- তারপর অ্যাপ্লিকেশনটি XrSpatialCapabilityConfigurationAnnotationTrackingANDROID দ্বারা প্রদত্ত XrSpatialReferenceImageEXT-এর উপর ভিত্তি করে একটি XrSpatialContextEXT হ্যান্ডেল তৈরি করে।
- অ্যাপ্লিকেশনটি মেমরির ব্যবহার কমাতে রানটাইম রেফারেন্স রেকর্ড করা বন্ধ করতে 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 হ্যান্ডেলটি ধ্বংস করতে পারে।
- ইনিশিয়ালাইজেশন ফলাফল যাই হোক না কেন, ইভেন্ট পাওয়ার পরে মেমরির ব্যবহার কমাতে অ্যাপ্লিকেশনটি ইমেজ বাফার রিলিজ করতে পারে।
- অ্যাপ্লিকেশনটি স্পেশিয়াল এন্টিটি অ্যাক্সেস প্যাটার্ন অনুযায়ী অ্যানোটেশন খুঁজে বের করে এবং কোয়েরি করে।
- অ্যাপ্লিকেশনটি সঠিক XrSpatialReferenceCacheANDROID-এর সময়সীমার মধ্যে নতুন রেফারেন্সে অ্যানোটেশন ট্র্যাক করার জন্য অতিরিক্ত XrSpatialContextEXT হ্যান্ডেল তৈরি করতে পারে।
- রানটাইমে শনাক্ত ও ট্র্যাক করা যায় এমন অ্যানোটেশনের সেট ডায়নামিকভাবে কমাতে, অ্যাপ্লিকেশনটি XrSpatialContextEXT হ্যান্ডেল ধ্বংস করতে পারে।
রানটাইম সংক্রান্ত সহায়তা
রানটাইমকে xrEnumerateSpatialCapabilitiesEXT ব্যবহার করে অ্যানোটেশন ট্র্যাকিং ক্ষমতার জন্য তার সাপোর্ট অবশ্যই বিজ্ঞাপন দিতে হবে, নিম্নলিখিত ক্ষমতা তালিকাভুক্ত করে:
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
রানটাইমে অ্যানোটেশন ট্র্যাকিংয়ের সুবিধা থাকলে:
- xrEnumerateSpatialCapabilityComponentTypesEXT-এর মাধ্যমে কাজ করে এমন অ্যানোটেশন কম্পোনেন্ট তালিকাভুক্ত করে, এটিতে কমপক্ষে একটি অ্যানোটেশন কম্পোনেন্ট থাকতেই হবে।
- এটিকে XrSpatialReferenceImageFormatEXT-এর মধ্যে অন্তত একটিকে সাপোর্ট করতেই হবে, xrEnumerateSpatialReferenceImageFormatsEXT-এর মাধ্যমে সাপোর্ট করা রেফারেন্স ফর্ম্যাট তালিকাভুক্ত করে, যেখানে
capability-কেXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID-এ সেট করা আছে। - এটি অবশ্যই XrSpatialAnnotationReferenceSourceANDROID-এর মধ্যে অন্তত একটিকে সাপোর্ট করবে, xrEnumerateSpatialAnnotationReferenceSourcesANDROID-এর মাধ্যমে সাপোর্ট করা রেফারেন্স সোর্স তালিকাভুক্ত করে, যেখানে
capability-এর সেটিংXR_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অ্যারের ক্যাপাসিটি, অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনার অনুরোধ জানাতে 0।sourceCountOutputহল সোর্সের সংখ্যা অথবাsourceCapacityInputপর্যাপ্ত না হলে প্রয়োজনীয় ক্যাপাসিটি।sourcesহল XrSpatialAnnotationReferenceSourceANDROID-এর একটি অ্যারে।sourceCapacityInput০ হলে এটিNULLহতে পারে।- প্রয়োজনীয়
sourcesসাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার বিভাগ দেখুন।
xrEnumerateSpatialAnnotationReferenceSourcesANDROID ব্যবহার করে, অ্যাপ্লিকেশনটি প্রদত্ত XrSystemId দ্বারা সমর্থিত রেফারেন্স সোর্সের তালিকা গণনা করতে পারে।
রানটাইম অবশ্যই সেইসব রেফারেন্স সোর্স গণনা করবে না যার এক্সটেনশন instance-এর জন্য চালু করা নেই।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrEnumerateSpatialAnnotationReferenceSourcesANDROID কল করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
instanceঅবশ্যই একটি সঠিক XrInstance হ্যান্ডেল হতে হবে -
capabilityঅবশ্যই একটি সঠিক XrSpatialCapabilityEXT ভ্যালু হতে হবে -
sourceCountOutputঅবশ্যইuint32_tভ্যালুর পয়েন্টার হতে হবে -
sourceCapacityInputযদি0না হয়, তাহলেsourcesঅবশ্যইsourceCapacityInputXrSpatialAnnotationReferenceSourceANDROID ভ্যালুর অ্যারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_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-এর অর্থ হল:
Enum-এর বিবরণ
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_CAMERA_ANDROID
রেফারেন্স ইমেজ হল Android ক্যামেরা API থেকে পাওয়া ক্রপ না করা ইমেজ আউটপুট, যেমন Camera2 CameraDevice-এর সাথে যুক্ত ImageReader থেকে পাওয়া ইমেজ অথবা CameraX-এর সাথে যুক্ত ImageAnalysis থেকে পাওয়া ImageProxy। এটি সাধারণত সামনের দিকে মুখ করে থাকা RGB ক্যামেরাগুলির মধ্যে একটি।
XR_SPATIAL_ANNOTATION_REFERENCE_SOURCE_MEDIA_PROJECTION_ANDROID
রেফারেন্স ইমেজ হল Android MediaProjection API থেকে পাওয়া ক্রপ না করা ইমেজ আউটপুট, যেমন MediaProjection ভার্চুয়াল ডিসপ্লের সাথে যুক্ত ImageReader থেকে পাওয়া ইমেজ। এর মধ্যে ভার্চুয়াল ও বাস্তব কন্টেন্ট থাকতে পারে।
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।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।referenceCacheTimespanএকটি সঠিক XrSpatialReferenceCacheANDROID হ্যান্ডেলের সেকেন্ডে টাইমস্প্যান নির্দেশ করে।maxReferencePixelWidthরেফারেন্স ইমেজের প্রান্তের সর্বাধিক প্রস্থ পিক্সেলে দেখায়।maxReferencePixelHeightরেফারেন্স ইমেজের প্রান্তের সর্বাধিক উচ্চতা পিক্সেলে দেখায়।maxReferenceCountএকই সময়ে বরাদ্দ করা রেফারেন্স ইমেজের সর্বাধিক সংখ্যা নির্দেশ করে।maxAnnotationCountএকই সময়ে ট্র্যাক করা অ্যানোটেশনের সর্বাধিক সংখ্যা নির্দেশ করে।
রানটাইম অ্যানোটেশন ট্র্যাকিং ক্ষমতাকে সাপোর্ট করলে, xrGetSystemProperties কল করার সময় XrSystemProperties-এ XrSystemSpatialAnnotationPropertiesANDROID স্ট্রাকচার চেইন করে, কোনও অ্যাপ্লিকেশন প্রাসঙ্গিক সিস্টেম প্রপার্টি চেক করতে পারে।
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference থেকে XrSpatialReferenceImageEXT :: width যদি maxReferencePixelWidth-এর থেকে বেশি হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference থেকে XrSpatialReferenceImageEXT :: height যদি maxReferencePixelHeight-এর থেকে বেশি হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: time যদি XrSpatialReferenceCacheANDROID :: cache -এর টাইমস্প্যানের বাইরে থাকে, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় রানটাইমকে XR_ERROR_TIME_INVALID রিটার্ন করতেই হবে। অ্যাপ্লিকেশনটি XrSpatialReferenceCacheANDROID-এর টাইমস্প্যান চলাকালীন নতুন রেফারেন্স সহ XrSpatialContextEXT হ্যান্ডেল আবার তৈরি করতে পারে।
অ্যাসাইন করা রেফারেন্স ইমেজের সংখ্যা maxReferenceCount-এর বেশি হলে, রানটাইমকে অবশ্যই XR_ERROR_LIMIT_REACHED রিটার্ন করতে হবে এবং XrEventDataSpatialAnnotationTrackingANDROID :: initializationResult-এর মাধ্যমে ইনিশিয়ালাইজেশন সংক্রান্ত সমস্যা দেখাতে হবে। অ্যাপ্লিকেশনটি XrSpatialContextEXT হ্যান্ডেলটি ধ্বংস করতে পারে এবং মুলতুবি থাকা ইনিশিয়ালাইজেশন সম্পূর্ণ হওয়ার পরে আবার চেষ্টা করতে পারে।
অ্যাক্টিভ অ্যানোটেশনের সংখ্যা maxAnnotationCount-এর বেশি হলে, xrCreateSpatialContextAsyncEXT কল করার সময় রানটাইম XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSystemSpatialAnnotationPropertiesANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
রানটাইম রেফারেন্স ক্যাশে
XR_DEFINE_HANDLE(XrSpatialReferenceCacheANDROID)
XrSpatialReferenceCacheANDROID হ্যান্ডেল, প্রদত্ত সোর্স থেকে রেকর্ড করা রানটাইম রেফারেন্সের ক্যাশে দেখায়।
xrCreateSpatialReferenceCacheAsyncANDROID ফাংশনটি এভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrCreateSpatialReferenceCacheAsyncANDROID(
XrSession session,
const XrSpatialReferenceCacheCreateInfoANDROID* createInfo,
XrFutureEXT* future);
প্যারামিটারের বিবরণ
sessionহল একটি XrSession যেখানে রেফারেন্স ক্যাশে অ্যাক্টিভ থাকবে।createInfoহল XrSpatialReferenceCacheCreateInfoANDROID-এর একটি পয়েন্টার যা রেফারেন্স ক্যাশে প্যারামিটার নির্দিষ্ট করতে ব্যবহার করা হয়।futureহলXrFutureEXT-এর আউটপুট হ্যান্ডেলের একটি পয়েন্টার।
অ্যাপ্লিকেশনটি xrCreateSpatialReferenceCacheAsyncANDROID কল করে একটি XrSpatialReferenceCacheANDROID হ্যান্ডেল তৈরি করতে পারে। ট্র্যাকিং পরিষেবা শুরু করতে রানটাইমের কিছুটা সময় লাগতে পারে। এই অ্যাসিঙ্ক্রোনাস অপারেশন সম্পূর্ণ হয়েছে কিনা তা চেক করতে, অ্যাপ্লিকেশনটি তারপরে বারবার xrCreateSpatialReferenceCacheCompleteANDROID কল করতে পারে।
xrEnumerateSpatialCapabilitiesEXT-এর মাধ্যমে XrSpatialReferenceCacheCreateInfoANDROID :: capability তালিকাভুক্ত না থাকলে, রানটাইমকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতেই হবে।
প্রদত্ত ক্ষমতার জন্য xrEnumerateSpatialAnnotationReferenceSourcesANDROID-এর মাধ্যমে XrSpatialReferenceCacheCreateInfoANDROID :: source তালিকাভুক্ত না থাকলে, রানটাইমকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতেই হবে।
অ্যাপ্লিকেশনটি প্রদত্ত ক্ষমতার জন্য সোর্স প্রতি শুধুমাত্র একটি হ্যান্ডেল তৈরি করতে পারে। অন্যথায়, রানটাইম অবশ্যই XR_ERROR_LIMIT_REACHED রিটার্ন করবে।
অ্যাপ্লিকেশনটি তখন নতুন XrSpatialContextEXT হ্যান্ডেল কনফিগার করার জন্য XrSpatialReferenceCacheANDROID হ্যান্ডেলের টাইমস্প্যান চলাকালীন রানটাইম রেফারেন্স ক্যাপচার করতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialReferenceCacheAsyncANDROID কল করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করা থাকতেই হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
createInfoঅবশ্যই একটি সঠিক XrSpatialReferenceCacheCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে -
futureঅবশ্যইXrFutureEXTভ্যালুর পয়েন্টার হতে হবে
রিটার্ন কোড
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_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_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 হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialReferenceCacheCreateInfoANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
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হল xrCreateSpatialReferenceCacheAsyncANDROID ::futureথেকে পাওয়াXrFutureEXT।completionহল XrCreateSpatialReferenceCacheCompletionANDROID-এর একটি পয়েন্টার।
xrCreateSpatialReferenceCacheAsyncANDROID দ্বারা শুরু করা অ্যাসিঙ্ক্রোনাস অপারেশন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে, অ্যাপ্লিকেশনটি xrCreateSpatialReferenceCacheCompleteANDROID কল করতে পারে।
future রেডি অবস্থায় না থাকলে রানটাইমকে XR_ERROR_FUTURE_PENDING_EXT রিটার্ন করতেই হবে। future আগে থেকেই সম্পূর্ণ বা বাতিল করা হয়ে থাকলে, রানটাইমকে XR_ERROR_FUTURE_INVALID_EXT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialReferenceCacheCompleteANDROID কল করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করতেই হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
completionঅবশ্যই XrCreateSpatialReferenceCacheCompletionANDROID স্ট্রাকচারের একটি পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialReferenceCacheCompletionANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrCreateSpatialReferenceCacheCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialReferenceCacheANDROID referenceCache;
} XrCreateSpatialReferenceCacheCompletionANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।futureResultহল রেফারেন্স ক্যাশে তৈরি করার অপারেশনের XrResult।- অপারেশন সফল হলে
referenceCacheহল XrSpatialReferenceCacheANDROID হ্যান্ডেল।
ভবিষ্যতের রিটার্ন কোড
futureResult ভ্যালু:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
futureResult যদি একটি সাকসেস কোড হয়, তাহলে রানটাইমকে অবশ্যই একটি সঠিক referenceCache হ্যান্ডেল রিটার্ন করতে হবে। referenceCache সঠিক হলে, এটি শুধুমাত্র xrCreateSpatialReferenceCacheAsyncANDROID :: session-এর লাইফটাইম পর্যন্ত অথবা অ্যাপ্লিকেশন xrDestroySpatialReferenceCacheANDROID-এর মাধ্যমে হ্যান্ডেল নষ্ট না করা পর্যন্ত সঠিক থাকে, যেটি আগে হয়।
referenceCache সঠিক হলে, এটি XrSystemSpatialAnnotationPropertiesANDROID :: referenceCacheTimespan-এর মধ্যে ক্যাশে রেকর্ড করে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrCreateSpatialReferenceCacheCompletionANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_CREATE_SPATIAL_REFERENCE_CACHE_COMPLETION_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
futureResultঅবশ্যই একটি সঠিক XrResult মান হতে হবে -
referenceCacheঅবশ্যই একটি সঠিক XrSpatialReferenceCacheANDROID হ্যান্ডেল হতে হবে
xrDestroySpatialReferenceCacheANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrDestroySpatialReferenceCacheANDROID(
XrSpatialReferenceCacheANDROID cacheHandle);
প্যারামিটারের বিবরণ
cacheHandleহল একটি XrSpatialReferenceCacheANDROID যা আগে xrCreateSpatialReferenceCacheAsyncANDROID দ্বারা তৈরি করা হয়েছে।
স্পেশিয়াল কনটেক্সট তৈরি করা হয়ে গেলে, cacheHandle হ্যান্ডেল ও অন্তর্নিহিত রিসোর্স রিলিজ করার জন্য অ্যাপ্লিকেশনটি xrDestroySpatialReferenceCacheANDROID ফাংশন কল করতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrDestroySpatialReferenceCacheANDROID কল করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
cacheHandleঅবশ্যই একটি সঠিক XrSpatialReferenceCacheANDROID হ্যান্ডেল হতে হবে
থ্রেড নিরাপত্তা
cacheHandleএবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
কনফিগারেশন
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।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।capabilityহল একটি XrSpatialCapabilityEXT এবং অবশ্যইXR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROIDহতে হবে।enabledComponentCountহল একটিuint32_tযাenabledComponentsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।enabledComponentsহল XrSpatialComponentTypeEXT-এর অ্যারের একটি পয়েন্টার।cacheহল একটি XrSpatialReferenceCacheANDROID যা আগেreferenceকনফিগারেশনের জন্য রানটাইম রেফারেন্স রেকর্ড করতে তৈরি করা হয়েছে।timeহলXrTime, যে সময়েreferenceক্যাপচার করা হয়েছে।referenceহল একটি XrSpatialReferenceImageEXT যার পরবর্তী পয়েন্টারে অ্যানোটেশন চেন করা আছে।
অ্যাপ্লিকেশন XrSpatialContextCreateInfoEXT :: capabilityConfigs -এ XrSpatialCapabilityConfigurationAnnotationTrackingANDROID স্ট্রাকচারে একটি পয়েন্টার যোগ করে XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID স্পেশিয়াল ক্ষমতা চালু করতে পারে।
capability যদি XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID না হয়, তাহলে রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
reference-এ কোনও অ্যানোটেশন না থাকলে রানটাইমকে XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT রিটার্ন করতেই হবে।
enabledComponents-এ অ্যানোটেশন কম্পোনেন্ট তালিকাভুক্ত থাকলে কিন্তু reference-এর সাথে কোনও সংশ্লিষ্ট অ্যানোটেশন যুক্ত না থাকলে, রানটাইমকে XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT রিটার্ন করতেই হবে।
xrCreateSpatialContextAsyncEXT-এ পাস করা একই XrSession-এর মালিকানায় cache না থাকলে, রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে।
time যদি cache-এর সময়সীমার বাইরে হয়, তাহলে রানটাইমকে অবশ্যই XR_ERROR_TIME_INVALID রিটার্ন করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
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।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।spatialContextহল XrSpatialContextEXT যার জন্য অ্যানোটেশন ট্র্যাকিং চালু করা হয়েছে।annotationIndexXrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::reference-এর সাথে যুক্ত অ্যানোটেশন অ্যারে থেকে ইনডেক্সে ম্যাপ করে।initializationResultঅ্যানোটেশনের ইনিশিয়ালাইজেশন ফলাফল দেখায়। এটিXR_SUCCESSনা হলে, অ্যাপ্লিকেশনটি অ্যানোটেশন আবার শুরু করার জন্য XrSpatialContextEXT হ্যান্ডেলটি ধ্বংস করে আবার তৈরি করতে পারে, অথবা অন্যান্য অ্যানোটেশন ট্র্যাক করতেspatialContextব্যবহার করা চালিয়ে যেতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialAnnotationTrackingANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
রানটাইমকে প্রতিটি অ্যানোটেশনের জন্য XrEventDataSpatialAnnotationTrackingANDROID পপুলেট করতেই হবে যাতে এটির ইনিশিয়ালাইজেশন সম্পূর্ণ হয়েছে তা দেখানো যায়। ইনিশিয়ালাইজেশন ফলাফল যাই হোক না কেন, ইভেন্ট পাওয়ার পরে মেমরির ব্যবহার কমাতে অ্যাপ্লিকেশনটি ইমেজ বাফার রিলিজ করতে পারে।
অ্যানোটেশন সঠিকভাবে শুরু করা হলে, রানটাইম অবশ্যই XR_SUCCESS-এর সাথে initializationResult পপুলেট করবে। অ্যাপ্লিকেশনটি তখন অ্যানোটেশন ট্র্যাক করার জন্য 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।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।quadCountহল একটিuint32_tযাquadsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।quadsহল XrSpatialAnnotationQuadANDROID-এর অ্যারের পয়েন্টার।
রানটাইম কোয়াড অ্যানোটেশন সাপোর্ট করলে, কোনও অ্যাপ্লিকেশন XrSpatialReferenceImageEXT :: next -এ XrSpatialAnnotationQuadReferenceANDROID স্ট্রাকচার চেইন করে অ্যানোটেশন কনফিগার করতে পারে এবং XrSpatialContextEXT হ্যান্ডেল তৈরি করার সময় XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference -এ রেফারেন্স সেট করতে পারে।
quadCount যদি ০ হয়, তাহলে রানটাইমকে xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialAnnotationQuadReferenceANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
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 যা অরিজিনের সাথে সম্পর্কিত কোয়াডের নিচের বাঁদিকের কোণের কোঅর্ডিনেট বর্ণনা করে।
2D স্পেসে একটি চতুর্ভুজ হল ঘড়ির কাঁটার ক্রমে একটি উত্তল চতুর্ভুজ। ৪টি কোণের মান অরিজিনের (০, ০) সাথে সম্পর্কিত যার সাথে কোয়াড যুক্ত।
- এটি XrSpatialReferenceImageEXT-এর সাথে যুক্ত থাকলে, ছবির উপরের বাঁদিকের কোণ হল উৎস, যেখানে X প্রস্থের পিক্সেল এবং Y উচ্চতার পিক্সেল ম্যাপ করে।
- এটি XrSpatialAnnotationQuadDataANDROID-এর সাথে যুক্ত থাকলে, XrSpatialAnnotationQuadDataANDROID ::
origin-এর XrSpaceLocationData ::poseদ্বারা উৎস নির্দেশ করা হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialAnnotationQuadANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
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_SURFACE_ANDROID = 2,
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSpatialAnnotationQuadAlignmentANDROID;
XrSpatialAnnotationQuadAlignmentANDROID এনিউমারেশন কোয়াড অ্যানোটেশনের অ্যালাইনমেন্ট বর্ণনা করে।
enum-এর অর্থ হল:
Enum-এর বিবরণ
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SCREEN_ANDROID
অ্যানোটেশন কোয়াড স্ক্রিন প্লেনের সমান্তরাল, যখন এর ইন-প্লেন রোটেশন পৃথিবীর মাধ্যাকর্ষণে লক থাকে। আউটপুটটি একটি সাধারণ, সোজা বাউন্ডিং বক্স হিসেবে দেখা যায়।
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_OBJECT_ANDROID
অ্যানোটেশন কোয়াড সরাসরি অবজেক্টের সাথে অ্যাঙ্কর করা হয়, যা রেফারেন্স ইমেজে সংজ্ঞায়িত অ্যালাইনমেন্টের সাথে মেলে। আউটপুটটি একটি উত্তল চতুর্ভুজ, যা বস্তুর দৃষ্টিকোণের সাথে মিল রেখে এর আকৃতিকে অ্যাডজাস্ট করে।
XR_SPATIAL_ANNOTATION_QUAD_ALIGNMENT_SURFACE_ANDROID
ট্র্যাক করা টার্গেটটি একটি প্ল্যানার অবজেক্ট বা সারফেস বলে ধরে নিয়ে, অ্যানোটেশন কোয়াডটি অন্তর্নিহিত অবজেক্টের সারফেসের সাথে কোপ্ল্যানার হয়। আউটপুটটি অবজেক্টের ফিজিক্যাল জ্যামিতির সাথে নির্বিঘ্নে সারিবদ্ধ হয়, সেই নির্দিষ্ট সারফেসের বিপরীতে ফ্ল্যাট থাকার জন্য এর দৃষ্টিকোণকে অ্যাডজাস্ট করে।
কোয়াড কম্পোনেন্ট
XrSpatialAnnotationQuadDataANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialAnnotationQuadDataANDROID {
uint32_t annotationIndex;
XrSpaceLocationData origin;
XrSpatialAnnotationQuadANDROID quad;
} XrSpatialAnnotationQuadDataANDROID;
মেম্বারদের বিবরণ
annotationIndexহল XrSpatialAnnotationQuadReferenceANDROID ::quadsঅ্যারের সাথে ইন্ডেক্স ম্যাপিং যা XrSpatialCapabilityConfigurationAnnotationTrackingANDROID ::reference-এর মাধ্যমে পাস করা রেফারেন্সের সাথে যুক্ত।originহল একটি XrSpaceLocationData যা একটি 2D প্লেনের উৎপত্তি বর্ণনা করে যেখানে কোয়াডটি রুট করা হয়েছে। রানটাইমকে অবশ্যই XrSpaceLocationData ::locationFlagsসেট করতে হবে যাতে অরিজিন পোজের সঠিক বিট দেখানো যায়।quadহল একটি XrSpatialAnnotationQuadANDROID যা লোকাল স্পেসে কোয়াডকে উপস্থাপন করে। কোয়াডকে পোজ স্পেসে ট্রান্সফর্ম করতেoriginব্যবহার করুন।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialAnnotationQuadDataANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করতেই হবে -
originঅবশ্যই একটি সঠিক XrSpaceLocationData স্ট্রাকচার হতে হবে -
quadঅবশ্যই একটি সঠিক XrSpatialAnnotationQuadANDROID স্ট্রাকচার হতে হবে
XrSpatialComponentAnnotationQuadListANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialComponentAnnotationQuadListANDROID {
XrStructureType type;
void* next;
uint32_t quadCount;
XrSpatialAnnotationQuadDataANDROID* quads;
} XrSpatialComponentAnnotationQuadListANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।quadCountহল একটিuint32_tযাquadsঅ্যারেতে এলিমেন্টের সংখ্যা বর্ণনা করে।quadsহল XrSpatialAnnotationQuadDataANDROID-এর একটি অ্যারে।
অ্যাপ্লিকেশনটি XrSpatialSnapshotEXT-এ স্পেশিয়াল এন্টিটির কোয়াড অ্যানোটেশন কম্পোনেন্ট কোয়েরি করতে পারে, এর জন্য XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID যোগ করতে হবে এবং XrSpatialComponentDataQueryResultEXT-এর পরবর্তী পয়েন্টার চেনে XrSpatialComponentAnnotationQuadListANDROID যোগ করতে হবে।
XrSpatialComponentAnnotationQuadListANDROID যদি XrSpatialComponentDataQueryResultEXT :: next-এর পরবর্তী চেনে থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে :: next কিন্তু XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID, XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত নেই।
quadCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentAnnotationQuadListANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_annotation_trackingএক্সটেনশন চালু করতেই হবে -
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
নতুন স্ট্রাকচার
- XrCreateSpatialReferenceCacheCompletionANDROID
- XrEventDataSpatialAnnotationTrackingANDROID
- XrSpatialAnnotationQuadANDROID
- XrSpatialAnnotationQuadDataANDROID
- XrSpatialCapabilityConfigurationAnnotationTrackingANDROID
- XrSpatialReferenceCacheCreateInfoANDROID
XrSpatialComponentDataQueryResultEXT এক্সটেন্ড করা হচ্ছে :
XrSpatialReferenceImageEXT এক্সটেন্ড করা হচ্ছে :
XrSystemProperties এক্সটেন্ড করা হচ্ছে :
নতুন Enum
নতুন Enum কনস্ট্যান্ট
XR_ANDROID_SPATIAL_ANNOTATION_TRACKING_EXTENSION_NAMEXR_ANDROID_spatial_annotation_tracking_SPEC_VERSIONXrObjectType এক্সটেন্ড করা হচ্ছে :
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_ANDROIDXR_TYPE_EVENT_DATA_SPATIAL_ANNOTATION_TRACKING_ANDROIDXR_TYPE_SPATIAL_ANNOTATION_QUAD_REFERENCE_ANDROIDXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANNOTATION_TRACKING_ANDROIDXR_TYPE_SPATIAL_COMPONENT_ANNOTATION_QUAD_LIST_ANDROIDXR_TYPE_SPATIAL_REFERENCE_CACHE_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_SPATIAL_ANNOTATION_PROPERTIES_ANDROID
ইস্যু
ভার্সনের ইতিহাস
সংশোধন ১, ১৭-০৯-২০২৫ (লেভানা চেন)
- এক্সটেনশনের প্রাথমিক বিবরণ।