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 অবশ্যই sourceCapacityInput XrSpatialAnnotationReferenceSourceANDROID ভ্যালুর অ্যারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • 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-এর অর্থ হল:

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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

রানটাইম রেফারেন্স ক্যাশে

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_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 হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

xrCreateSpatialReferenceCacheCompleteANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

XrResult xrCreateSpatialReferenceCacheCompleteANDROID(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateSpatialReferenceCacheCompletionANDROID* completion);

প্যারামিটারের বিবরণ

xrCreateSpatialReferenceCacheAsyncANDROID দ্বারা শুরু করা অ্যাসিঙ্ক্রোনাস অপারেশন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে, অ্যাপ্লিকেশনটি xrCreateSpatialReferenceCacheCompleteANDROID কল করতে পারে।

future রেডি অবস্থায় না থাকলে রানটাইমকে XR_ERROR_FUTURE_PENDING_EXT রিটার্ন করতেই হবে। future আগে থেকেই সম্পূর্ণ বা বাতিল করা হয়ে থাকলে, রানটাইমকে XR_ERROR_FUTURE_INVALID_EXT রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

রিটার্ন কোড

হয়ে গেছে

  • 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 বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • futureResult হল রেফারেন্স ক্যাশে তৈরি করার অপারেশনের XrResult।
  • অপারেশন সফল হলে 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-এর মধ্যে ক্যাশে রেকর্ড করে।

সঠিক ব্যবহার (অন্তর্নিহিত)

xrDestroySpatialReferenceCacheANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:

XrResult xrDestroySpatialReferenceCacheANDROID(
    XrSpatialReferenceCacheANDROID              cacheHandle);

প্যারামিটারের বিবরণ

স্পেশিয়াল কনটেক্সট তৈরি করা হয়ে গেলে, cacheHandle হ্যান্ডেল ও অন্তর্নিহিত রিসোর্স রিলিজ করার জন্য অ্যাপ্লিকেশনটি xrDestroySpatialReferenceCacheANDROID ফাংশন কল করতে পারে।

সঠিক ব্যবহার (অন্তর্নিহিত)

থ্রেড নিরাপত্তা

  • cacheHandle এবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_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 রিটার্ন করতে হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

অ্যানোটেশন ট্র্যাকিং ইভেন্ট

XrEventDataSpatialAnnotationTrackingANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:

typedef struct XrEventDataSpatialAnnotationTrackingANDROID {
    XrStructureType        type;
    const void*            next;
    XrSpatialContextEXT    spatialContext;
    uint32_t               annotationIndex;
    XrResult               initializationResult;
} XrEventDataSpatialAnnotationTrackingANDROID;

মেম্বারদের বিবরণ

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।
  • spatialContext হল XrSpatialContextEXT যার জন্য অ্যানোটেশন ট্র্যাকিং চালু করা হয়েছে।
  • annotationIndex XrSpatialCapabilityConfigurationAnnotationTrackingANDROID :: reference-এর সাথে যুক্ত অ্যানোটেশন অ্যারে থেকে ইনডেক্সে ম্যাপ করে।
  • initializationResult অ্যানোটেশনের ইনিশিয়ালাইজেশন ফলাফল দেখায়। এটি XR_SUCCESS না হলে, অ্যাপ্লিকেশনটি অ্যানোটেশন আবার শুরু করার জন্য XrSpatialContextEXT হ্যান্ডেলটি ধ্বংস করে আবার তৈরি করতে পারে, অথবা অন্যান্য অ্যানোটেশন ট্র্যাক করতে spatialContext ব্যবহার করা চালিয়ে যেতে পারে।

সঠিক ব্যবহার (অন্তর্নিহিত)

রানটাইমকে প্রতিটি অ্যানোটেশনের জন্য 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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

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 দ্বারা উৎস নির্দেশ করা হয়।

সঠিক ব্যবহার (অন্তর্নিহিত)

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 রিটার্ন করতেই হবে।

সঠিক ব্যবহার (অন্তর্নিহিত)

কোডের উদাহরণ

রানটাইম সাপোর্ট চেক করুন

রানটাইম অ্যানোটেশন ট্র্যাকিং ক্ষমতাকে সমর্থন করে কিনা তা কীভাবে চেক করতে হয় তা নিম্নলিখিত উদাহরণ কোডটি দেখায়।

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 &currentQuad = 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));

নতুন অবজেক্টের ধরন

নতুন কমান্ড

নতুন স্ট্রাকচার

নতুন Enum

নতুন 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

ইস্যু

ভার্সনের ইতিহাস

  • সংশোধন ১, ১৭-০৯-২০২৫ (লেভানা চেন)

    • এক্সটেনশনের প্রাথমিক বিবরণ।