XR_EXT_spatial_image_tracking
নামের স্ট্রিং
XR_EXT_spatial_image_tracking
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
783
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_EXT_spatial_entity
কন্ট্রিবিউটর
Daniel Guttenberg, Qualcomm
Nihav Jain, Google
Jared Finder, Google
Zhipeng Liu, ByteDance
এক নজরে
এই এক্সটেনশন XR_EXT_spatial_entity এক্সটেনশনের জন্য ইমেজ ট্র্যাকিং ক্ষমতা প্রদান করে। এটি ইনপুট রেফারেন্স ছবির সেট দ্বারা নির্দিষ্ট করা নির্দিষ্ট প্ল্যানার ছবি শনাক্ত ও ট্র্যাক করতে অ্যাপ্লিকেশনকে সক্ষম করে।
ট্র্যাক করা ছবিকে নিম্নলিখিত কম্পোনেন্ট সহ (বা "যেটিতে আছে") স্পেশিয়াল এন্টিটি হিসেবে দেখানো হয়:
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
অ্যাপ্লিকেশন সাধারণত নিম্নলিখিত প্যাটার্নে স্পেশিয়াল ইমেজ ট্র্যাকিং এক্সটেনশন ব্যবহার করে:
- একটি অ্যাপ্লিকেশন প্রথমে প্রিলোড করা রেফারেন্স ইমেজ ডেটার সেটের উপর ভিত্তি করে এক বা একাধিক XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল তৈরি করে।
- অ্যাপ্লিকেশনটি তখন আগে তৈরি করা XrSpatialImageTrackingDatabaseEXT হ্যান্ডেলের উপর ভিত্তি করে একটি XrSpatialContextEXT হ্যান্ডেল তৈরি করে।
- তারপর, অ্যাপ্লিকেশনটি মেমরি খরচ কমাতে রেফারেন্স ইমেজ ডেটা রিলিজ করে।
- অ্যাপ্লিকেশনটি স্পেশিয়াল এন্টিটি অ্যাক্সেস প্যাটার্ন অনুযায়ী ছবি খুঁজে বের করে এবং কোয়েরি করে।
- অ্যাপ্লিকেশনটি রেফারেন্স ইমেজের অতিরিক্ত সেট লোড করতে পারে এবং অতিরিক্ত XrSpatialImageTrackingDatabaseEXT এবং পরবর্তীতে সেগুলি থেকে XrSpatialContextEXT তৈরি করতে পারে যাতে রানটাইমে শনাক্তযোগ্য এবং ট্র্যাকযোগ্য ইমেজের সেট ডাইনামিকভাবে বাড়ানো যায়।
- রানটাইমে শনাক্ত ও ট্র্যাক করা যায় এমন ছবির সেট ডায়নামিকভাবে কমাতে, অ্যাপ্লিকেশনটি XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল ধ্বংস করতে পারে।
- রানটাইমে শনাক্ত ও ট্র্যাক করা যায় এমন ছবির সেট ডায়নামিকভাবে কমাতে, অ্যাপ্লিকেশনটি XrSpatialContextEXT হ্যান্ডেল ধ্বংস করতে পারে।
রানটাইম সংক্রান্ত সহায়তা
রানটাইমকে অবশ্যই xrEnumerateSpatialCapabilitiesEXT ব্যবহার করে ইমেজ ট্র্যাকিং ক্ষমতার জন্য তার সাপোর্ট বিজ্ঞাপন করতে হবে, নিম্নলিখিত ক্ষমতা তালিকাভুক্ত করে:
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
কনফিগারেশন
প্ল্যানার ছবি শনাক্তকরণ ও ট্র্যাকিং চালু করতে, অ্যাপ্লিকেশন XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ XrSpatialCapabilityConfigurationImageTrackingEXT স্ট্রাকচার পাস করতে পারে, যখন xrCreateSpatialContextAsyncEXT ফাংশন কল করা হয় এবং প্রতিটি XrSpatialCapabilityConfigurationImageTrackingEXT :: imageTrackingDatabases-এ< XrSpatialImageTrackingDatabaseEXT স্ট্রাকচারের অ্যারে পাস করা হয়।
ইনপুট ছবি সেট তৈরি করা
শনাক্ত ও ট্র্যাক করার জন্য রেফারেন্স ইমেজ নির্দিষ্ট করতে, অ্যাপ্লিকেশনকে অবশ্যই অন্তত একটি ইনপুট রেফারেন্স ইমেজের সেট তৈরি করতে হবে। ইনপুট রেফারেন্স ইমেজের একটি সেট XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল দ্বারা উপস্থাপিত হয় এবং এতে অন্তত একটি ছবি থাকে।
XR_DEFINE_HANDLE(XrSpatialImageTrackingDatabaseEXT)
XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল ব্যবহারকারীর এনভায়রনমেন্টে কিছু সংখ্যক স্পেশিয়াল ইমেজ খুঁজে পাওয়া ও আপডেট করার রিসোর্সকে দেখায়। অ্যাপ্লিকেশনগুলি এই এক্সটেনশনের অন্যান্য ফাংশন ব্যবহার করে স্পেশিয়াল ছবিগুলি আবিষ্কার এবং আপডেট করতে এই হ্যান্ডেলটি ব্যবহার করতে পারে।
স্পেশিয়াল ইমেজ ট্র্যাকিং ডেটাবেস তৈরি করুন
xrCreateSpatialImageTrackingDatabaseAsyncEXT ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrCreateSpatialImageTrackingDatabaseAsyncEXT(
XrSession session,
const XrSpatialImageTrackingDatabaseCreateInfoEXT* createInfo,
XrFutureEXT* future);
প্যারামিটারের বিবরণ
sessionহল একটি XrSession যেখানে স্পেশিয়াল ইমেজ ট্র্যাকিং ডেটাবেস অ্যাক্টিভ থাকবে।createInfoহল XrSpatialImageTrackingDatabaseCreateInfoEXT যা স্পেশিয়াল ইমেজ ট্র্যাকিং ডেটাবেস প্যারামিটার নির্দিষ্ট করতে ব্যবহার করা হয়।futureহলXrFutureEXT-এর একটি পয়েন্টার।
কোনও অ্যাপ্লিকেশন xrCreateSpatialImageTrackingDatabaseAsyncEXT ফাংশন ব্যবহার করে XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল তৈরি করতে পারে এবং createInfo-এর মাধ্যমে ইমেজ ট্র্যাকিং ডেটাবেসের ইনপুট রেফারেন্স ইমেজের সেট কনফিগার করতে পারে।
রানটাইম অবশ্যই XR_ERROR_SPATIAL_IMAGE_FORMAT_UNSUPPORTED_EXT রিটার্ন করবে যদি কোনও ইনপুট রেফারেন্স ইমেজের XrSpatialReferenceImageEXT :: format xrEnumerateSpatialReferenceImageFormatsEXT দ্বারা গণনা করা না হয়।
XrSpatialReferenceImageEXT-এর রেফারেন্স ইমেজ মেটাডেটা অনুযায়ী ইনপুট রেফারেন্স ইমেজের যেকোনও একটির XrSpatialReferenceImageEXT :: planes অ্যারে মূল্যায়ন করা না গেলে, রানটাইমকে XR_ERROR_SPATIAL_IMAGE_INVALID_EXT রিটার্ন করতেই হবে।
রানটাইমকে XR_ERROR_SPATIAL_IMAGE_INVALID_EXT রিটার্ন করতেই হবে যদি কোনও ইনপুট রেফারেন্স ইমেজের XrSpatialReferenceImageEXT :: planes অ্যারে ঠিক ততগুলি প্লেন প্রদান না করে যতগুলি XrSpatialReferenceImageEXT :: format-এ কালার চ্যানেল আছে।
রানটাইম যদি ইমেজ ট্র্যাকিং ক্ষমতার জন্য অ্যাপ্লিকেশন অ্যাক্সেস নিয়ন্ত্রণ করতে একটি অনুমতি সিস্টেম প্রয়োগ করে, তাহলে এই অ্যাপ্লিকেশনটিকে সেই অনুমতিগুলি না দেওয়া হলে রানটাইম অবশ্যই XR_ERROR_PERMISSION_INSUFFICIENT রিটার্ন করবে।
এই ফাংশনটি একটি অ্যাসিঙ্ক্রোনাস অপারেশন শুরু করে এবং একটি সংশ্লিষ্ট XrFutureEXT তৈরি করে, যা xrPollFutureEXT এবং সম্পর্কিত ফাংশনের সাথে ব্যবহার করা যায়। এই ফাংশনের রিটার্ন ভ্যালু শুধুমাত্র এটিই দেখায় যে অ্যাসিঙ্ক্রোনাস অপারেশন শিডিউল করার জন্য প্যারামিটারগুলি গ্রহণযোগ্য ছিল কিনা। সম্পূর্ণ করার সংশ্লিষ্ট ফাংশন হল xrCreateSpatialImageTrackingDatabaseCompleteEXT , যা এই ফাংশন থেকে পাওয়া ফিউচার READY অবস্থায় থাকলে ব্যবহার করা যায়, যেখানে সম্পূর্ণ করার স্ট্রাকচার XrCreateSpatialImageTrackingDatabaseCompletionEXT -এ সেই ফাংশন দ্বারা আউটপুট পপুলেট করা হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialImageTrackingDatabaseAsyncEXT কল করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
createInfoঅবশ্যই একটি সঠিক XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে -
futureঅবশ্যইXrFutureEXTভ্যালুর পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_IMAGE_FORMAT_UNSUPPORTED_EXTXR_ERROR_SPATIAL_IMAGE_INVALID_EXTXR_ERROR_SPATIAL_IMAGE_SIZE_MISSING_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialImageTrackingDatabaseCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t spatialReferenceImageCount;
const XrSpatialReferenceImageEXT* spatialReferenceImages;
} XrSpatialImageTrackingDatabaseCreateInfoEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।spatialReferenceImageCountহলspatialReferenceImagesঅ্যারেতে থাকা এলিমেন্টের সংখ্যা।spatialReferenceImagesহল XrSpatialReferenceImageEXT-এর একটি অ্যারে।
XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারটি XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল তৈরি করার তথ্য বর্ণনা করে।
প্রতিটি XrSpatialImageTrackingDatabaseEXT অবশ্যই XrSpatialImageTrackingDatabaseCreateInfoEXT :: spatialReferenceImages অ্যারেতে অন্তত একটি XrSpatialReferenceImageEXT সহ তৈরি করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialImageTrackingDatabaseCreateInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_IMAGE_TRACKING_DATABASE_CREATE_INFO_EXTহতে হবে -
nextঅবশ্যইNULLহতে হবে অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialImageSizeEXT , XrSpatialImageStaticOptimizationEXT -
spatialReferenceImagesঅবশ্যইspatialReferenceImageCountটি সঠিক XrSpatialReferenceImageEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
spatialReferenceImageCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
xrCreateSpatialImageTrackingDatabaseCompleteEXT ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrCreateSpatialImageTrackingDatabaseCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialImageTrackingDatabaseCompletionEXT* completion);
প্যারামিটারের বিবরণ
sessionহল XrSession যা আগে xrCreateSpatialContextAsyncEXT ::session-এ পাস করা হয়েছে।futureহল xrCreateSpatialContextAsyncEXT থেকে পাওয়াXrFutureEXT।completionহল XrCreateSpatialImageTrackingDatabaseCompletionEXT-এর একটি পয়েন্টার।
xrCreateSpatialImageTrackingDatabaseCompleteEXT, xrCreateSpatialImageTrackingDatabaseAsyncEXT দ্বারা শুরু করা অ্যাসিঙ্ক্রোনাস অপারেশন সম্পূর্ণ করে।
রানটাইম অবশ্যই কোনও XrSpatialReferenceImagePlaneEXT :: buffer পয়েন্টার অ্যাক্সেস করবে না যা XrSpatialImageTrackingDatabaseCreateInfoEXT :: spatialReferenceImages ইনপুট অ্যারে এই xrCreateSpatialImageTrackingDatabaseAsyncEXT কলের জন্য প্রদান করেছে, এটি সম্পূর্ণ হওয়ার পরে। xrCreateSpatialImageTrackingDatabaseAsyncEXT সম্পূর্ণ হওয়ার পরে, মেমরি ফুটপ্রিন্ট কমানোর জন্য, অ্যাপ্লিকেশনটি যেকোনও XrSpatialReferenceImagePlaneEXT :: buffer ডেটা ফ্রি করতে পারে।
future রেডি অবস্থায় না থাকলে রানটাইমকে XR_ERROR_FUTURE_PENDING_EXT রিটার্ন করতেই হবে। future আগে থেকেই সম্পূর্ণ বা বাতিল করা হয়ে থাকলে, রানটাইমকে XR_ERROR_FUTURE_INVALID_EXT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialImageTrackingDatabaseCompleteEXT কল করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন চালু করতেই হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
completionঅবশ্যই XrCreateSpatialImageTrackingDatabaseCompletionEXT স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_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
XrCreateSpatialImageTrackingDatabaseCompletionEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrCreateSpatialImageTrackingDatabaseCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialImageTrackingDatabaseEXT database;
} XrCreateSpatialImageTrackingDatabaseCompletionEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।futureResultহল স্পেশিয়াল ইমেজ ট্র্যাকিং ডেটাবেস তৈরি করার অপারেশনের XrResult।databaseহল একটি XrSpatialImageTrackingDatabaseEXT যা xrCreateSpatialImageTrackingDatabaseAsyncEXT ::createInfo-এ ডেটা এবং কনফিগারেশন ব্যবহার করে তৈরি করা হয়েছে।
ভবিষ্যতের রিটার্ন কোড
futureResult ভ্যালু:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_IMAGE_FORMAT_UNSUPPORTED_EXTXR_ERROR_SPATIAL_IMAGE_INVALID_EXT
futureResult যদি একটি সাকসেস কোড হয়, তাহলে database অবশ্যই একটি সঠিক হ্যান্ডেল হতে হবে। database বৈধ হলে, এটি শুধুমাত্র xrCreateSpatialImageTrackingDatabaseAsyncEXT :: session-এর লাইফসাইকেলের মধ্যে অথবা অ্যাপ্লিকেশন xrDestroySpatialImageTrackingDatabaseEXT-এর মাধ্যমে database ধ্বংস না করা পর্যন্ত বৈধ থাকে, যেটি আগে হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrCreateSpatialImageTrackingDatabaseCompletionEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_CREATE_SPATIAL_IMAGE_TRACKING_DATABASE_COMPLETION_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
futureResultঅবশ্যই একটি সঠিক XrResult মান হতে হবে -
databaseঅবশ্যই একটি সঠিক XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল হতে হবে
স্পেশিয়াল ইমেজ ট্র্যাকিং ডেটাবেস ধ্বংস করুন
xrDestroySpatialImageTrackingDatabaseEXT ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrDestroySpatialImageTrackingDatabaseEXT(
XrSpatialImageTrackingDatabaseEXT database);
প্যারামিটারের বিবরণ
databaseহল একটি XrSpatialImageTrackingDatabaseEXT যা আগে xrCreateSpatialImageTrackingDatabaseAsyncEXT দ্বারা তৈরি করা হয়েছে।
স্পেশিয়াল ইমেজ ডিসকভারি ও আপডেট করার টাস্ক সম্পূর্ণ হয়ে গেলে, database হ্যান্ডেল ও অন্তর্নিহিত রিসোর্স রিলিজ করার জন্য অ্যাপ্লিকেশনটি xrDestroySpatialImageTrackingDatabaseEXT ফাংশন কল করতে পারে।
অ্যাপ্লিকেশনটি xrDestroySpatialContextEXT কল করার আগে xrDestroySpatialImageTrackingDatabaseEXT ফাংশন কল করতে পারে। রানটাইম অবশ্যই আর এই ধ্বংস করা XrSpatialImageTrackingDatabaseEXT দ্বারা ম্যানেজ করা ছবি রিপোর্ট করবে না। রানটাইমকে অবশ্যই অন্যান্য ডেটাবেস দ্বারা ম্যানেজ করা ছবি সম্পর্কে রিপোর্ট করা চালিয়ে যেতে হবে।
রানটাইমকে অবশ্যই নিশ্চিত করতে হবে যে xrCreateSpatialDiscoverySnapshotCompleteEXT-এর মাধ্যমে ফিরিয়ে আনা ডিসকভারি স্ন্যাপশটে নষ্ট হয়ে যাওয়া বা অন্য কোনওভাবে ভুল XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল সম্পর্কিত ছবি নেই, এমনকি অ্যাপ্লিকেশন xrCreateSpatialDiscoverySnapshotAsyncEXT কল করার পরে হ্যান্ডেলটি নষ্ট হয়ে গেলেও। স্পেশিয়াল স্ন্যাপশটের ডেটা অপরিবর্তনীয় হওয়ার কারণে, database ধ্বংস করার আগে তৈরি করা যেকোনও XrSpatialSnapshotEXT হ্যান্ডেল অ্যাপ্লিকেশনকে ধ্বংস করতে হবে, অন্যথায় xrQuerySpatialComponentDataEXT ব্যবহার করার সময় অ্যাপ্লিকেশন ভুল XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল পেতে পারে।
XrSpatialContextEXT যে XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল দিয়ে তৈরি করা হয়েছে, তার কোনওটি নষ্ট করার আগে XrSpatialContextEXT হ্যান্ডেল রিলিজ করার জন্য অ্যাপ্লিকেশনটি xrDestroySpatialContextEXT ফাংশন কল করতে পারে। XrSpatialContextEXT ধ্বংস হয়ে গেলে রানটাইমকে অবশ্যই এই XrSpatialImageTrackingDatabaseEXT হ্যান্ডেলগুলি ধ্বংস করতে হবে।
XrSpatialContextEXT এবং XrSpatialImageTrackingDatabaseEXT-এর লাইফটাইম স্বাধীনভাবে ম্যানেজ করার ফলে, অ্যাপ্লিকেশনগুলি আগে তৈরি করা XrSpatialImageTrackingDatabaseEXT হ্যান্ডেলগুলি আবার ব্যবহার করতে পারে, যার ফলে জটিল এবং ব্যয়বহুল তৈরির পদ্ধতি আবার করতে হয় না।
যেমন, একটি XrSpatialContextEXT ধ্বংস করা এবং পরবর্তীতে একই XrSpatialImageTrackingDatabaseEXT সহ আরেকটি XrSpatialContextEXT পুনরায় তৈরি করা, অন্য একটি ইনিশিয়ালাইজেশন পদ্ধতি সম্পাদন করার প্রয়োজন ছাড়াই ইমেজ ট্র্যাকিং পজ এবং আবার চালু করার সুবিধা দেয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrDestroySpatialImageTrackingDatabaseEXT কল করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
databaseঅবশ্যই একটি সঠিক XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল হতে হবে
থ্রেড নিরাপত্তা
databaseএবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
ইনপুট ছবির ফর্ম্যাট সাপোর্ট
অ্যাপ্লিকেশনকে xrEnumerateSpatialReferenceImageFormatsEXT কল করতে হবে যাতে কাজ করে এমন ইনপুট রেফারেন্স ইমেজ ফর্ম্যাটের তালিকা পাওয়া যায়।
xrEnumerateSpatialReferenceImageFormatsEXT ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrEnumerateSpatialReferenceImageFormatsEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t formatCapacityInput,
uint32_t* formatCountOutput,
XrSpatialReferenceImageFormatEXT* formats);
প্যারামিটারের বিবরণ
instanceহল XrInstance-এর হ্যান্ডেল।systemIdহলXrSystemIdযার ইনপুট রেফারেন্স ইমেজের ফর্ম্যাট গণনা করা হবে।capabilityহল XrSpatialCapabilityEXT যার জন্য ইনপুট রেফারেন্স ইমেজ ফর্ম্যাট গণনা করা হবে।formatCapacityInputহলformatsঅ্যারের ক্যাপাসিটি, অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনার অনুরোধ জানাতে 0।formatCountOutputহল ফর্ম্যাটের সংখ্যা, অথবাformatCapacityInputপর্যাপ্ত না হলে প্রয়োজনীয় ক্ষমতা।formatsহল XrSpatialReferenceImageFormatEXT-এর একটি অ্যারে।formatCapacityInput০ হলে এটিNULLহতে পারে।- প্রয়োজনীয়
formatsসাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার বিভাগ দেখুন।
অ্যাপ্লিকেশনটি xrEnumerateSpatialReferenceImageFormatsEXT ব্যবহার করে নির্দিষ্ট XrSpatialCapabilityEXT-এর জন্য নির্দিষ্ট XrSystemId দ্বারা সমর্থিত ইনপুট রেফারেন্স ইমেজ ফর্ম্যাটের তালিকা গণনা করতে পারে।
রানটাইম অবশ্যই instance-এর জন্য চালু না থাকা এক্সটেনশনের ফর্ম্যাট গণনা করবে না।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrEnumerateSpatialReferenceImageFormatsEXT কল করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
instanceঅবশ্যই একটি সঠিক XrInstance হ্যান্ডেল হতে হবে -
capabilityঅবশ্যই একটি সঠিক XrSpatialCapabilityEXT ভ্যালু হতে হবে -
formatCountOutputঅবশ্যইuint32_tভ্যালুর পয়েন্টার হতে হবে -
formatCapacityInputযদি0না হয়, তাহলেformatsঅবশ্যইformatCapacityInputXrSpatialReferenceImageFormatEXT মানের অ্যারের পয়েন্টার হতে হবে
রিটার্ন কোড
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
যেকোনও এক্সটেনশনে কাজ করে এমন সব রেফারেন্স ইমেজ ফর্ম্যাটের সম্পূর্ণ তালিকা দেখতে XrSpatialReferenceImageFormatEXT দেখুন।
typedef enum XrSpatialReferenceImageFormatEXT {
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT = 1,
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGB_888_EXT = 2,
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_YUV_420_888_EXT = 3,
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialReferenceImageFormatEXT;
XrSpatialReferenceImageFormatEXT এনিউমারেশন ইনপুট রেফারেন্স ইমেজ ফর্ম্যাট শনাক্ত করে যা রানটাইম হয়ত সাপোর্ট করে।
অন্তত XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT ভ্যালু এবং XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGB_888_EXT ভ্যালু অবশ্যই কাজ করতে হবে।
এনিউমারেন্টের অর্থ নিচে দেওয়া হল:
Enumerant-এর বিবরণ
XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT— একটি RGBA বাফার। মেমরিতে পিক্সেল ডেটার লেআউট সম্পর্কে ফর্ম্যাটটি কোনও গ্যারান্টি দেয় না। সংশ্লিষ্ট XrSpatialReferenceImagePlaneEXT স্ট্রাকচারের মাধ্যমে প্রদান করা মেটাডেটা ব্যবহার করে পিক্সেল অবশ্যই অ্যাক্সেস করতে হবে। প্রতিটি পিক্সেল কালার চ্যানেলের সাইজ ৮ বিট, যার ফলে প্রতিটি পিক্সেলের সাইজ ৩২ বিট হয়।XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGB_888_EXT— একটি RGB বাফার। মেমরিতে পিক্সেল ডেটার লেআউট সম্পর্কে ফর্ম্যাটটি কোনও গ্যারান্টি দেয় না। সংশ্লিষ্ট XrSpatialReferenceImagePlaneEXT স্ট্রাকচারের মাধ্যমে প্রদান করা মেটাডেটা ব্যবহার করে পিক্সেল অবশ্যই অ্যাক্সেস করতে হবে। প্রতিটি পিক্সেল কালার চ্যানেলের সাইজ ৮ বিট, যার ফলে প্রতিটি পিক্সেলের সাইজ ২৪ বিট হয়।XR_SPATIAL_REFERENCE_IMAGE_FORMAT_YUV_420_888_EXT— একটি YUV বাফার যা 4:2:0 প্যাটার্ন ক্রোমা সাব-স্যাম্পল করা হয়েছে। মেমরিতে পিক্সেল ডেটার লেআউট সম্পর্কে ফর্ম্যাটটি কোনও গ্যারান্টি দেয় না। সংশ্লিষ্ট XrSpatialReferenceImagePlaneEXT স্ট্রাকচারের মাধ্যমে প্রদান করা মেটাডেটা ব্যবহার করে পিক্সেল অবশ্যই অ্যাক্সেস করতে হবে। ডিকোড করা প্রতিটি RGB পিক্সেল কালার চ্যানেলের সাইজ ৮ বিট, যার ফলে প্রতিটি পিক্সেলের সাইজ ২৪ বিট হয়।
স্পেশিয়াল ইমেজ ট্র্যাকিং সেটিংস
এই এক্সটেনশনটি ঐচ্ছিক স্ট্রাকচার প্রদান করে যা অ্যাপ্লিকেশনটি ইমেজ ট্র্যাকিং ক্ষমতা কনফিগার করার জন্য ব্যবহার করতে পারে।
স্ট্যাটিক ইমেজ অপ্টিমাইজেশন
XrSpatialImageStaticOptimizationEXT স্ট্রাকচারটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialImageStaticOptimizationEXT {
XrStructureType type;
const void* next;
XrBool32 optimizeForStaticImage;
} XrSpatialImageStaticOptimizationEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।optimizeForStaticImageহল একটিXrBool32যা ছবি নড়াচড়া করে কিনা তা নির্দেশ করে।XR_TRUEভ্যালু থাকলে বুঝতে হবে যে ছবিগুলি নড়াচড়া করে না।
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT ক্ষমতার জন্য xrEnumerateSpatialCapabilityFeaturesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT গণনা করা হলে, অ্যাপ্লিকেশনটি XrSpatialImageStaticOptimizationEXT-কে XrSpatialImageTrackingDatabaseCreateInfoEXT :: next চেনের সাথে অথবা XrSpatialReferenceImageEXT :: next-এর সাথে চেন করতে পারবে।
অ্যাপ্লিকেশন যদি XrSpatialImageStaticOptimizationEXT-কে XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারের সাথে চেন করে, তাহলে রানটাইমকে অবশ্যই ধরে নিতে হবে যে XrSpatialImageTrackingDatabaseEXT-এর সব ছবি স্ট্যাটিক, যদি optimizeForStaticImage-কে XR_TRUE হিসেবে সেট করা হয়। একইভাবে, রানটাইমকে অবশ্যই ধরে নিতে হবে যে optimizeForStaticImage-কে XR_FALSE-এ সেট করা হলে, সেই XrSpatialImageTrackingDatabaseEXT-এর সব ছবি স্ট্যাটিক নয়।
অ্যাপ্লিকেশন যদি XrSpatialReferenceImageEXT স্ট্রাকচারে XrSpatialImageStaticOptimizationEXT চেন করে, তাহলে রানটাইমকে অবশ্যই ধরে নিতে হবে যে এই রেফারেন্স ইমেজটি স্ট্যাটিক, যদি optimizeForStaticImage-কে XR_TRUE-এ সেট করা হয়। একইভাবে, রানটাইমকে অবশ্যই ধরে নিতে হবে যে optimizeForStaticImage-এর মান XR_FALSE-এ সেট করা থাকলে এই রেফারেন্স ইমেজটি স্ট্যাটিক নয়। XrSpatialReferenceImageEXT স্ট্রাকচারের সাথে XrSpatialImageStaticOptimizationEXT স্ট্রাকচার চেইন করা, XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারের সাথে চেইন করার চেয়ে বেশি অগ্রাধিকার পায়।
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT ক্ষমতার জন্য xrEnumerateSpatialCapabilityFeaturesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT গণনা করা না হলে এবং অ্যাপ্লিকেশনটি প্রযোজ্য পরবর্তী চেনের যেকোনও একটির সাথে XrSpatialImageStaticOptimizationEXT স্ট্রাকচার চেন করলে, রানটাইমকে অবশ্যই xrCreateSpatialImageTrackingDatabaseAsyncEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
এটি রানটাইমকে আরও সঠিক পোজ এবং সাইজ তৈরি করার অনুমতি দিতে পারে।
এটি রানটাইমকে বিদ্যুৎ খরচ কমাতে সাহায্য করতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialImageStaticOptimizationEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_IMAGE_STATIC_OPTIMIZATION_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
রেফারেন্স ইমেজের প্রস্থ
XrSpatialImageSizeEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialImageSizeEXT {
XrStructureType type;
const void* next;
float physicalWidth;
} XrSpatialImageSizeEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।physicalWidthহল একটিfloatমান যা সেট করার জন্য মিটারে প্রকৃত প্রস্থকে উপস্থাপন করে।
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT ক্ষমতার জন্য xrEnumerateSpatialCapabilityFeaturesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT গণনা করা হলে, অ্যাপ্লিকেশনটি XrSpatialImageSizeEXT-কে XrSpatialImageTrackingDatabaseCreateInfoEXT :: next বা XrSpatialReferenceImageEXT :: next-এর সাথে চেইন করতে পারবে।
অ্যাপ্লিকেশনটি XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারে XrSpatialImageSizeEXT চেইন করলে, রানটাইমকে অবশ্যই ধরে নিতে হবে যে XrSpatialImageTrackingDatabaseEXT-এর সব ছবির প্রস্থ physicalWidth মিটার এবং উচ্চতা XrSpatialReferenceImageEXT :: width এবং XrSpatialReferenceImageEXT :: height-এর মাধ্যমে স্পষ্টভাবে প্রদান করা অ্যাসপেক্ট রেশিও অনুযায়ী হবে।
অ্যাপ্লিকেশন যদি XrSpatialImageSizeEXT-কে XrSpatialReferenceImageEXT স্ট্রাকচারের সাথে চেন করে, তাহলে রানটাইমকে অবশ্যই ধরে নিতে হবে যে এই রেফারেন্স ইমেজের প্রস্থ physicalWidth মিটার এবং উচ্চতা XrSpatialReferenceImageEXT :: width এবং XrSpatialReferenceImageEXT :: height-এর মাধ্যমে ইমপ্লিসিটভাবে প্রদান করা অ্যাসপেক্ট রেশিও অনুযায়ী। XrSpatialImageSizeEXT স্ট্রাকচারকে XrSpatialReferenceImageEXT স্ট্রাকচারের সাথে চেইন করা, XrSpatialImageTrackingDatabaseCreateInfoEXT স্ট্রাকচারের সাথে চেইন করার চেয়ে বেশি অগ্রাধিকার পায়।
এটি রানটাইমকে আরও সঠিক পোজ এবং সাইজ ফিরিয়ে দেওয়ার অনুমতি দিতে পারে।
রানটাইমে অবশ্যই XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT বা XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT অথবা দুটিই গণনা করতে হবে।
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT যদি xrEnumerateSpatialCapabilityFeaturesEXT দ্বারা গণনা করা হয়, তাহলে রানটাইমকে অবশ্যই অটোমেটিক ছবির সাইজ প্রদান করতে হবে, যার জন্য অ্যাপ্লিকেশনটি প্রযোজ্য পরবর্তী চেনের অংশ হিসেবে কোনও XrSpatialImageSizeEXT স্ট্রাকচার প্রদান করেনি।
রানটাইম যাতে অটোমেটিক ও সঠিকভাবে ছবির সাইজ জেনারেট করতে পারে, তার জন্য ডিভাইসের নির্দিষ্ট কিছু ক্ষমতা ও পূর্বশর্তের প্রয়োজন হতে পারে; যেমন, স্টেরিও ক্যামেরা, সঠিকভাবে ক্যালিব্রেট করা ক্যামেরার এক্সট্রিনসিক ও ইন্ট্রিনসিক প্যারামিটার।
xrEnumerateSpatialCapabilityFeaturesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT গণনা করা না হলে, অ্যাপ্লিকেশনকে অবশ্যই XrSpatialImageSizeEXT স্ট্রাকচারকে প্রযোজ্য পরবর্তী চেনে লিঙ্ক করতে হবে যাতে সব ছবির জন্য একটি নির্দিষ্ট সাইজ প্রদান করা হয়, অন্যথায় রানটাইমকে অবশ্যই xrCreateSpatialImageTrackingDatabaseAsyncEXT থেকে XR_ERROR_SPATIAL_IMAGE_SIZE_MISSING_EXT ফিরিয়ে দিতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialImageSizeEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_IMAGE_SIZE_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
XrSpatialCapabilityConfigurationImageTrackingEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialCapabilityConfigurationImageTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
uint32_t imageTrackingDatabaseCount;
const XrSpatialImageTrackingDatabaseEXT* imageTrackingDatabases;
} XrSpatialCapabilityConfigurationImageTrackingEXT;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।capabilityহল একটি XrSpatialCapabilityEXT এবং অবশ্যইXR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXTহতে হবে।enabledComponentCountহল একটিuint32_tযাenabledComponents-এ এলিমেন্টের সংখ্যা নির্দিষ্ট করে।enabledComponentsহল XrSpatialComponentTypeEXT-এর একটি অ্যারে যা এই ক্ষমতার জন্য চালু করার কম্পোনেন্ট নির্দিষ্ট করে।imageTrackingDatabaseCountহল একটিunint32_tযাimageTrackingDatabases-এ এলিমেন্টের সংখ্যা নির্দিষ্ট করে।imageTrackingDatabasesহল XrSpatialImageTrackingDatabaseEXT হ্যান্ডেলের একটি অ্যারে যা স্পেশাল কনটেক্সটের জন্য চালু করতে ইমেজ ট্র্যাকিং ডেটাবেস নির্দিষ্ট করে।
ইমেজ ট্র্যাকিং কাজ করলে, xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ XrSpatialCapabilityConfigurationImageTrackingEXT স্ট্রাকচার পাস করা হলে, রানটাইমকে অবশ্যই ইমেজ ট্র্যাকিং চালু করতে হবে।
XrSpatialCapabilityConfigurationImageTrackingEXT স্ট্রাকচার, অ্যাপ্লিকেশনকে imageTrackingDatabases-এ XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল দ্বারা উপস্থাপিত রেফারেন্স ইমেজ খুঁজে পেতে সাহায্য করে।
xrEnumerateSpatialCapabilitiesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT গণনা করা না হলে, রানটাইমকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationImageTrackingEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_IMAGE_TRACKING_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
capabilityঅবশ্যই একটি সঠিক XrSpatialCapabilityEXT ভ্যালু হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountটি সঠিক XrSpatialComponentTypeEXT মানের অ্যারের পয়েন্টার হতে হবে -
imageTrackingDatabasesঅবশ্যইimageTrackingDatabaseCountটি সঠিক XrSpatialImageTrackingDatabaseEXT হ্যান্ডেলের অ্যারের পয়েন্টার হতে হবে -
enabledComponentCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে -
imageTrackingDatabaseCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
স্পেশিয়াল রেফারেন্স ইমেজ
XrSpatialReferenceImagePlaneEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialReferenceImagePlaneEXT {
uint32_t bufferSize;
uint8_t* buffer;
uint32_t rowStride;
uint32_t pixelStride;
} XrSpatialReferenceImagePlaneEXT;
প্যারামিটারের বিবরণ
bufferSizeহলbufferঅ্যারের সাইজ।bufferহলuint8_tডেটার একটি অ্যারে যা প্লেন ডেটাকে উপস্থাপন করে।rowStrideহল পরপর পিক্সেল ডেটা সারির দুটি শুরুর অবস্থানের মধ্যে বাইট দূরত্ব।pixelStrideহল পরপর দুটি পিক্সেলের মধ্যে বাইট দূরত্ব।
রানটাইমকে rowStride এবং pixelStride প্যারামিটার দ্বারা প্রদত্ত প্যাটার্ন অনুযায়ী buffer অ্যাক্সেস করতেই হবে।
অ্যাপ্লিকেশনকে rowStride এবং pixelStride অবশ্যই সেট করতে হবে যাতে রানটাইম দ্বারা এই XrSpatialReferenceImagePlaneEXT-এর শুধুমাত্র অর্থপূর্ণ পিক্সেল এক্সট্র্যাক্ট করা হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialReferenceImagePlaneEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
bufferঅবশ্যইbufferSizeuint8_tমানের অ্যারের পয়েন্টার হতে হবে -
bufferSizeপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
XrSpatialReferenceImageEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialReferenceImageEXT {
XrStructureType type;
const void* next;
uint32_t width;
uint32_t height;
XrSpatialReferenceImageFormatEXT format;
uint32_t planeCount;
const XrSpatialReferenceImagePlaneEXT* planes;
} XrSpatialReferenceImageEXT;
প্যারামিটারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।widthহল রেফারেন্স ইমেজের পিক্সেল প্রস্থ।heightহল রেফারেন্স ইমেজের পিক্সেল উচ্চতা।formatহল একটি XrSpatialReferenceImageFormatEXT যা ছবির ফর্ম্যাটকে উপস্থাপন করে।planeCountহলplanesঅ্যারেতে থাকা এলিমেন্টের সংখ্যা।planesহল XrSpatialReferenceImagePlaneEXT স্ট্রাকচারের একটি অ্যারে যা ইমেজ ডেটার প্লেনকে উপস্থাপন করে।
অ্যাপ্লিকেশনটি এক বা একাধিক XrSpatialReferenceImageEXT স্ট্রাকচার তৈরি করতে পারে, যার প্রতিটি XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল তৈরি করার সময় XrSpatialImageTrackingDatabaseCreateInfoEXT :: spatialReferenceImages-এর মাধ্যমে xrCreateSpatialImageTrackingDatabaseAsyncEXT ফাংশনে পাস করার জন্য একটি একক ইনপুট রেফারেন্স ইমেজকে উপস্থাপন করে।
XrSpatialReferenceImagePlaneEXT :: buffer ডেটা অবশ্যই অ্যাপ্লিকেশন দ্বারা বাঁদিক থেকে ডানদিকে এবং উপর থেকে নিচে পিক্সেল অর্ডারে সরবরাহ করতে হবে।
অ্যাপ্লিকেশনটিকে XrSpatialReferenceImageEXT :: format-এর প্রতিটি কালার চ্যানেলের জন্য XrSpatialReferenceImageEXT :: planes অ্যারেতে XrSpatialReferenceImagePlaneEXT স্ট্রাকচার প্রদান করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialReferenceImageEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_REFERENCE_IMAGE_EXTহতে হবে -
nextঅবশ্যইNULLহতে হবে অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialAnnotationQuadReferenceANDROID , XrSpatialImageSizeEXT , XrSpatialImageStaticOptimizationEXT -
formatঅবশ্যই একটি সঠিক XrSpatialReferenceImageFormatEXT ভ্যালু হতে হবে -
planesঅবশ্যইplaneCountটি সঠিক XrSpatialReferenceImagePlaneEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
planeCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
গ্যারেন্টিযুক্ত কম্পোনেন্ট
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT-কে সাপোর্ট করে এমন রানটাইমকে অবশ্যই নিম্নলিখিত স্পেশিয়াল কম্পোনেন্টগুলি প্রদান করতে হবে, যা সেইসব ক্ষমতার মাধ্যমে আবিষ্কৃত সমস্ত এন্টিটির গ্যারান্টিযুক্ত কম্পোনেন্ট হিসেবে কাজ করবে এবং সেগুলিকে xrEnumerateSpatialCapabilityComponentTypesEXT-এ তালিকাভুক্ত করতে হবে:
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
ইমেজ 2D কম্পোনেন্ট
কোয়েরি ডেটার জন্য কম্পোনেন্ট লিস্ট স্ট্রাক্ট
XrSpatialComponentImage2DListEXT স্ট্রাকচারটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialComponentImage2DListEXT {
XrStructureType type;
const void* next;
uint32_t imageCount;
XrSpatialImage2DDataEXT* images;
} XrSpatialComponentImage2DListEXT;
প্যারামিটারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার।imageCountহলimagesঅ্যারেতে থাকা এলিমেন্টের সংখ্যা।imagesহল XrSpatialImage2DDataEXT-এর একটি অ্যারে।
XrSpatialComponentImage2DListEXT যদি XrSpatialComponentDataQueryResultEXT :: next চেনে থাকে, কিন্তু XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT যদি XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE ফিরিয়ে দিতেই হবে।
imageCount যদি XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput-এর থেকে কম হয়, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentImage2DListEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_IMAGE_2D_LIST_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
imagesঅবশ্যইimageCountXrSpatialImage2DDataEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
imageCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কম্পোনেন্ট ডেটা
XrSpatialImage2DDataEXT স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialImage2DDataEXT {
XrSpatialImageTrackingDatabaseEXT imageTrackingDatabase;
uint32_t referenceImageIndex;
} XrSpatialImage2DDataEXT;
প্যারামিটারের বিবরণ
imageTrackingDatabaseহল XrSpatialImageTrackingDatabaseEXT যা ছবি শনাক্ত বা ট্র্যাক করেছে।referenceImageIndexহল ইনডেক্স যা XrSpatialImageTrackingDatabaseCreateInfoEXT ::spatialReferenceImagesইনপুট রেফারেন্স ইমেজের অ্যারেতে ম্যাপ করে, যার সাহায্যেimageTrackingDatabaseতৈরি করা হয়েছে।
আগে তৈরি করা কোন XrSpatialImageTrackingDatabaseEXT-এ এই XrSpatialImage2DDataEXT স্ট্রাকচারের রেফারেন্স ইমেজ আছে তা শনাক্ত করতে, অ্যাপ্লিকেশন imageTrackingDatabase ব্যবহার করতে পারে। সেই XrSpatialImageTrackingDatabaseEXT-এর জন্য, অ্যাপ্লিকেশন পারে referenceImageIndex ব্যবহার করতে, এই XrSpatialImage2DDataEXT স্ট্রাকচারের XrSpatialReferenceImageEXT শনাক্ত করতে, XrSpatialImageTrackingDatabaseCreateInfoEXT :: spatialReferenceImages অ্যারের ইনপুট অর্ডারের সাথে এটি ম্যাচ করে।
সব অ্যাক্টিভ ডেটাবেসের সেট দ্বারা নির্ধারিত রেফারেন্স ইমেজের সেটে ডুপ্লিকেট ইমেজ অন্তর্ভুক্ত করা উচিত নয়। ডুপ্লিকেট ছবি অন্তর্ভুক্ত করলে তা ডিসকভারি বা ট্র্যাকিং আচরণে বিরূপ প্রভাব ফেলতে পারে; অর্থাৎ, অসামঞ্জস্যপূর্ণ বা একাধিক ইন্ডেক্স রিটার্ন করা হতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialImage2DDataEXT ব্যবহার করার আগে
XR_EXT_spatial_image_trackingএক্সটেনশন অবশ্যই চালু করতে হবে -
imageTrackingDatabaseঅবশ্যই একটি সঠিক XrSpatialImageTrackingDatabaseEXT হ্যান্ডেল হতে হবে
কনফিগারেশন
কিছু ক্ষমতার জন্য XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT যদি XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ গণনা করা হয়, তাহলে অ্যাপ্লিকেশনটি XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents তালিকায় enum মান অন্তর্ভুক্ত করে এটি চালু করতে পারে। XrSpatialCapabilityConfigurationBaseHeaderEXT-এর পরবর্তী চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
বাউন্ডেড 2D কম্পোনেন্ট
বাউন্ডেড 2D কম্পোনেন্ট, স্পেশাল ইমেজের কেন্দ্র এবং এক্সটেন্ট প্রদান করে, যা এটি যে এন্টিটিতে আছে তার দ্বারা উপস্থাপিত হয়। বাউন্ডেড 2D কম্পোনেন্ট সম্পর্কে আরও জানতে বাউন্ডেড 2D দেখুন।
কোডের উদাহরণ
স্পেশিয়াল ইমেজ ও কোয়েরি কম্পোনেন্ট ডেটা খুঁজে দেখা
নিচের উদাহরণ কোডটি দেখায় যে কীভাবে ইমেজ ট্র্যাকিং ক্ষমতার জন্য স্পেশিয়াল এন্টিটি আবিষ্কার করা যায় এবং এর কম্পোনেন্ট ডেটা কোয়েরি করা যায়।
XrInstance instance; // Previously initialized
XrSystemId systemId; // Previously initialized
XrSession session; // Previously initialized
uint32_t capabilityCountOutput = 0;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCountOutput, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCountOutput);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilities.size(), &capabilityCountOutput, capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT) == capabilities.end()) {
// Image tracking not supported
}
XrSpatialCapabilityComponentTypesEXT imageTrackingComponents{XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, &imageTrackingComponents));
std::vector<XrSpatialComponentTypeEXT> imageTrackingCapabilityComponents(imageTrackingComponents.componentTypeCountOutput);
imageTrackingComponents.componentTypes = imageTrackingCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, &imageTrackingComponents));
if (std::find(imageTrackingCapabilityComponents.begin(), imageTrackingCapabilityComponents.end(), XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT) == imageTrackingCapabilityComponents.end()) {
// The image2d component is not supported
}
uint32_t capabilityFeatureCountOutput = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, 0, &capabilityFeatureCountOutput, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> capabilityFeatures(capabilityFeatureCountOutput);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, capabilityFeatures.size(), &capabilityFeatureCountOutput, capabilityFeatures.data()));
// Helper function to query optional feature support
const auto supportsFeature = [&capabilityFeatures](XrSpatialCapabilityFeatureEXT feature) {
return std::find(capabilityFeatures.begin(), capabilityFeatures.end(), feature) != capabilityFeatures.end();
};
// supported state for optional features
const bool supportsAutomaticScaleEstimation = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT);
const bool supportsStaticImages = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT);
const bool supportsFixedSizeImages = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT);
uint32_t formatCountOutput = 0;
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, 0, &formatCountOutput, nullptr));
std::vector<XrSpatialReferenceImageFormatEXT> formats(formatCountOutput);
CHK_XR(xrEnumerateSpatialReferenceImageFormatsEXT(instance, systemId, XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT, formats.size(), &formatCountOutput, formats.data()));
if (std::find(formats.begin(), formats.end(), XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT) == formats.end()) {
// The desired format is not supported
}
// Helper function to wait for XrFutureEXT completion
auto waitUntilReady = [&](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Data/metadata about reference images (identifiers, 3D models, trigger functions, etc.)
std::vector<std::string> referenceImageIdentifiers;
XrSpatialImageTrackingDatabaseEXT imageTrackingDatabase{};
{
uint32_t imgSize; // preloaded interleaved RGBA buffer size
uint8_t* img; // preloaded interleaved RGBA buffer data
// interleaved RGBA buffer memory layout and buffer positions
// first row of pixels
// img[0] | img[1] | img[2] | img[3] | img[0]+pStride | img[1]+pStride | ...
// R0 | G0 | B0 | A0 | R1 | G1 | ...
// second row of pixels
// img[0]+rStride | img[1]+rStride | img[2]+rStride | img[3]+rStride | img[0]+rStride+pStride | ...
// R640 | G640 | B640 | A640 | R641 | ...
XrSpatialReferenceImagePlaneEXT spatialReferenceImagePlanes[4];
for (int i = 0; i < 4; ++i) { // for each plane (0=R, 1=G, 2=B, 3=A)
spatialReferenceImagePlanes[i].buffer = img + i; // set each plane buffer pointer to the first pixel of the plane
spatialReferenceImagePlanes[i].bufferSize = imgSize - i; // adjust remeinaing buffer size according to offset applied
spatialReferenceImagePlanes[i].rowStride = 640 * 4; // set byte offset to start of next row for this plane
spatialReferenceImagePlanes[i].pixelStride = 4; // set byte offset to next pixel for this plane
}
XrSpatialReferenceImageEXT spatialReferenceImage{XR_TYPE_SPATIAL_REFERENCE_IMAGE_EXT};
spatialReferenceImage.width = 640;
spatialReferenceImage.height = 480;
spatialReferenceImage.format = XR_SPATIAL_REFERENCE_IMAGE_FORMAT_RGBA_8888_EXT;
spatialReferenceImage.planeCount = 4;
spatialReferenceImage.planes = spatialReferenceImagePlanes;
referenceImageIdentifiers.emplace_back("MyReferenceImage");
// Helper function to append to the next chain
XrBaseOutStructure* appendTo = reinterpret_cast<XrBaseOutStructure*>(&spatialReferenceImage);
const auto appendToNextChain = [&appendTo](XrBaseOutStructure* toAppend) {
appendTo->next = toAppend;
appendTo = toAppend;
};
XrSpatialImageSizeEXT imageSize{XR_TYPE_SPATIAL_IMAGE_SIZE_EXT};
imageSize.physicalWidth = 0.1f;
if (!supportsAutomaticScaleEstimation) {
if (supportsFixedSizeImages) {
appendToNextChain(reinterpret_cast<XrBaseOutStructure*>(&imageSize));
}
}
XrSpatialImageStaticOptimizationEXT imageStaticOptimization{XR_TYPE_SPATIAL_IMAGE_STATIC_OPTIMIZATION_EXT};
imageStaticOptimization.optimizeForStaticImage = XR_TRUE;
if (supportsStaticImages) {
appendToNextChain(reinterpret_cast<XrBaseOutStructure*>(&imageStaticOptimization));
}
XrSpatialImageTrackingDatabaseCreateInfoEXT spatialImageTrackingDatabaseCreateInfo{XR_TYPE_SPATIAL_IMAGE_TRACKING_DATABASE_CREATE_INFO_EXT};
spatialImageTrackingDatabaseCreateInfo.spatialReferenceImages = &spatialReferenceImage;
spatialImageTrackingDatabaseCreateInfo.spatialReferenceImageCount = 1;
XrFutureEXT createImageTrackingDatabaseFuture = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialImageTrackingDatabaseAsyncEXT(session, &spatialImageTrackingDatabaseCreateInfo, &createImageTrackingDatabaseFuture));
waitUntilReady(createImageTrackingDatabaseFuture);
XrCreateSpatialImageTrackingDatabaseCompletionEXT imageTrackingCompletion{XR_TYPE_CREATE_SPATIAL_IMAGE_TRACKING_DATABASE_COMPLETION_EXT};
CHK_XR(xrCreateSpatialImageTrackingDatabaseCompleteEXT(session, createImageTrackingDatabaseFuture, &imageTrackingCompletion));
if (imageTrackingCompletion.futureResult != XR_SUCCESS) {
// Error, image tracking database creation failed
}
imageTrackingDatabase = imageTrackingCompletion.database;
}
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 2> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
};
// Configure the image tracking capability for the spatial context
XrSpatialCapabilityConfigurationImageTrackingEXT imageTrackingCapabilityConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_IMAGE_TRACKING_EXT};
imageTrackingCapabilityConfig.capability = XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT;
imageTrackingCapabilityConfig.enabledComponentCount = enabledComponents.size();
imageTrackingCapabilityConfig.enabledComponents = enabledComponents.data();
imageTrackingCapabilityConfig.imageTrackingDatabaseCount = 1;
imageTrackingCapabilityConfig.imageTrackingDatabases = &imageTrackingDatabase;
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&imageTrackingCapabilityConfig));
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
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to look for entities that have the following components
std::array<XrSpatialComponentTypeEXT, 2> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT, XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT};
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 = localSpace;
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 the bounded2d component data
XrSpatialComponentTypeEXT componentsToQuery[] = {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT, XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT};
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
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<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
std::vector<XrSpatialImage2DDataEXT> image2d(queryResult.entityIdCountOutput);
XrSpatialComponentImage2DListEXT imagesList{XR_TYPE_SPATIAL_COMPONENT_IMAGE_2D_LIST_EXT};
imagesList.imageCount = image2d.size();
imagesList.images = image2d.data();
queryResult.next = &imagesList;
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 XrSpatialImage2DDataEXT& currentImage2d = image2d[i];
const std::string& currentReferenceImageIdentifier = referenceImageIdentifiers[currentImage2d.referenceImageIndex];
std::cout << currentReferenceImageIdentifier << std::endl; // Outputs the "MyReferenceImage" string the app defined previously; could be any other assocatied data or action.
// Access bounded2d[i] for image bounds
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// For every frame in frame loop
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_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);
break;
}
}
}
// Finish frame loop
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
// Unload spatial image tracking resources internally
CHK_XR(xrDestroySpatialImageTrackingDatabaseEXT(imageTrackingDatabase));
নতুন অবজেক্টের ধরন
নতুন কমান্ড
- xrCreateSpatialImageTrackingDatabaseAsyncEXT
- xrCreateSpatialImageTrackingDatabaseCompleteEXT
- xrDestroySpatialImageTrackingDatabaseEXT
- xrEnumerateSpatialReferenceImageFormatsEXT
নতুন স্ট্রাকচার
- XrCreateSpatialImageTrackingDatabaseCompletionEXT
- XrSpatialCapabilityConfigurationImageTrackingEXT
- XrSpatialImage2DDataEXT
- XrSpatialImageTrackingDatabaseCreateInfoEXT
- XrSpatialReferenceImageEXT
- XrSpatialReferenceImagePlaneEXT
XrSpatialComponentDataQueryResultEXT এক্সটেন্ড করা হচ্ছে :
XrSpatialReferenceImageEXT , XrSpatialImageTrackingDatabaseCreateInfoEXT এক্সটেন্ড করা হচ্ছে :
নতুন Enum
নতুন Enum কনস্ট্যান্ট
XR_EXT_SPATIAL_IMAGE_TRACKING_EXTENSION_NAMEXR_EXT_spatial_image_tracking_SPEC_VERSIONXrObjectType এক্সটেন্ড করা হচ্ছে :
XR_OBJECT_TYPE_SPATIAL_IMAGE_TRACKING_DATABASE_EXT
XrResult এক্সটেন্ড করা হচ্ছে :
XR_ERROR_SPATIAL_IMAGE_FORMAT_UNSUPPORTED_EXTXR_ERROR_SPATIAL_IMAGE_INVALID_EXTXR_ERROR_SPATIAL_IMAGE_SIZE_MISSING_EXT
XrSpatialCapabilityEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
XrSpatialCapabilityFeatureEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXTXR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXTXR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
XrSpatialComponentTypeEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
XrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_CREATE_SPATIAL_IMAGE_TRACKING_DATABASE_COMPLETION_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_IMAGE_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_IMAGE_2D_LIST_EXTXR_TYPE_SPATIAL_IMAGE_SIZE_EXTXR_TYPE_SPATIAL_IMAGE_STATIC_OPTIMIZATION_EXTXR_TYPE_SPATIAL_IMAGE_TRACKING_DATABASE_CREATE_INFO_EXTXR_TYPE_SPATIAL_REFERENCE_IMAGE_EXT
ইস্যু
ভার্সনের ইতিহাস
রিভিশন ১, ২২-০৪-২০২৫ (ড্যানিয়েল গুটেনবার্গ, Qualcomm)
- প্রাথমিক এক্সটেনশনের বিবরণ