XR_ANDROID_trackables_image

নামের স্ট্রিং

XR_ANDROID_trackables_image

এক্সটেনশনের ধরন

ইনস্ট্যান্স এক্সটেনশন

রেজিস্টার করা এক্সটেনশন নম্বর

710

সংশোধন

1

অনুমোদনের স্ট্যাটাস

অনুমোদিত নয়

এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি

XR_EXT_future
এবং
XR_ANDROID_trackables

শেষবার পরিবর্তন করার তারিখ

2025-04-08

IP স্ট্যাটাস

IP সংক্রান্ত কোনও দাবি নেই।

কন্ট্রিবিউটর

ক্রিস্টোফার ডোর, Google
লেভানা চেন, Google
জ্যারেড ফাইন্ডার, Google
স্পেন্সার কুইন, Google
নিহাভ জৈন, Google
ডিয়েগো টিপাল্ডি, Google
ড্যানিয়েল গুটেনবার্গ, Qualcomm
মার্ক ভাদাসি, Qualcomm
মার্কাস বার্কনার, Qualcomm
ম্যাক্সিমিলিয়ান মেয়ার, Qualcomm

এক নজরে

এই এক্সটেনশন ইনপুট রেফারেন্স ছবির সেট দ্বারা নির্দিষ্ট করা প্ল্যানার ছবি ট্র্যাক করার সুবিধা দেয়।

অনুমতি

Android অ্যাপ্লিকেশনের ম্যানিফেস্টে android.permission.SCENE_UNDERSTANDING_COARSE অনুমতি তালিকাভুক্ত থাকতেই হবে, কারণ এই এক্সটেনশন XR_ANDROID_trackables-এর উপর নির্ভর করে এবং পরিবেশের জিওমেট্রি প্রকাশ করে। android.permission.SCENE_UNDERSTANDING_COARSE অনুমতিকে বিপজ্জনক অনুমতি হিসেবে বিবেচনা করা হয়।

(সুরক্ষা লেভেল: বিপজ্জনক)

সিস্টেমের ক্ষমতা পরীক্ষা করা

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

typedef struct XrSystemImageTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsImageTracking;
    XrBool32           supportsPhysicalSizeEstimation;
    uint32_t           maxTrackedImageCount;
    uint32_t           maxLoadedImageCount;
} XrSystemImageTrackingPropertiesANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই। স্ট্রাকচার চেন সম্পর্কে আরও জানতে, এক্সটেন্ড করা স্ট্রাকচার ( XrSystemProperties ) দেখুন।
  • supportsImageTracking হল একটি XrBool32 যা বর্তমান সিস্টেমে ইমেজ ট্র্যাকিংয়ের সুবিধা আছে কিনা তা নির্দেশ করে।
  • supportsPhysicalSizeEstimation হল একটি XrBool32 যা বর্তমান সিস্টেম ছবির সাইজ অনুমান করে কিনা তা নির্দেশ করে।
  • maxTrackedImageCount হল মোট সর্বাধিক সংখ্যক ছবি যা একই সময়ে ট্র্যাক করা যেতে পারে।
  • maxLoadedImageCount হল রেফারেন্স ইমেজের মোট সর্বাধিক সংখ্যা যা সব ডেটাবেস জুড়ে লোড করা যেতে পারে।

xrGetSystemProperties কল করার সময় XrSystemImageTrackingPropertiesANDROID স্ট্রাকচারের সাথে XrSystemProperties এক্সটেন্ড করার মাধ্যমে সিস্টেম ইমেজ ট্র্যাক করতে সক্ষম কিনা তা কোনও অ্যাপ্লিকেশন চেক করতে পারে। ইমেজ ট্র্যাকার তৈরির জন্য রানটাইমকে অবশ্যই XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতে হবে, যদি এবং শুধুমাত্র যদি supportsImageTracking XR_FALSE হয়।

কোনও রানটাইম ইমেজ ট্র্যাকিং সাপোর্ট করলে, সেটিকে যেকোনও সময়ে maxTrackedImageCountটি ট্র্যাক করা ইমেজ সাপোর্ট করতেই হবে।

কোনও রানটাইম ইমেজ ট্র্যাকিং সাপোর্ট করলে, যেকোনও সময়ে এটি অবশ্যই maxLoadedImageCountটি লোড করা ইমেজ সাপোর্ট করবে।

রানটাইম যদি ছবির সাইজ অনুমান করা সমর্থন করে, তাহলে অ্যাপ্লিকেশনটি সাইজ অনুমান করার ব্যবহার নির্দেশ করতে XrTrackableImageDatabaseEntryANDROID :: physicalWidth 0 সেট করতে পারে। অন্যথায়, অ্যাপ্লিকেশনকে অবশ্যই XrTrackableImageDatabaseEntryANDROID :: physicalWidth-কে পজিটিভ ভ্যালুতে সেট করতে হবে অথবা XR_ERROR_VALIDATION_FAILURE রিটার্ন করা হবে।

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

ডেটাবেস তৈরি করা হচ্ছে

অ্যাপ্লিকেশনটি এক বা একাধিক XrTrackableImageDatabaseEntryANDROID স্ট্রাকচার তৈরি করে এবং XrTrackableImageDatabaseCreateInfoANDROID স্ট্রাকচারের মাধ্যমে xrCreateTrackableImageDatabaseAsyncANDROID ফাংশনে পাস করে একটি XrTrackableImageDatabaseANDROID হ্যান্ডেল তৈরি করতে পারে।

XrTrackableImageDatabaseANDROID হ্যান্ডেল তৈরি করার সময় অ্যাপ্লিকেশনকে অবশ্যই অন্তত একটি XrTrackableImageDatabaseEntryANDROID প্রদান করতে হবে।

XrTrackableImageDatabaseANDROID হল একটি হ্যান্ডেল যা প্রসেস করা রেফারেন্স ইমেজের সেটকে দেখায় যা পরিবেশে খুঁজে পাওয়া এবং ট্র্যাক করা যেতে পারে।

XR_DEFINE_HANDLE(XrTrackableImageDatabaseANDROID)

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

typedef struct XrTrackableImageDatabaseEntryANDROID {
    XrStructureType                        type;
    const void*                            next;
    XrTrackableImageTrackingModeANDROID    trackingMode;
    float                                  physicalWidth;
    uint32_t                               imageWidth;
    uint32_t                               imageHeight;
    XrTrackableImageFormatANDROID          format;
    uint32_t                               bufferSize;
    const uint8_t*                         buffer;
} XrTrackableImageDatabaseEntryANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • trackingMode হল একটি XrTrackableImageTrackingModeANDROID যা ট্র্যাকিংয়ের জন্য কাঙ্ক্ষিত মোড নির্দেশ করে।
  • physicalWidth মিটারে ছবির প্রস্থ নির্দেশ করে। শূন্য হলে, ছবির সাইজ অনলাইনে অনুমান করা হবে।
  • imageWidth পিক্সেলের হিসেবে ছবির প্রস্থ দেখায়।
  • imageHeight পিক্সেলে ছবির উচ্চতা নির্দেশ করে।
  • format হল একটি XrTrackableImageFormatANDROID যা buffer-এ ইমেজ ডেটার ফর্ম্যাট নির্দেশ করে।
  • bufferSize, buffer-এর বাইট দৈর্ঘ্য নির্দেশ করে।
  • buffer হল uint8_t বাফার যাতে রেফারেন্স ইমেজ পিক্সেল ডেটা থাকে। buffer-এর কন্টেন্ট অবশ্যই ডেটাবেস তৈরির অ্যাসিঙ্ক অপারেশনের সময়সীমার জন্য বৈধ হতে হবে, যা xrCreateTrackableImageDatabaseAsyncANDROID-এর মাধ্যমে শুরু হয় এবং xrCreateTrackableImageDatabaseCompleteANDROID-এর মাধ্যমে সম্পূর্ণ হয়।

XrSystemImageTrackingPropertiesANDROID :: supportsPhysicalSizeEstimation যদি XR_TRUE হয়, তাহলে অনলাইন সাইজ অনুমান করার অনুরোধ জানাতে, অ্যাপ্লিকেশন physicalWidth-কে 0-তে সেট করতে পারে।

এন্ট্রির imageWidth , imageHeight এবং format-এর উপর ভিত্তি করে প্রত্যাশিত সাইজের সাথে bufferSize ম্যাচ না করলে, রানটাইম xrCreateTrackableImageDatabaseAsyncANDROID থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে পারে।

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

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

typedef struct XrTrackableImageDatabaseCreateInfoANDROID {
    XrStructureType                                type;
    const void*                                    next;
    uint32_t                                       entryCount;
    const XrTrackableImageDatabaseEntryANDROID*    entries;
} XrTrackableImageDatabaseCreateInfoANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • entryCount হল একটি uint32_t যা entries অ্যারেতে এলিমেন্টের সংখ্যা নির্দিষ্ট করে।
  • entries হল XrTrackableImageDatabaseEntryANDROID স্ট্রাকচারের একটি অ্যারে।

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

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

typedef struct XrCreateTrackableImageDatabaseCompletionANDROID {
    XrStructureType                    type;
    void*                              next;
    XrResult                           futureResult;
    XrTrackableImageDatabaseANDROID    database;
} XrCreateTrackableImageDatabaseCompletionANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • futureResult হল অ্যাসিঙ্ক্রোনাস অপারেশনের XrResult।
  • database হল তৈরি করা XrTrackableImageDatabaseANDROID হ্যান্ডেল।

ভবিষ্যতের রিটার্ন কোড

futureResult ভ্যালু:

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

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

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

XrResult xrCreateTrackableImageDatabaseAsyncANDROID(
    XrSession                                   session,
    const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
    XrFutureEXT*                                future);

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

  • session হল XrSession-এর একটি হ্যান্ডেল যা আগে xrCreateSession-এর মাধ্যমে তৈরি করা হয়েছে।
  • createInfo হল XrTrackableImageDatabaseCreateInfoANDROID স্ট্রাকচারের একটি পয়েন্টার।
  • future হল তৈরি করা XrFutureEXT-এর একটি পয়েন্টার।

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

  • xrCreateTrackableImageDatabaseAsyncANDROID কল করার আগে XR_ANDROID_trackables_image এক্সটেনশন চালু করতেই হবে
  • session অবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে
  • createInfo অবশ্যই একটি সঠিক XrTrackableImageDatabaseCreateInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
  • future অবশ্যই XrFutureEXT ভ্যালুর পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID
  • 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

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

XrResult xrCreateTrackableImageDatabaseCompleteANDROID(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateTrackableImageDatabaseCompletionANDROID* completion);

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

  • session হল XrSession-এর একটি হ্যান্ডেল যা আগে xrCreateSession-এর মাধ্যমে তৈরি করা হয়েছে।
  • future হল ভবিষ্যতের XrFutureEXT যা সম্পূর্ণ করতে হবে।
  • completion হল XrCreateTrackableImageDatabaseCompletionANDROID স্ট্রাকচারের একটি পয়েন্টার যাতে অপারেশনের ফলাফল থাকে।

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • 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

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

XrResult xrDestroyTrackableImageDatabaseANDROID(
    XrTrackableImageDatabaseANDROID             database);

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

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

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

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

ছবি ট্র্যাক করা হচ্ছে

এই এক্সটেনশন XR_TRACKABLE_TYPE_IMAGE_ANDROID-কে XrTrackableTypeANDROID-এ যোগ করে।

ছবি ট্র্যাক করার জন্য, অ্যাপ্লিকেশনটি xrCreateTrackableTrackerANDROID কল করে এবং XrTrackableTrackerCreateInfoANDROID :: trackableType-এ ট্র্যাকযোগ্য ধরন হিসেবে XR_TRACKABLE_TYPE_IMAGE_ANDROID নির্দিষ্ট করে একটি XrTrackableTrackerANDROID তৈরি করতে পারে।

XrTrackableTrackerCreateInfoANDROID :: trackableType যদি XR_TRACKABLE_TYPE_IMAGE_ANDROID হয় এবং XrSystemImageTrackingPropertiesANDROID :: supportsImageTracking যদি xrGetSystemProperties-এর মাধ্যমে XR_FALSE রিটার্ন করে, তাহলে রানটাইমকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতেই হবে।

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

typedef struct XrTrackableImageConfigurationANDROID {
    XrStructureType                           type;
    const void*                               next;
    uint32_t                                  databaseCount;
    const XrTrackableImageDatabaseANDROID*    databases;
} XrTrackableImageConfigurationANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • databaseCount হল একটি uint32_t যা databases-এ এলিমেন্টের সংখ্যা নির্দিষ্ট করে
  • databases হল XrTrackableImageDatabaseANDROID-এর একটি অ্যারে যা ট্র্যাকার তৈরি করার জন্য ডেটাবেস নির্দিষ্ট করে।

অ্যাপ্লিকেশনটিকে XrTrackableTrackerCreateInfoANDROID-এর next চেনে একটি XrTrackableImageConfigurationANDROID যোগ করে একটি সঠিক কনফিগারেশন সেট করতেই হবে। অন্যথায়, রানটাইম অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করবে।

ট্র্যাকার তৈরি করার জন্য অ্যাপ্লিকেশনকে অবশ্যই অন্তত একটি XrTrackableImageDatabaseANDROID স্ট্রাকচার প্রদান করতে হবে।

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

XrTrackableImageTrackingModeANDROID enum ছবির কাজ করে এমন ট্র্যাকিং মোড বর্ণনা করে।

typedef enum XrTrackableImageTrackingModeANDROID {
    XR_TRACKABLE_IMAGE_TRACKING_MODE_DYNAMIC_ANDROID = 1,
    XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID = 2,
    XR_TRACKABLE_IMAGE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableImageTrackingModeANDROID;

Enumerant-এর বিবরণ

  • XR_TRACKABLE_IMAGE_TRACKING_MODE_DYNAMIC_ANDROID — এই মোডে সবচেয়ে নির্ভুল ফলাফল পাওয়া যায় এবং কম লেটেন্সিতে চলমান ছবি ট্র্যাক করা যায়। এতে সবচেয়ে বেশি বিদ্যুৎ খরচ হয়।
  • XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID — স্ট্যাটিক বা সেমি-স্ট্যাটিক হিসেবে পরিচিত ছবির ক্ষেত্রে এই মোড ব্যবহার করা উচিত। ডায়নামিক মোডের তুলনায় এই মোডে কম বিদ্যুৎ খরচ হয়। কোনও স্ট্যাটিক ছবি সরানো হলে, ডায়নামিক মোড ব্যবহার করার তুলনায় অনেক বেশি লেটেন্সির সাথে এটি আপডেট করা হবে।

XrTrackableImageFormatANDROID enum ছবির কাজ করে এমন ফর্ম্যাট বর্ণনা করে।

typedef enum XrTrackableImageFormatANDROID {
    XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID = 1,
    XR_TRACKABLE_IMAGE_FORMAT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableImageFormatANDROID;

Enumerant-এর বিবরণ

  • XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID — প্রতি চ্যানেল রঙ ও ট্রান্সপারেন্সি ডেটা সহ ৮ বিটের RGBA ছবির ফর্ম্যাট।

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

XrResult xrAddTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID                   tracker,
    XrTrackableImageDatabaseANDROID             database);

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

কোনও ট্র্যাকারে XrTrackableImageDatabaseANDROID যোগ করা হলে, সেই ডেটাবেসের রেফারেন্স ইমেজ শনাক্তকরণ ও ট্র্যাক করার জন্য অবশ্যই বিবেচনা করতে হবে। এর সাথে, xrAddTrackableImageDatabaseANDROID-এর মাধ্যমে বা প্রাথমিকভাবে ট্র্যাকার তৈরি করার সময় XrTrackableImageConfigurationANDROID স্ট্রাকচারের মাধ্যমে আগে যোগ করা অন্য যেকোনও ডেটাবেসও বিবেচনা করতে হবে।

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

  • xrAddTrackableImageDatabaseANDROID কল করার আগে XR_ANDROID_trackables_image এক্সটেনশন চালু করতেই হবে
  • tracker অবশ্যই একটি সঠিক XrTrackableTrackerANDROID হ্যান্ডেল হতে হবে
  • database অবশ্যই একটি সঠিক XrTrackableImageDatabaseANDROID হ্যান্ডেল হতে হবে
  • database এবং tracker দুটিই একই XrSession থেকে তৈরি, বরাদ্দ বা ফিরিয়ে আনা হতেই হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • 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_VALIDATION_FAILURE

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

XrResult xrRemoveTrackableImageDatabaseANDROID(
    XrTrackableTrackerANDROID                   tracker,
    XrTrackableImageDatabaseANDROID             database);

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

XrTrackableTrackerANDROID থেকে XrTrackableImageDatabaseANDROID সরানো হলে, শনাক্তকরণ ও ট্র্যাকিংয়ের জন্য সেই ডেটাবেসের XrTrackableImageDatabaseEntryANDROID স্ট্রাকচার অবশ্যই আর বিবেচনা করা হবে না। সেই ডেটাবেসের অ্যাক্টিভভাবে ট্র্যাক করা কোনও এন্ট্রি আর অবশ্যই রিপোর্ট করা যাবে না। সরিয়ে দেওয়া XrTrackableImageDatabaseANDROID হ্যান্ডেল এই অপারেশনের অংশ হিসেবে অবশ্যই অন্তর্নিহিতভাবে ধ্বংস করা যাবে না।

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

  • xrRemoveTrackableImageDatabaseANDROID কল করার আগে XR_ANDROID_trackables_image এক্সটেনশন অবশ্যই চালু করতে হবে
  • tracker অবশ্যই একটি সঠিক XrTrackableTrackerANDROID হ্যান্ডেল হতে হবে
  • database অবশ্যই একটি সঠিক XrTrackableImageDatabaseANDROID হ্যান্ডেল হতে হবে
  • database এবং tracker দুটিই একই XrSession থেকে তৈরি, বরাদ্দ বা ফিরিয়ে আনা হতেই হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

ছবি নিয়ে আসা হচ্ছে

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

XrResult xrGetTrackableImageANDROID(
    XrTrackableTrackerANDROID                   tracker,
    const XrTrackableGetInfoANDROID*            getInfo,
    XrTrackableImageANDROID*                    trackable);

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

  • tracker হল কোয়েরি করার জন্য XrTrackableTrackerANDROID।
  • getInfo হল XrTrackableGetInfoANDROID, যার মধ্যে ট্র্যাক করা যায় এমন QR কোড পাওয়ার জন্য ব্যবহৃত তথ্য থাকে।
  • trackable হল XrTrackableImageANDROID স্ট্রাকচারের একটি পয়েন্টার, যেখানে ট্র্যাক করা যায় এমন ছবি ফিরিয়ে আনা হয়।

XrTrackableANDROID-এর ট্র্যাক করার উপযুক্ত ধরন XR_TRACKABLE_TYPE_IMAGE_ANDROID না হলে অথবা XrTrackableTrackerANDROID-এর ট্র্যাক করার উপযুক্ত ধরন XR_TRACKABLE_TYPE_IMAGE_ANDROID না হলে, রানটাইমকে XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID রিটার্ন করতেই হবে।

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

  • xrGetTrackableImageANDROID কল করার আগে XR_ANDROID_trackables_image এক্সটেনশন অবশ্যই চালু করতে হবে
  • tracker অবশ্যই একটি সঠিক XrTrackableTrackerANDROID হ্যান্ডেল হতে হবে
  • getInfo অবশ্যই একটি সঠিক XrTrackableGetInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
  • trackable অবশ্যই XrTrackableImageANDROID স্ট্রাকচারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrTrackableImageANDROID {
    XrStructureType                    type;
    const void*                        next;
    XrTrackingStateANDROID             trackingState;
    XrTime                             lastUpdatedTime;
    XrTrackableImageDatabaseANDROID    database;
    uint32_t                           databaseEntryIndex;
    XrPosef                            centerPose;
    XrExtent2Df                        extents;
} XrTrackableImageANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • trackingState হল ছবির XrTrackingStateANDROID।
  • lastUpdatedTime হল ছবির শেষ আপডেটের XrTime।
  • database হল XrTrackableImageDatabaseANDROID হ্যান্ডেল যেখান থেকে এই ছবি ট্র্যাক করা হয়েছে।
  • databaseEntryIndex হল সেই ইন্ডেক্স যা XrTrackableImageDatabaseCreateInfoANDROID :: entries-এর database অ্যারেতে ম্যাপ করে।
  • centerPose হল XrTrackableGetInfoANDROID :: baseSpace-এ অবস্থিত ছবির XrPosef। ছবিটি XZ প্লেনে রয়েছে, যেখানে X ছবির ডানদিকে এবং Z ছবির নিচের দিকে নির্দেশ করছে।
  • extents হল ছবির XrExtent2Df ডাইমেনশন। বাউন্ডিং বক্সের সীমানা এই পয়েন্টে আছে: centerPose +/- ( extents / 2).

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

ব্যর্থতা ম্যানেজ করা

অ্যাপ্লিকেশনকে xrPollEvent ব্যবহার করে XrEventDataImageTrackingLostANDROID ইভেন্টের জন্য পোল করতেই হবে এবং এটি উপেক্ষা করলে চলবে না।

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

typedef struct XrEventDataImageTrackingLostANDROID {
    XrStructureType    type;
    const void*        next;
    XrTime             time;
} XrEventDataImageTrackingLostANDROID;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • time XrTime

XrEventDataImageTrackingLostANDROID ইভেন্ট পাওয়ার অর্থ হল, ইমেজ ট্র্যাকিংয়ে সমস্যা হয়েছে এবং ইন্টার্নাল সমস্যার কারণে আগে থেকে থাকা রিসোর্স বাতিল হয়ে গেছে। অ্যাপ্লিকেশনটি যদি ইমেজ ট্র্যাকিং চালিয়ে যেতে চায়, তাহলে সেটিকে অবশ্যই সমস্ত XrTrackableImageDatabaseANDROID হ্যান্ডেল ধ্বংস করতে হবে এবং সেগুলি আবার তৈরি করতে হবে। এছাড়াও, অ্যাপ্লিকেশনকে ইমেজ ট্র্যাকিং সম্পর্কিত সব XrTrackableTrackerANDROID হ্যান্ডেল অবশ্যই নষ্ট করে দিতে হবে এবং ইমেজ ট্র্যাকিং চালিয়ে যেতে চাইলে সেগুলি আবার তৈরি করতে হবে।

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

ট্র্যাক করা যায় এমন ছবি পাওয়ার জন্য কোডের উদাহরণ

ট্র্যাক করা যায় এমন ছবি কীভাবে পাবেন তা নিম্নলিখিত কোডের উদাহরণ থেকে জানতে পারবেন।

XrInstance instance;  // Previously initialized.
XrSession session;    // Previously initialized.
XrSystemId systemId;  // Previously initialized.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetSystemProperties xrGetSystemProperties;                       // Previously initialized.
PFN_xrPollFutureEXT xrPollFutureEXT;                                   // Previously initialized.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID;   // Previously initialized.
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID;               // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.

PFN_xrGetTrackableImageANDROID xrGetTrackableImageANDROID;                                        // Previously initialized.
PFN_xrCreateTrackableImageDatabaseAsyncANDROID xrCreateTrackableImageDatabaseAsyncANDROID;        // Previously initialized.
PFN_xrCreateTrackableImageDatabaseCompleteANDROID xrCreateTrackableImageDatabaseCompleteANDROID;  // Previously initialized.
PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID;                // Previously initialized.
PFN_xrAddTrackableImageDatabaseANDROID xrAddTrackableImageDatabaseANDROID;                        // Previously initialized.
PFN_xrRemoveTrackableImageDatabaseANDROID xrRemoveTrackableImageDatabaseANDROID;                  // Previously initialized.

XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace;  // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.

// Inspect system capability
XrSystemImageTrackingPropertiesANDROID imageProperty {
  .type = XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID,
  .next = nullptr,
};
XrSystemProperties systemProperties {
  .type = XR_TYPE_SYSTEM_PROPERTIES,
  .next = &imageProperty,
};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!imageProperty.supportsImageTracking) {
    // image tracking is not supported.
    return;
}

uint8_t* imageBuffer; // Load the image buffer.
uint32_t imageBufferSize; // Get the image buffer size.

XrTrackableImageDatabaseEntryANDROID imageDatabaseEntries[1] = {
  {
    .type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID,
    .next = nullptr,
    .trackingMode = XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID,
    .physicalWidth = 0.1f, // The width of the image in meters.
    .imageWidth = 640,
    .imageHeight = 480,
    .format = XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID,
    .bufferSize = imageBufferSize, // RGBA buffer size in bytes.
    .buffer = imageBuffer, // RGBA data.
  }
};

XrTrackableImageDatabaseCreateInfoANDROID imageDatabaseCreateInfo {
  .type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID,
  .next = nullptr,
  .entryCount = 1,
  .entries = imageDatabaseEntries
};

XrFutureEXT imageDatabaseFuture;
CHK_XR(xrCreateTrackableImageDatabaseAsyncANDROID(session, &imageDatabaseCreateInfo, &imageDatabaseFuture));

bool keepLooping = true;
bool futureReady = false;
while (keepLooping) {
  XrFuturePollInfoEXT pollInfo{
    .type = XR_TYPE_FUTURE_POLL_INFO_EXT,
    .future = imageDatabaseFuture,
  };
  XrFuturePollResultEXT pollResult{
    .type = XR_TYPE_FUTURE_POLL_RESULT_EXT,
  };
  CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));

  if (pollResult.state == XR_FUTURE_STATE_READY_EXT) {
    futureReady = true;
    keepLooping = false;
  } else {
    // Throttle the loop to not fully expend this CPU core.
    std::this_thread::yield();
  }
}

XrTrackableImageDatabaseANDROID imageDatabase;

if (futureReady) {
  XrCreateTrackableImageDatabaseCompletionANDROID imageDatabaseCompletion {
    .type = XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID,
    .next = nullptr,
  };

  CHK_XR(xrCreateTrackableImageDatabaseCompleteANDROID(session, imageDatabaseFuture, &imageDatabaseCompletion));
  CHK_XR(imageDatabaseCompletion.futureResult);
  imageDatabase = imageDatabaseCompletion.database;
}

XrTrackableImageConfigurationANDROID imageConfig {
  .type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
  .next = nullptr,
  .databaseCount = 1,
  .databases = &imageDatabase
};

XrTrackableTrackerCreateInfoANDROID createInfo {
  .type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
  .next = &imageConfig,
  .trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};

XrTrackableTrackerANDROID imageTrackableTracker;
CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));

XrTrackableImageDatabaseANDROID anotherImageDatabase; // Load another database.

// ... dynamically add it to the existing tracker
CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));

while (1) {
  uint32_t trackableCountOutput = 0;

  CHK_XR(xrGetAllTrackablesANDROID(imageTrackableTracker, 0, &trackableCountOutput, nullptr));

  std::vector<XrTrackableANDROID> allImageTrackables;
  allImageTrackables.resize(trackableCountOutput);

  CHK_XR(xrGetAllTrackablesANDROID(imageTrackableTracker, 0, &trackableCountOutput, allImageTrackables.data()));

  for (XrTrackableANDROID trackable : allImageTrackables) {
    XrTrackableGetInfoANDROID imageGetInfo {
      .type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
      .next = nullptr,
      .trackable = trackable,
      .baseSpace = appSpace,
      .time = updateTime
    };

    XrTrackableImageANDROID trackableImage{
      .type = XR_TYPE_TRACKABLE_IMAGE_ANDROID,
    };
    CHK_XR(xrGetTrackableImageANDROID(imageTrackableTracker, &imageGetInfo, &trackableImage));

    // Use XrTrackableImageANDROID data.
    (void)trackableImage.trackingState;
    (void)trackableImage.lastUpdatedTime;
    (void)trackableImage.centerPose;
    (void)trackableImage.extents;

    if (trackableImage.database == imageDatabase && trackableImage.databaseEntryIndex == 0) {
      // Knowing which image the index of 0 maps to, use the specific image database
      // entry (e.g. rendering A for image A).
    }
    // indices 1+N comparisons for another specific image database entry.
  }

  // Throttle the loop to not fully expend this CPU core.
  std::this_thread::yield();
}

// Remove image database from an existing tracker to stop tracking the images
// of that specific database. To resume tracking of those images re-add the
// database at a later point.
CHK_XR(xrRemoveTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));

// Destroy the image tracker to stop image tracking completely. Re-creating the
// image tracker with existing image databases will restart image tracking.
CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));

// Destroy image databases to unload the associated resources. Re-creatingd
// databases requires going through the asynchronous creation procedure again.
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(anotherImageDatabase));
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabase));

রানটাইমে ইমেজ ডেটাবেস ম্যানেজ করার জন্য কোডের উদাহরণ

ট্র্যাক করা হচ্ছে এমন ছবির সেট কীভাবে পরিবর্তন করতে হয় তা নিম্নলিখিত উদাহরণ কোড থেকে দেখানো হয়েছে।

XrSession session; // Previously initialized.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID;   // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.

PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID;                // Previously initialized.
PFN_xrAddTrackableImageDatabaseANDROID xrAddTrackableImageDatabaseANDROID;                        // Previously initialized.
PFN_xrRemoveTrackableImageDatabaseANDROID xrRemoveTrackableImageDatabaseANDROID;                  // Previously initialized.

// See previous C++ sample for database and tracker initialization.
XrTrackableImageDatabaseANDROID imageDatabases[2]; // Previously initialized.
XrTrackableImageDatabaseANDROID anotherImageDatabase; // Previously initialized.

// Create the image tracker config with two input databases to track.
XrTrackableImageConfigurationANDROID imageConfig {
  .type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
  .next = nullptr,
  .databaseCount = 2,
  .databases = imageDatabases
};

XrTrackableTrackerCreateInfoANDROID createInfo {
  .type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
  .next = &imageConfig,
  .trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};

XrTrackableTrackerANDROID imageTrackableTracker;
CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));

// The tracker currently tracks the images of the two databases 'imageDatabases[0]' and
// 'imageDatabases[1]' supplied through 'imageConfig'.

CHK_XR(xrRemoveTrackableImageDatabaseANDROID(imageTrackableTracker, imageDatabases[1]));

// The tracker currently tracks 'imageDatabases[0]', but no longer tracks
// 'imageDatabases[1]'.
// The 'imageDatabases[1]' database handle is still valid.

CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, imageDatabases[1]));

// The tracker currently tracks 'imageDatabases[0]' and 'imageDatabases[1]'.

CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabases[1]));

// The tracker currently tracks 'imageDatabases[0]', but no longer tracks
// 'imageDatabases[1]'.
// The 'imageDatabases[1]' database handle is no longer valid and the corresponding
// resources have been released internally. The database needs to be re-initialized
// and re-added to resume tracking of 'imageDatabases[0]'.

CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));

// The tracker currently tracks 'imageDatabases[0]' and 'anotherImageDatabase'.

CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));

// The 'imageTrackableTracker' tracker handle is invalid and image tracking has been
// stopped.
// The 'imageDatabases[0]' and 'anotherImageDatabase' database handles are still valid.

// Create another the image tracker config to re-create the image tracker.
XrTrackableImageConfigurationANDROID anotherImageConfig {
  .type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
  .next = nullptr,
  .databaseCount = 1,
  .databases = &anotherImageDatabase
};

XrTrackableTrackerCreateInfoANDROID anotherCreateInfo {
  .type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
  .next = &anotherImageConfig,
  .trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};

CHK_XR(xrCreateTrackableTrackerANDROID(session, &anotherCreateInfo, &imageTrackableTracker));

// The tracker handle has been re-initialized and image tracking has been started again.
// The tracker currently tracks 'anotherImageDatabase'.
// The 'imageDatabases[0]' database handle is still valid, but not currently tracked.

ছবি ট্র্যাক করার সময় হওয়া সমস্যার প্রতিক্রিয়া জানানোর জন্য উদাহরণ কোড

XrEventDataImageTrackingLostANDROID ইভেন্টের জন্য পোলিংয়ের মাধ্যমে কীভাবে ব্যর্থতা ম্যানেজ করতে হয় তা নিম্নলিখিত উদাহরণ কোড থেকে দেখানো হয়েছে।

XrInstance instance; // Previously initialized.
XrSession session; // Previously initialized.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrPollFutureEXT xrPollFutureEXT;                                   // Previously initialized.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID;   // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.

PFN_xrCreateTrackableImageDatabaseAsyncANDROID xrCreateTrackableImageDatabaseAsyncANDROID;        // Previously initialized.
PFN_xrCreateTrackableImageDatabaseCompleteANDROID xrCreateTrackableImageDatabaseCompleteANDROID;  // Previously initialized.
PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID;                // Previously initialized.

XrTrackableImageDatabaseEntryANDROID imageDatabaseEntries[1]; // Previously initialized.
XrTrackableImageDatabaseANDROID imageDatabase; // Previously initialized.
XrTrackableTrackerANDROID imageTrackableTracker; // Previously initialized.

// Initialize an event buffer to hold the output.
XrEventDataBuffer event = {
  .type = XR_TYPE_EVENT_DATA_BUFFER,
};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
  switch (event.type) {
    case XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID: {
      const XrEventDataImageTrackingLostANDROID& eventdata =
        *reinterpret_cast<XrEventDataImageTrackingLostANDROID*>(&event);

      // All existing databases and trackers need to be destroyed.
      CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));
      CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabase));

      // To resume image tracking, the database(s) and the tracker need to be re-created.

      XrTrackableImageDatabaseCreateInfoANDROID imageDatabaseCreateInfo {
        .type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID,
        .next = nullptr,
        .entryCount = 1,
        .entries = imageDatabaseEntries
      };

      XrFutureEXT imageDatabaseFuture;
      CHK_XR(xrCreateTrackableImageDatabaseAsyncANDROID(session, &imageDatabaseCreateInfo, &imageDatabaseFuture));

      while (true) {
        XrFuturePollInfoEXT pollInfo{
          .type = XR_TYPE_FUTURE_POLL_INFO_EXT,
          .future = imageDatabaseFuture,
        };
        XrFuturePollResultEXT pollResult{
          .type = XR_TYPE_FUTURE_POLL_RESULT_EXT,
        };
        CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));

        if (pollResult.state == XR_FUTURE_STATE_READY_EXT) {
          break;
        } else {
          // Throttle the loop to not fully expend this CPU core.
          std::this_thread::yield();
        }
      }

      XrCreateTrackableImageDatabaseCompletionANDROID imageDatabaseCompletion {
        .type = XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID,
        .next = nullptr,
      };

      CHK_XR(xrCreateTrackableImageDatabaseCompleteANDROID(session, imageDatabaseFuture, &imageDatabaseCompletion));
      CHK_XR(imageDatabaseCompletion.futureResult);
      imageDatabase = imageDatabaseCompletion.database;

      XrTrackableImageConfigurationANDROID imageConfig {
       .type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
       .next = nullptr,
       .databaseCount = 1,
       .databases = &imageDatabase
      };

      XrTrackableTrackerCreateInfoANDROID createInfo {
        .type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
        .next = &imageConfig,
        .trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
      };

      XrTrackableTrackerANDROID imageTrackableTracker;
      CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));

      break;
    }
  }
}

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

নতুন কমান্ড

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

নতুন Enum

নতুন Enum কনস্ট্যান্ট

  • XR_ANDROID_TRACKABLES_IMAGE_EXTENSION_NAME
  • XR_ANDROID_trackables_image_SPEC_VERSION
  • XrObjectType এক্সটেন্ড করা হচ্ছে :

    • XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID
  • XrResult এক্সটেন্ড করা হচ্ছে :

    • XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID
  • XrStructureType এক্সটেন্ড করা হচ্ছে :

    • XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID
    • XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID
    • XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID
    • XR_TYPE_TRACKABLE_IMAGE_ANDROID
    • XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID
    • XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID
    • XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID
  • XrTrackableTypeANDROID এক্সটেন্ড করা হচ্ছে :

    • XR_TRACKABLE_TYPE_IMAGE_ANDROID

ইস্যু

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

  • রিভিশন ১, ০৮-০৪-২০২৫ (ড্যানিয়েল গুটেনবার্গ)

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