XR_EXT_spatial_container
নামের স্ট্রিং
XR_EXT_spatial_container
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
811
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
শেষবার পরিবর্তন করার তারিখ
2026-08-06
IP স্ট্যাটাস
IP সংক্রান্ত কোনও দাবি নেই।
কন্ট্রিবিউটর
Jared Finder, Google
Andreas Loeve Selvik, Meta Platforms
Lachlan Ford, Google
Cass Everitt, Meta Platforms
Adam Gousetis, Meta Platforms
Ankur Agrawal, Unity Technologies
Bjorn Swenson, LÖVR
Denny Rönngren, Varjo Technologies
Fredia Huya-Kouadio, Godot Engine
Guodong Rong, Meta Platforms
Jakob Bornecrantz, NVIDIA
Jian Zhang, ByteDance
John Kearney, Meta Platforms
Jonathan Wright, Meta Platforms
Junfeng She, ByteDance
Kenny Vercaemer, Google
Kurtis Eveleigh, Qualcomm
Mauricio Narvaez, Meta Platforms
Nathan Nuber, Valve Corporation
Nihav Jain, Google
Nikita Lutsenko, Meta Platforms
Praveen Babu J D, ByteDance
Rylie Pavlik, Collabora
Salar Khan, Google
Shuai Liu, ByteDance
Walter Luh, Meta Platforms
Yin Li, Microsoft
Zhipeng Liu, ByteDance
এক নজরে
এই এক্সটেনশনটি প্রদর্শনযোগ্য এন্টিটির একটি নতুন ক্লাসকে সংজ্ঞায়িত করে, যাকে "স্পেশিয়াল কন্টেনার" বলা হয় যা ডেস্কটপ 2D উইন্ডোইং সিস্টেমে "উইন্ডো" ধারণার অনুরূপ।
OpenXR 1.x-এ, ব্যবহারকারী যা দেখেন এবং ব্যবহারকারীর বাস্তব বা ভার্চুয়াল পরিবেশের উপরে তা কীভাবে ব্লেন্ড করা হয়, তার সবকিছুর এক্সক্লুসিভ কন্ট্রোল অ্যাপের কাছে থাকে। ব্যবহারকারীর নিরাপত্তা নিশ্চিত করতে, রানটাইম শুধুমাত্র যা দেখানো হয় তাতে সামান্য পরিবর্তন করে। এই অ্যাপ মডেলটি ব্যবহারকারীকে একটি একক অভিজ্ঞতায় নিমজ্জিত করার জন্য ভালো, তবে এটি একাধিক যুগপৎ অভিজ্ঞতায় প্রসারিত হয় না। বিশেষ করে, AR এবং মিক্সড রিয়ালিটি পরিবেশে, ব্যবহারকারীরা প্রায়ই একই সময়ে একাধিক বিভিন্ন অ্যাপের অভিজ্ঞতা পেতে চান।
স্পেশিয়াল কন্টেনার হল 3D-তে এক্সটেন্ড করা উইন্ডোর মতো। ব্যবহারকারী একসাথে একাধিক স্পেশিয়াল কন্টেনার দেখতে পান এবং সেগুলির সাবসেটে ইনপুট প্রদান করেন। দৃশ্যমান স্পেশিয়াল কন্টেনারগুলি বিভিন্ন অ্যাপের অন্তর্গত হতে পারে এবং রানটাইম ব্যবহারকারীর হয়ে তাদের সাইজ ও প্লেসমেন্ট ম্যানেজ করে।
এই এক্সটেনশনটি আগে থেকে থাকা ইমারসিভ OpenXR অভিজ্ঞতা ছাড়াও এই নতুন ধরনের স্পেশিয়ালি বাউন্ডেড অভিজ্ঞতা প্রদান করে। বাউন্ডেড OpenXR অভিজ্ঞতায় সামান্য 3D কন্টেন্ট (সামান্য ডেপথ অফসেট সহ ফ্ল্যাট প্যানেল) বা সম্পূর্ণ 3D কন্টেন্ট হোস্ট করে এমন ভলিউম থাকতে পারে। ইমারসিভ OpenXR অভিজ্ঞতা হল আগে থেকে থাকা ফুল-স্ক্রিন ইমারসিভ অ্যাপ যা OpenXR 1.0 থেকে কাজ করে। অ্যাপ চাইলে দুই ধরনের কন্টেন্টের মধ্যে পরিবর্তন করতে পারে।
এই এক্সটেনশন কোনও অ্যাপের কন্টেন্ট রেন্ডার করার জন্য কোনও পদ্ধতি নির্ধারণ করে না। অন্যান্য এক্সটেনশনে কন্টেন্ট কীভাবে আঁকতে হয় তা সংজ্ঞায়িত করা আছে: XR_EXT_spatial_container_self_rendering .
স্পেশিয়াল কন্টেনার ব্যবহার করা
XrSpatialContainerEXT হল একটি হ্যান্ডেল যা স্পেশিয়াল কন্টেনারকে দেখায়।
XR_DEFINE_HANDLE(XrSpatialContainerEXT)
নিম্নলিখিত ধাপগুলি অনুসরণ করে একটি অ্যাপ্লিকেশন স্পেশিয়াল কন্টেনারের মাধ্যমে রেন্ডার করা শুরু করে:
- xrCreateSpatialContainerEXT-এর সাহায্যে স্পেশাল কন্টেনার তৈরি করুন।
- প্রাথমিক প্রেজেন্টেশনের জন্য কন্টেনারের যেকোনও স্ট্যাটাস পরিবর্তন করুন, যেমন এর বাউন্ডস মোড।
- xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে রানটাইমকে কন্টেনার দেখানোর অনুরোধ করুন।
- কন্টেনার দেখানোর জন্য রানটাইম রেডি হওয়া পর্যন্ত অপেক্ষা করুন। রানটাইম রেডি হয়ে গেলে, এটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টকে সারিবদ্ধ করে, যেখানে
visible-কেXR_TRUE-এ সেট করা হয়। - স্পেশিয়াল কন্টেনারের জন্য রেন্ডারিং শুরু করুন।
এবং স্পেশিয়াল কন্টেনার বন্ধ করার পদ্ধতি নিচে উল্লেখ করা হল:
- xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে রানটাইমকে কন্টেনার লুকানোর অনুরোধ করুন।
- রানটাইম কন্টেনার লুকানো শেষ না করা পর্যন্ত অপেক্ষা করুন। রানটাইম কন্টেনারকে সম্পূর্ণভাবে লুকিয়ে ফেললে, এটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টকে সারিবদ্ধ করে যেখানে
visible-কেXR_FALSEহিসেবে সেট করা হয়। - স্পেশিয়াল কন্টেনারের জন্য রেন্ডারিং শেষ করুন।
- xrDestroySpatialContainerEXT-এর মাধ্যমে কন্টেনারটি ধ্বংস করুন।
মনে রাখবেন
ডিজাইন অনুযায়ী, এই এক্সটেনশনটি স্বতন্ত্র স্পেশিয়াল কন্টেনারে দৃশ্যমানতা এবং ফোকাস ম্যানেজমেন্ট ডেলিগেট করে। যেহেতু সেশনটি সামগ্রিকভাবে আর একটি দৃশ্যমান বা ফোকাস করা অবজেক্টকে উপস্থাপন করে না, তাই সেশনটি স্ট্যান্ডার্ড OpenXR স্টেট মেশিনের (READY, SYNCHRONIZED, VISIBLE, FOCUSED) মাধ্যমে ট্রানজিশন করে না। পরিবর্তে, সেশনটি তার অ্যাক্টিভ লাইফটাইমের জন্য XR_SESSION_STATE_IDLE-এ থাকে এবং সেশন স্টেটে পরিবর্তন-এর নিয়মগুলি নির্দিষ্ট করে যে কীভাবে কোর OpenXR অপারেশনগুলি এই মোডে ম্যাপ করে।
স্পেশিয়াল কন্টেনার তৈরি করুন
xrCreateSpatialContainerEXT ফাংশন একটি নতুন স্পেশিয়াল কন্টেনার তৈরি করে।
XrResult xrCreateSpatialContainerEXT(
XrSession session,
const XrSpatialContainerCreateInfoEXT* createInfo,
XrSpatialContainerEXT* spatialContainer);
প্যারামিটারের বিবরণ
sessionহল XrSession যা স্পেশিয়াল কন্টেনার তৈরি করে।createInfoহল XrSpatialContainerCreateInfoEXT-এর একটি পয়েন্টার যাতে স্পেশিয়াল কন্টেনার তৈরি করার প্যারামিটার থাকে।spatialContainerহল একটি হ্যান্ডেলের পয়েন্টার যেখানে তৈরি করা XrSpatialContainerEXT ফেরত দেওয়া হয়।
নতুন তৈরি করা XrSpatialContainerEXT অবশ্যই দৃশ্যমান, ইন্টার্যাক্ট করার যোগ্য এবং XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT বাউন্ডস মোডে থাকতে হবে। ইমারসিভ মোডে শুরু করার জন্য স্পেশিয়াল কন্টেনার চায় এমন অ্যাপ, স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ করার আগে XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT-এর বাউন্ডস মোডের অনুরোধ করতে পারে।
XrSpatialContainerCreateInfoEXT :: suggestedBounds-এর কোনও ডাইমেনশন নেগেটিভ, অসীম বা সংখ্যা না হলে, রানটাইমকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে। কোনও অ্যাপ XrSystemSpatialContainerPropertiesEXT :: maxSpatialContainerCount-এ নির্দিষ্ট করা সংখ্যার চেয়ে বেশি স্পেশিয়াল কন্টেনার তৈরি করার চেষ্টা করলে, রানটাইমকে XR_ERROR_LIMIT_REACHED রিটার্ন করতেই হবে। স্পেশিয়াল কন্টেনার এই সেশনের জন্য চালু করা না থাকলে, রানটাইম অবশ্যই XR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXT রিটার্ন করবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
-
XR_EXT_spatial_containerএক্সটেনশন xrCreateSpatialContainerEXT কল করার আগে অবশ্যই চালু করতে হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
createInfoঅবশ্যই একটি সঠিক XrSpatialContainerCreateInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে -
spatialContainerঅবশ্যই XrSpatialContainerEXT হ্যান্ডেলের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerCreateInfoEXT, xrCreateSpatialContainerEXT-এ পাস করা হয় যাতে স্পেশিয়াল কন্টেনার তৈরি করা যায়।
typedef struct XrSpatialContainerCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerGraphicsPresentationEXT graphicsPresentation;
XrExtent3Df suggestedBounds;
} XrSpatialContainerCreateInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।graphicsPresentationহল একটি XrSpatialContainerGraphicsPresentationEXT যা বর্ণনা করে যে কীভাবে এই স্পেশিয়াল কন্টেনার গ্রাফিক্স উপস্থাপন করে।suggestedBoundsহল একটি XrExtent3Df যা মিটারে স্পেশিয়াল কন্টেনারের অনুরোধ করা ডাইমেনশন বর্ণনা করে।
যে অ্যাপের সাইজের জন্য কোনও পছন্দ নেই, সেটি suggestedBounds-কে {0, 0, 0}-এ সেট করতে পারে। রানটাইম suggestedBounds-এর অনুরোধ উপেক্ষা করতে পারে।
একটি রানটাইম যা স্পেশিয়াল কন্টেনারকে ওরিয়েন্টেড বক্স ছাড়া অন্য আকারের মাধ্যমে বাউন্ড করার অনুমতি দেয়, সেটিকে অন্যান্য আকারের চারপাশে বাউন্ডিং বক্স হিসেবে suggestedBounds ব্যবহার করতেই হবে। ওরিয়েন্টেড বক্স সবচেয়ে সাধারণ বাউন্ডিং শেপ হিসেবে ব্যবহার করা হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerCreateInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
graphicsPresentationঅবশ্যই একটি সঠিক XrSpatialContainerGraphicsPresentationEXT ভ্যালু হতে হবে
কোনও স্পেশিয়াল কন্টেনার আর ব্যবহারযোগ্য না থাকলে, রানটাইমকে অবশ্যই একটি XrEventDataSpatialContainerClosedEXT ইভেন্ট সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerClosedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerClosedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।
XrEventDataSpatialContainerClosedEXT ইভেন্ট পাওয়ার অর্থ হল, রানটাইম আর স্পেশিয়াল কন্টেনার দেখাতে পারছে না, যেমন ব্যবহারকারী "বন্ধ করুন" বোতামে ক্লিক করেছেন অথবা সেশন XR_SESSION_STATE_LOSS_PENDING অবস্থায় প্রবেশ করেছে।
XrEventDataSpatialContainerClosedEXT ইভেন্ট পাওয়ার পরে, কোনও অ্যাপের উচিত সেই স্পেশিয়াল কন্টেনার ব্যবহার করা বন্ধ করা, রেন্ডার লুপের মতো যেকোনও সংশ্লিষ্ট স্টেট সরিয়ে দেওয়া এবং কন্টেনারটি নষ্ট করে দেওয়া। xrDestroySpatialContainerEXT ছাড়া, রানটাইমকে অবশ্যই সেই কন্টেনারে অপারেট করা সব ফাংশন থেকে XR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT রিটার্ন করতে হবে।
রানটাইম কোনও ক্লোজ ইভেন্ট কিউতে রাখার সময় স্পেশিয়াল কন্টেনার দেখা গেলে, রানটাইমকে অবশ্যই প্রথমে কন্টেনারটি অদৃশ্য করতে হবে এবং একটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্ট কিউতে রাখতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerClosedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
xrDestroySpatialContainerEXT ফাংশন আগে থেকে থাকা স্পেশিয়াল কন্টেনার ধ্বংস করে দেয়।
XrResult xrDestroySpatialContainerEXT(
XrSpatialContainerEXT spatialContainer);
প্যারামিটারের বিবরণ
spatialContainerহল একটি XrSpatialContainerEXT যা আগে xrCreateSpatialContainerEXT দ্বারা তৈরি করা হয়েছে।
স্পেশিয়াল কন্টেনার ধ্বংস করার পরে রানটাইমকে কন্টেনারের কন্টেন্ট আর দেখানো চলবে না এবং কন্টেনার সম্পর্কে কোনও অতিরিক্ত ইভেন্টকে সারিতে রাখা চলবে না।
কোনও অ্যাপের উচিত নয় এমন কোনও স্পেশিয়াল কন্টেনার নষ্ট করা যা দেখা যাচ্ছে, কারণ এটি করলে গ্রাফিক্যাল আর্টিফ্যাক্ট হতে পারে, এর পরিবর্তে কোনও অ্যাপের উচিত xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে স্পেশিয়াল কন্টেনার লুকানোর অনুরোধ করা, XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টের জন্য অপেক্ষা করা এবং তারপর কন্টেনার নষ্ট করা।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrDestroySpatialContainerEXT কল করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে
থ্রেড নিরাপত্তা
spatialContainerএবং যেকোনও চাইল্ড হ্যান্ডেল অ্যাক্সেস করার সুবিধা, অবশ্যই এক্সটার্নালভাবে সিঙ্ক করতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
স্পেশিয়াল কন্টেনার স্পেস
xrCreateSpatialContainerSpaceEXT ফাংশনটি একটি নির্দিষ্ট স্পেশিয়াল কন্টেনারের স্পেশিয়াল কন্টেনার স্পেসের জন্য একটি XrSpace হ্যান্ডেল তৈরি করে।
XrResult xrCreateSpatialContainerSpaceEXT(
XrSession session,
const XrSpatialContainerSpaceCreateInfoEXT* createInfo,
XrSpace* space);
প্যারামিটারের বিবরণ
sessionহল XrSession যা স্পেস তৈরি করে।createInfoহল XrSpatialContainerSpaceCreateInfoEXT-এর একটি পয়েন্টার যাতে স্পেস তৈরি করার প্যারামিটার থাকে।spaceহল একটি হ্যান্ডেলের পয়েন্টার যেখানে তৈরি করা XrSpace ফিরিয়ে দেওয়া হয়।
প্রদত্ত যেকোনও স্পেশিয়াল কন্টেনারের জন্য "স্পেশিয়াল কন্টেনার স্পেস" হল একটি কোঅর্ডিনেট সিস্টেম যার উৎপত্তি সেই স্পেশিয়াল কন্টেনারের সীমার কেন্দ্রে। এই স্পেস সাধারণত xrLocateSpace-এর মতো ফাংশনের জন্য বেস স্পেস হিসেবে ব্যবহার করা হয়।
+X কন্টেনারের ডানদিকের ফেস, +Y কন্টেনারের উপরের ফেস এবং +Z কন্টেনারের সামনের ফেসকে নির্দেশ করে। যেমন, কোনও কন্টেনার যদি দর্শকের সামনে গ্র্যাভিটি অ্যালাইন করা থাকে এবং দর্শক যদি LOCAL স্পেস-এর সাপেক্ষে আইডেন্টিটি পোজ-এ থাকে, তাহলে রানটাইমকে অবশ্যই LOCAL স্পেস-এর সাপেক্ষে আইডেন্টিটি ওরিয়েন্টেশন সহ কন্টেনার স্পেসকে ওরিয়েন্ট করতে হবে। কন্টেনার দৃশ্যমান হলে, রানটাইম LOCAL স্পেসের সাপেক্ষে কন্টেনার স্পেসের পোজ যেকোনও ইচ্ছামতো পোজে সেট করতে পারে।
ext spatial container space convention
ছবি ১৮. স্পেশিয়াল কন্টেনার স্পেসের অক্ষ কনভেনশন
স্পেশিয়াল কন্টেনার স্পেস হল নন-ওয়ার্ল্ড লকড অরিজিন। ইমারসিভ মোডে থাকার সময় যেসব অ্যাপ ওয়ার্ল্ড লকড অরিজিন চায়, সেগুলি XR_REFERENCE_SPACE_TYPE_LOCAL-এর মতো ওয়ার্ল্ড লকড স্পেস ব্যবহার করতে পারে।
রানটাইম যেকোনও সময় স্পেশিয়াল কন্টেনার স্পেসের পোজ পরিবর্তন করতে পারে, সাধারণত ব্যবহারকারীকে স্পেশিয়াল কন্টেনার অন্য পজিশনে সরাতে বা ঘোরাতে সাহায্য করার জন্য এটি করা হয়। এছাড়াও, XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT ও XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT বাউন্ড মোডের মধ্যে ট্রানজিশন করার সময় রানটাইম পোজ পরিবর্তন করতে পারে।
স্পেশাল কন্টেনার স্পেস অবশ্যই একটি সঠিক হ্যান্ডেল হিসেবে কাজ করা চালিয়ে যেতে হবে, এমনকি যদি স্পেশাল কন্টেনারটি xrDestroySpatialContainerEXT-এর মাধ্যমে ধ্বংস হয়ে যায়। স্পেশিয়াল কন্টেনার দেখা না গেলে বা নষ্ট হয়ে গেলে, স্পেশিয়াল কন্টেনার স্পেস অবশ্যই অন্যান্য স্পেসের সাপেক্ষে লোকেট করা যাবে না। XrSpaceLocation :: locationFlags এবং XrViewState ::viewStateFlags-এর মান 0 হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrCreateSpatialContainerSpaceEXT কল করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
sessionঅবশ্যই একটি সঠিক XrSession হ্যান্ডেল হতে হবে -
createInfoঅবশ্যই একটি সঠিক XrSpatialContainerSpaceCreateInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে -
spaceXrSpace হ্যান্ডেলের জন্য অবশ্যই পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerSpaceCreateInfoEXT, xrCreateSpatialContainerSpaceEXT-এর সাথে ব্যবহার করা হয় যাতে XrSpace হ্যান্ডেল তৈরি করা যায়।
typedef struct XrSpatialContainerSpaceCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrSpatialContainerSpaceCreateInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল একটি XrSpatialContainerEXT যার জন্য স্পেস তৈরি করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerSpaceCreateInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে
স্পেশিয়াল কন্টেনার প্রেজেন্ট করা হচ্ছে
স্পেশিয়াল কন্টেনারের কন্টেন্ট জমা দেওয়া, দেখানোর জন্য OpenXR-এ জমা দেওয়া, অন্যান্য এক্সটেনশন দ্বারা ম্যানেজ করা হয়: XR_EXT_spatial_container_self_rendering .
অন্যান্য এক্সটেনশনকে স্পেশিয়াল কন্টেনারের জন্য গ্রাফিক্স প্রেজেন্টেশন পদ্ধতি নির্দিষ্ট করার অনুমতি দিতে, এই এক্সটেনশন XrSpatialContainerGraphicsPresentationEXT enum সংজ্ঞায়িত করে।
typedef enum XrSpatialContainerGraphicsPresentationEXT {
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SELF_RENDERING_EXT = 1000813000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_CONFORMANCE_AUTOMATION_EXT = 1000814000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SYSTEM_RENDERING_EXTX1 = 1000815000,
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerGraphicsPresentationEXT;
Enum-এর বিবরণ
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SELF_RENDERING_EXT
স্পেশিয়াল কন্টেনার OpenXR কম্পোজিশন লেয়ার ব্যবহার করে (XR_EXT_spatial_container_self_rendering এক্সটেনশন দ্বারা যোগ করা হয়েছে)
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_CONFORMANCE_AUTOMATION_EXT
কনফর্মেন্স টেস্টিংয়ের জন্য স্পেশিয়াল কন্টেনার তৈরি করা হয়েছে এবং এতে কোনও রেন্ডারিং পাথ নেই (XR_EXT_spatial_container_conformance_automation এক্সটেনশন দ্বারা যোগ করা হয়েছে)
XR_SPATIAL_CONTAINER_GRAPHICS_PRESENTATION_SYSTEM_RENDERING_EXTX1
স্পেশিয়াল কন্টেনার OpenXR সিস্টেম রেন্ডারিং ব্যবহার করে (XR_EXTX1_system_renderer এক্সটেনশন দ্বারা যোগ করা হয়েছে)
স্পেশিয়াল কন্টেনার স্ট্যাটাস
অ্যাপের অনুরোধ এবং ব্যবহারকারীর প্রয়োজন, উভয়ের উপর ভিত্তি করে রানটাইম দ্বারা স্পেশিয়াল কন্টেনারের অবস্থা ম্যানেজ করা হয়। এই কারণে, স্পেশিয়াল কন্টেনার স্টেটের প্রতিটি দিক নিম্নলিখিত বিষয়গুলি ডকুমেন্ট করে:
- যখন রানটাইমকে স্পেশিয়াল কন্টেনারের স্ট্যাটাস পরিবর্তন করার অনুমতি দেওয়া হয়। বেশিরভাগ স্পেশিয়াল কন্টেনার স্টেটের ক্ষেত্রে, রানটাইম যেকোনও সময় স্টেট পরিবর্তন করতে পারে।
- কোনও অ্যাপ কীভাবে স্ট্যাটাস পরিবর্তনের অনুরোধ করে। রানটাইম কোনও অনুরোধ উপযুক্ত বলে মনে না করা পর্যন্ত সেটি স্থগিত রাখতে পারে। কোনও অনুরোধ স্থগিত করা হলে রানটাইম ইভেন্টগুলিকে সারিবদ্ধ করে না, তাই অ্যাপগুলিকে সম্পর্কহীন লজিকের জন্য এই ধরনের ইভেন্টের জন্য অপেক্ষা করা উচিত নয়।
- স্পেশিয়াল কন্টেনারের স্ট্যাটাস পরিবর্তন হলে কোন ইভেন্ট রানটাইম সারিবদ্ধ হয়। অ্যাপের অনুরোধ করা পরিবর্তন এবং রানটাইম শুরু করা পরিবর্তন সহ সব পরিবর্তনের জন্য রানটাইম কিউ ইভেন্ট। রানটাইমকে অবশ্যই এমন স্টেট পরিবর্তন ইভেন্ট কিউতে রাখতে হবে না যা কোনও পরিবর্তন নির্দেশ করে না, যেমন কোনও অ্যাপ যদি দ্রুত পরপর একটি কন্টেনার লুকানোর জন্য দুটি অনুরোধ করে।
- অ্যাপ পরিবর্তনের অনুরোধ প্রত্যাখ্যান করার সময় কোন ইভেন্ট রানটাইম সারিবদ্ধ হয়। রানটাইম যেকোনও কারণে অনুরোধ বাতিল করতে পারে, সাধারণত ব্যবহারকারীর জন্য খুব ভালো কোয়ালিটির অভিজ্ঞতা বজায় রাখার জন্য সিস্টেম নীতি মেনে চলার কারণে এটি করা হয়।
xrGetSpatialContainerStateEXT ফাংশন স্পেশিয়াল কন্টেনারের বর্তমান অবস্থা কোয়েরি করে।
XrResult xrGetSpatialContainerStateEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerStateGetInfoEXT* getInfo,
XrSpatialContainerStateEXT* state);
প্যারামিটারের বিবরণ
spatialContainerহল কোয়েরি করার জন্য XrSpatialContainerEXT।getInfoহল XrSpatialContainerStateGetInfoEXT, যেখানে স্পেশিয়াল কন্টেনারের স্ট্যাটাস পাওয়ার জন্য ব্যবহৃত তথ্য থাকে।stateহল XrSpatialContainerStateEXT-এর একটি পয়েন্টার, যেখানে স্পেশিয়াল কন্টেনার স্টেট ফিরিয়ে দেওয়া হয়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrGetSpatialContainerStateEXT কল করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে -
getInfoযদিNULLনা হয়, তাহলেgetInfoঅবশ্যই একটি সঠিক XrSpatialContainerStateGetInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে -
stateঅবশ্যই XrSpatialContainerStateEXT স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerStateGetInfoEXT, xrGetSpatialContainerStateEXT-এর সাথে ব্যবহার করা হয় যাতে XrSpatialContainerStateEXT কোয়েরি করা যায়।
typedef struct XrSpatialContainerStateGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerStateGetInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerStateGetInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
typedef struct XrSpatialContainerStateEXT {
XrStructureType type;
void* next;
XrBool32 visible;
XrBool32 interactable;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerStateEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।visibleদিয়ে স্পেশিয়াল কন্টেনার দেখা যাচ্ছে কিনা তা বোঝানো হয়।interactableদেখায় যে স্পেশিয়াল কন্টেনার বর্তমানে কোনও ধরনের ইনপুট গ্রহণ করতে পারবে কিনা। এটি ডেস্কটপ 2D উইন্ডোইং সিস্টেমের "ফোকাস" ফিচারের মতো, তবে পার্থক্য হল একাধিক স্পেশিয়াল কন্টেনার একসাথে ইন্টার্যাক্ট করার জন্য উপলভ্য হতে পারে।boundsModeহল স্পেশিয়াল কন্টেনারের বর্তমান XrSpatialContainerBoundsModeEXT।
স্পেশিয়াল কন্টেনারের স্ট্যাটাসে পরিবর্তন ইভেন্টের মাধ্যমে জানানো হয়।
ফিল্ড পরিবর্তন সংক্রান্ত ইভেন্ট
visible
XrEventDataSpatialContainerVisibleChangedEXT
interactable
XrEventDataSpatialContainerInteractableChangedEXT
boundsMode
XrEventDataSpatialContainerBoundsChangedEXT
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerStateEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_STATE_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
দৃশ্যমানতা
অ্যাপ xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে স্পেশাল কন্টেনার দেখাতে বা লুকাতে অনুরোধ করে।
XrResult xrRequestSpatialContainerVisibleEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerVisibleRequestInfoEXT* info);
প্যারামিটারের বিবরণ
spatialContainerহল XrSpatialContainerEXT যার জন্য পরিবর্তনের অনুরোধ করা হয়েছে।infoহল XrSpatialContainerVisibleRequestInfoEXT-এর একটি পয়েন্টার যাতে অনুরোধ করা দৃশ্যমান স্ট্যাটাস থাকে।
স্পেশিয়াল কন্টেনার দেখানো বা লুকানো হল একটি অ্যাসিঙ্ক্রোনাস অপারেশন।
অ্যাপকে স্পেশিয়াল কন্টেনার নষ্ট করার আগে সেটি লুকানোর অনুরোধ করতে হবে, যাতে রানটাইম মসৃণ ট্রানজিশন দেখাতে পারে। রানটাইম অবশ্যই স্পেশিয়াল কন্টেনার লুকানোর অনুরোধ মেনে চলবে।
রানটাইম স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ বাতিল করতে পারে, সেক্ষেত্রে রানটাইমকে XrEventDataSpatialContainerVisibleRequestDeniedEXT ইভেন্টকে সারিতে রাখতেই হবে। যেমন, কিছু রানটাইম স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ প্রত্যাখ্যান করবে যা ব্যবহারকারী সিস্টেমের দেওয়া "মিনিমাইজ" বোতামের সাথে ইন্টার্যাক্ট করে লুকিয়ে রেখেছেন।
অ্যাপ অন্তত একবার স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ করার আগে রানটাইম অবশ্যই স্পেশিয়াল কন্টেনার দেখাবে না। অ্যাপের প্রথমবার স্পেশিয়াল কন্টেনার দেখানোর অনুরোধের পরে, রানটাইম অ্যাপের অনুরোধ থেকে স্বাধীনভাবে স্পেশিয়াল কন্টেনারের দৃশ্যমানতা পরিবর্তন করতে পারে। এটি অ্যাপকে স্পেশিয়াল কন্টেনারের প্রাথমিক অবস্থা ও কন্টেন্ট নিয়ন্ত্রণ করতে দেয় এবং রানটাইমকে টাস্কবারের মতো সিস্টেম UI প্রদান করতে দেয়, যার মাধ্যমে ব্যবহারকারী কোন স্পেশিয়াল কন্টেনার দেখা যাবে তা বেছে নিতে পারেন।
XrSystemSpatialContainerPropertiesEXT :: supportsBounded এবং XrSystemSpatialContainerPropertiesEXT :: supportsImmersive-এর উপর ভিত্তি করে কাজ করে না এমন বাউন্ডস মোডে স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ রানটাইমকে অবশ্যই প্রত্যাখ্যান করতে হবে। এটি তখনই সম্ভব যখন ডিফল্ট বাউন্ডস মোড, XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT , কোনও নির্দিষ্ট সিস্টেমের জন্য কাজ করে না।
মনে রাখবেন
কিছু ইমপ্লিমেন্টেশনে স্পেশিয়াল কন্টেনার দেখানো বা লুকানোর জন্য সিস্টেম পরিষেবার সাথে যোগাযোগ করতে হয় এবং ব্যবহারকারী সিস্টেম ডায়ালগের সাথে ইন্টার্যাক্ট না করা পর্যন্ত হয়ত তা স্থগিত রাখা হয়। ভিজিবিলিটি স্টেট পরিবর্তনের অনুরোধের জন্য অ্যাসিঙ্ক্রোনাস ডিজাইনটি রানটাইমকে এই দুটি অপারেশন সম্পূর্ণ করার জন্য সময় দেওয়ার উদ্দেশ্যে তৈরি করা হয়েছে।
সঠিক ব্যবহার (অন্তর্নিহিত)
-
XR_EXT_spatial_containerএক্সটেনশন xrRequestSpatialContainerVisibleEXT কল করার আগে অবশ্যই চালু করতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে -
infoঅবশ্যই একটি সঠিক XrSpatialContainerVisibleRequestInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerVisibleRequestInfoEXT, xrRequestSpatialContainerVisibleEXT-এর সাথে ব্যবহার করা হয় যাতে স্পেশিয়াল কন্টেনারের দৃশ্যমানতা পরিবর্তন করা যায়।
typedef struct XrSpatialContainerVisibleRequestInfoEXT {
XrStructureType type;
const void* next;
XrBool32 visible;
} XrSpatialContainerVisibleRequestInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।visibleথেকে বোঝা যায় যে স্পেশিয়াল কন্টেনার দেখানোর বা লুকানোর অনুরোধ করা হয়েছে কিনা।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerVisibleRequestInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
প্রতিবার রানটাইম কোনও স্পেশিয়াল কন্টেনারের দৃশ্যমানতা পরিবর্তন করলে, রানটাইমকে অবশ্যই নতুন স্ট্যাটাস সহ একটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্ট সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerVisibleChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 visible;
} XrEventDataSpatialContainerVisibleChangedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।visibleহল স্পেশিয়াল কন্টেনারের নতুন দৃশ্যমান অবস্থা।
এই ইভেন্ট XR_SESSION_STATE_VISIBLE-এর পরিবর্তে ব্যবহার করা হয়, যার ফলে প্রতিটি কন্টেনারের জন্য আলাদা আলাদা ভ্যালু ব্যবহার করা যায়। অ্যাপের অনুরোধ করা পরিবর্তন এবং রানটাইম শুরু করা পরিবর্তন সহ সব পরিবর্তনের জন্য ইভেন্টটি অবশ্যই সারিবদ্ধ হতে হবে।
একটি রানটাইম হয়তো এই ইভেন্টটি visible-এর সাথে XR_TRUE-এ সেট করে সারিবদ্ধ করার পরে কয়েকটি ফ্রেমের জন্য একটি কন্টেনার রেন্ডার করতে দেরি করতে পারে যাতে একটি খালি কন্টেনার প্রদর্শন করা এড়ানো যায় এবং অ্যাপটিকে তার প্রাথমিক কন্টেন্ট জমা দেওয়ার জন্য সময় দেওয়া যায়। এই সময়, XrSpatialContainerStateEXT ::visible XR_TRUE হবে। রানটাইম যেন ০.৫ সেকেন্ডের বেশি সময় ধরে কন্টেনার রেন্ডার করতে দেরি না করে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerVisibleChangedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
রানটাইম যখনই কোনও কন্টেনার দেখানোর অনুরোধ প্রত্যাখ্যান করে, রানটাইমকে অবশ্যই একটি XrEventDataSpatialContainerVisibleRequestDeniedEXT ইভেন্ট সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerVisibleRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerVisibleRequestDeniedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerVisibleRequestDeniedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
ইন্টার্যাক্ট করা যায়
কোনও অ্যাপ স্পেশিয়াল কন্টেনার ইন্টার্যাক্টেবল করার জন্য অনুরোধ করতে পারবে না। কোন স্পেশিয়াল কন্টেনারের সাথে ইন্টার্যাক্ট করা যাবে তা সম্পূর্ণভাবে রানটাইম দ্বারা নিয়ন্ত্রিত হয়। ইন্টার্যাক্ট করা যায় এমন স্পেশিয়াল কন্টেনার অবশ্যই দৃশ্যমান হতে হবে।
রানটাইম যখনই কোনও স্পেশিয়াল কন্টেনারের ইন্টার্যাক্ট করার মতো অবস্থা পরিবর্তন করে, তখনই রানটাইমকে অবশ্যই নতুন অবস্থার সাথে XrEventDataSpatialContainerInteractableChangedEXT ইভেন্টকে সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerInteractableChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrBool32 interactable;
} XrEventDataSpatialContainerInteractableChangedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।interactableহল স্পেশিয়াল কন্টেনারের জন্য নতুন ইন্টার্যাক্টেবল স্টেট।
এই ইভেন্ট XR_SESSION_STATE_FOCUSED-এর পরিবর্তে ব্যবহার করা হয়, যার ফলে প্রতিটি কন্টেনারের জন্য আলাদা আলাদা ভ্যালু ব্যবহার করা যায়। রানটাইম শুরু করা পরিবর্তন সহ সব পরিবর্তনের জন্য ইভেন্টটি সারিবদ্ধ করা হয়েছে।
রানটাইম যেকোনও সময় স্পেশিয়াল কন্টেনারের সাথে ইন্টার্যাকশন চালু বা বন্ধ করতে পারে। রানটাইম যদি একবারে সর্বাধিক একটি স্পেশিয়াল কন্টেনার ইন্টার্যাক্ট করার সুবিধা দেয়, তাহলে রানটাইম ইন্টার্যাক্ট করার স্পেশিয়াল কন্টেনার পরিবর্তন করার সময়, রানটাইমকে অবশ্যই ইন্টার্যাক্ট করা বন্ধ হওয়া স্পেশিয়াল কন্টেনারের ( interactable false-এ সেট করা) ইভেন্টটি ইন্টার্যাক্ট করা শুরু হওয়া কন্টেনারের ( interactable true-এ সেট করা) ইভেন্টের আগে সারিবদ্ধ করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerInteractableChangedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
বাউন্ড
স্পেশিয়াল কন্টেনারে বাউন্ডস মোড ও বাউন্ডিং বক্স থাকে। স্পেশিয়াল কন্টেনারের বাউন্ড মোড থেকে জানা যায় যে বাউন্ড কীভাবে কাজ করে। স্পেশিয়াল কন্টেনার যে বাউন্ডিং বক্সের মধ্যে আঁকে।
XrSpatialContainerBoundsModeEXT এনিউমারেশন বিভিন্ন মোড শনাক্ত করে যেখানে স্পেশিয়াল কন্টেনারের বাউন্ড থাকতে পারে।
typedef enum XrSpatialContainerBoundsModeEXT {
XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT = 1,
XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT = 2,
XR_SPATIAL_CONTAINER_BOUNDS_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerBoundsModeEXT;
Enum-এর বিবরণ
XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT
স্পেশিয়াল কন্টেনার বাউন্ড করা আছে। সীমা হল একটি সীমিত বক্স। স্পেশিয়াল কন্টেনার শুধুমাত্র এই অঞ্চলে দেখা যাবে।
XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT
স্পেশিয়াল কন্টেনার হল ইমারসিভ এবং এর কোনও সীমা নেই। স্পেশিয়াল কন্টেনার পুরো স্ক্রিন জুড়ে দেখানো হয়।
বাউন্ডস মোডে XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT থাকা স্পেশিয়াল কন্টেনারের জন্য অতিরিক্ত প্রয়োজনীয়তা আছে:
- সেশন স্ট্যাটাসে পরিবর্তন-এ উল্লেখ করা আচরণগত পরিবর্তন ছাড়া, রানটাইমকে অবশ্যই এই স্পেশিয়াল কন্টেনারগুলিকে ফুল-স্ক্রিন এবং স্পেশিয়াল কন্টেনার ব্যবহার না করে তৈরি করা ইমারসিভ অ্যাপের মতোই বিবেচনা করতে হবে।
- রানটাইম হয়তো অতিরিক্ত এক্সটেনশন প্রদান করে যা ইমারসিভ স্পেশিয়াল কন্টেনারকে ফুল-স্ক্রিন এবং এই এক্সটেনশন ছাড়া তৈরি করা ইমারসিভ অ্যাপের থেকে আলাদাভাবে কাজ করতে দেয়।
- রানটাইমকে অবশ্যই এই স্পেশিয়াল কন্টেনারের জন্য অসীম বাউন্ড রিপোর্ট করতে হবে।
- ইমারসিভ স্পেশিয়াল কন্টেনার দেখা গেলে রানটাইম হয়তো অন্যান্য স্পেশিয়াল কন্টেনার লুকিয়ে রাখবে। রানটাইম অনুযায়ী এটি আলাদা হতে পারে, তাই ইমারসিভ স্পেশিয়াল কন্টেনারের দৃশ্যমানতার উপর ভিত্তি করে স্পেশিয়াল কন্টেনার অটোমেটিক দেখানো বা লুকানো হবে কিনা তা অ্যাপের উপর নির্ভর করা উচিত নয়। অন্যান্য সব দৃশ্যমান স্টেট ট্রানজিশনের মতো, ইমারসিভ কন্টেনার দৃশ্যমান হওয়ার কারণে স্পেশিয়াল কন্টেনার লুকানো থাকলে, রানটাইমকে XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টকে অবশ্যই কিউতে রাখতে হবে।
মনে রাখবেন
উপরের প্রয়োজনীয়তা থেকে বোঝা যায় যে সব রানটাইম এই এক্সটেনশন ছাড়াই OpenXR 1.x পাথ প্রয়োগ করতে পারে। এর জন্য রানটাইমকে ইমপ্লিসিটভাবে একটি স্পেশিয়াল কন্টেনার তৈরি করতে হবে, কন্টেনারের বাউন্ড মোড ইমার্সিভ হিসেবে সেট করতে হবে এবং এটি যাতে দেখা যায় তার জন্য অনুরোধ করতে হবে।
অ্যাপ xrRequestSpatialContainerBoundsModeEXT-এর মাধ্যমে স্পেশিয়াল কন্টেনারের বাউন্ডস মোড পরিবর্তন করার অনুরোধ করে।
XrResult xrRequestSpatialContainerBoundsModeEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsModeRequestInfoEXT* info);
প্যারামিটারের বিবরণ
spatialContainerহল XrSpatialContainerEXT যার জন্য পরিবর্তনের অনুরোধ করা হয়েছে।infoহল XrSpatialContainerBoundsModeRequestInfoEXT-এর একটি পয়েন্টার যাতে অনুরোধ করা বাউন্ডস মোড থাকে।
স্পেশিয়াল কন্টেনারের বাউন্ড মোড পরিবর্তন করা হল একটি অ্যাসিঙ্ক্রোনাস অপারেশন এবং অ্যাপ পরিবর্তনের অনুরোধ করার অনেক সেকেন্ড পরে রানটাইম পরিবর্তিত বা বাতিল করা ইভেন্টকে সারিতে রাখতে পারে। এটি রানটাইমকে UI পপ-আপ করার অনুমতি দেয় যা ব্যবহারকারীকে নিরাপদে ইমারসিভ মোডে প্রবেশ করার অনুমতি দেওয়ার জন্য প্রয়োজনীয়।
রানটাইমকে অবশ্যই দৃশ্যমান নয় এমন স্পেশিয়াল কন্টেনারের জন্য বাউন্ডস মোড পরিবর্তন করার অনুরোধ মেনে চলতে হবে। রানটাইম যদি দৃশ্যমান নয় এমন কন্টেনারের জন্য বাউন্ডস মোড অনুরোধ প্রত্যাখ্যান করে, তাহলে এটি পরিবর্তে এই ধরনের স্পেশিয়াল কন্টেনার দেখানোর অনুরোধ প্রত্যাখ্যান বা স্থগিত করতে পারে। এটি অ্যাপকে ইমারসিভ কন্টেনার হিসেবে কন্টেনার শুরু করার অনুমতি দেয়। রানটাইম দৃশ্যমান স্পেশিয়াল কন্টেনারের বাউন্ডস মোড পরিবর্তন করার অনুরোধ বাতিল করতে পারে, সেক্ষেত্রে রানটাইমকে XrEventDataSpatialContainerBoundsModeRequestDeniedEXT ইভেন্টকে সারিতে রাখতেই হবে। যেমন, কিছু রানটাইম এমন একটি দৃশ্যমান স্পেশিয়াল কন্টেনারের বাউন্ডস মোড পরিবর্তন করার অনুরোধ প্রত্যাখ্যান করবে যার সাথে ব্যবহারকারী সক্রিয়ভাবে ইন্টার্যাক্ট করছেন না।
XrSystemSpatialContainerPropertiesEXT :: supportsBounded এবং XrSystemSpatialContainerPropertiesEXT :: supportsImmersive-এর উপর ভিত্তি করে কোনও অ্যাপ বাউন্ডস মোডের জন্য অনুরোধ করলে, রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrRequestSpatialContainerBoundsModeEXT কল করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে -
infoঅবশ্যই একটি সঠিক XrSpatialContainerBoundsModeRequestInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerBoundsModeRequestInfoEXT-কে xrRequestSpatialContainerBoundsModeEXT-এর সাথে ব্যবহার করা হয় যাতে স্পেশিয়াল কন্টেনারের বাউন্ডস মোড পরিবর্তন করা যায়।
typedef struct XrSpatialContainerBoundsModeRequestInfoEXT {
XrStructureType type;
const void* next;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrSpatialContainerBoundsModeRequestInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।boundsModeহল স্পেশিয়াল কন্টেনারের জন্য কাঙ্খিত XrSpatialContainerBoundsModeEXT।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerBoundsModeRequestInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
boundsModeঅবশ্যই একটি সঠিক XrSpatialContainerBoundsModeEXT ভ্যালু হতে হবে
প্রতিবার রানটাইম কোনও স্পেশিয়াল কন্টেনারের বাউন্ড বা বাউন্ড মোড পরিবর্তন করলে, রানটাইমকে অবশ্যই নতুন বাউন্ড তথ্য সহ একটি XrEventDataSpatialContainerBoundsChangedEXT ইভেন্ট সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerBoundsChangedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
XrSpatialContainerBoundsModeEXT boundsMode;
} XrEventDataSpatialContainerBoundsChangedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।boundsহল স্পেশিয়াল কন্টেনারের বাউন্ডের নতুন প্রস্থ, উচ্চতা ও গভীরতা।- কন্টেনারের সীমারেখা অসীম হলে
infiniteBoundsট্রু হয়। boundsModeহল স্পেশিয়াল কন্টেনারের নতুন XrSpatialContainerBoundsModeEXT।
অ্যাপের অনুরোধ করা পরিবর্তন এবং রানটাইম শুরু করা পরিবর্তন সহ সব পরিবর্তনের জন্য ইভেন্টটি সারিবদ্ধ করা হয়েছে।
ব্যবহারকারী ইন্টার্যাক্টিভভাবে স্পেশিয়াল কন্টেনারের সাইজ ছোট বড় করার সময়, রানটাইমকে অবশ্যই নিম্নলিখিত উপায়ের মধ্যে যেকোনও একটি উপায়ে কাজ করতে হবে:
- ব্যবহারকারী স্পেশিয়াল কন্টেনারের সাইজ পরিবর্তন করার সময়, ফ্রেমরেটে অনেক ইভেন্ট সারিবদ্ধ করুন
- ছোট বড় করার শেষে একটি ইভেন্ট সারিবদ্ধ করুন
ছোট বড় করার শেষে রানটাইম যদি শুধুমাত্র একটি ইভেন্টকে সারিতে রাখে, তাহলে রানটাইম ছোট বড় করার ইভেন্টকে সারিতে না রাখা পর্যন্ত সেই রানটাইমকে xrGetSpatialContainerBoundsEXT থেকে পুরনো বাউন্ড রিপোর্ট করা চালিয়ে যেতে হবে। রানটাইমকে অবশ্যই একাধিক আনপোল্ড বাউন্ডস চেঞ্জড ইভেন্ট একত্রিত করতে হবে। অন্যভাবে বলতে গেলে, XrEventDataSpatialContainerBoundsChangedEXT ইভেন্ট এখনও সারিতে থাকা অবস্থায় বাউন্ড বা বাউন্ড মোড পরিবর্তন হলে, রানটাইমকে অবশ্যই শুধুমাত্র একটি ইভেন্ট রিপোর্ট করতে হবে যাতে শেষ বাউন্ড পরিবর্তন অন্তর্ভুক্ত থাকে। যেহেতু অ্যাপগুলি xrGetSpatialContainerBoundsEXT-এর মাধ্যমে সরাসরি স্পেশিয়াল কন্টেনারের বাউন্ড পোল করতে পারে, তাই ইভেন্ট থেকে বাউন্ড পরিবর্তনের সংখ্যা রানটাইম জেনারেটেড বাউন্ড পরিবর্তনের টাইমিং, xrPollEvent-এ অ্যাপ কল এবং xrGetSpatialContainerBoundsEXT-এ অ্যাপ কলের উপর ভিত্তি করে পোলিং থেকে পরিবর্তনের সংখ্যার থেকে আলাদা হতে পারে।
স্পেশিয়াল কন্টেনারের বাউন্ড পরিবর্তিত হলে, স্পেশিয়াল কন্টেনারের লোকাল অরিজিনও পরিবর্তিত হতে পারে। যেমন, রানটাইম যদি কোনও ব্যবহারকারীকে স্পেশিয়াল কন্টেনারের প্রান্ত টেনে কন্টেনারের বাউন্ড ছোট-বড় করার অনুমতি দেয়, তাহলে ব্যবহারকারী একটি প্রান্ত টানলে সেই কন্টেনারের বাউন্ড ও লোকাল অরিজিন পরিবর্তিত হবে। এই ধরনের পরিস্থিতিতে, রানটাইমকে অবশ্যই বাউন্ড ও লোকাল অরিজিন একসাথে পরিবর্তন করতে হবে।
রানটাইম অবশ্যই infiniteBounds-কে XR_TRUE-এ সেট করতে হবে এবং অসীম সীমানা বোঝাতে প্রস্থ, উচ্চতা এবং গভীরতা 0.0-এ সেট করতে হবে। রানটাইমকে অবশ্যই infiniteBounds-কে XR_FALSE-এ সেট করতে হবে এবং সসীম সীমার জন্য প্রস্থ, উচ্চতা এবং গভীরতাকে সসীম পজিটিভ সংখ্যায় সেট করতে হবে।
রানটাইম অবশ্যই bounds এবং infiniteBounds সেট করবে, যা XrSpatialContainerBoundsEXT-এর জন্য একই নিয়ম অনুসরণ করে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerBoundsChangedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
রানটাইম যখনই কোনও কন্টেনারের বাউন্ডস মোড পরিবর্তন করার অনুরোধ প্রত্যাখ্যান করে, তখন রানটাইমকে অবশ্যই একটি XrEventDataSpatialContainerBoundsModeRequestDeniedEXT ইভেন্ট সারিবদ্ধ করতে হবে।
typedef struct XrEventDataSpatialContainerBoundsModeRequestDeniedEXT {
XrStructureType type;
const void* next;
XrSpatialContainerEXT spatialContainer;
} XrEventDataSpatialContainerBoundsModeRequestDeniedEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।spatialContainerহল XrSpatialContainerEXT যার জন্য এই ইভেন্ট।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrEventDataSpatialContainerBoundsModeRequestDeniedEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
XrSpatialContainerBoundsEXT স্ট্রাকচার স্পেশিয়াল কন্টেনারের বাউন্ডিং বক্স বর্ণনা করে।
typedef struct XrSpatialContainerBoundsEXT {
XrStructureType type;
void* next;
XrExtent3Df bounds;
XrBool32 infiniteBounds;
} XrSpatialContainerBoundsEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।boundsহল স্পেশিয়াল কন্টেনারের বাউন্ডের প্রস্থ, উচ্চতা ও গভীরতা। সীমা মিটারে দেখানো হয়েছে।- কন্টেনারের সীমারেখা অসীম হলে
infiniteBoundsট্রু হয়।
রানটাইম অবশ্যই infiniteBounds-কে XR_TRUE-এ সেট করতে হবে এবং অসীম সীমানা বোঝাতে প্রস্থ, উচ্চতা এবং গভীরতা 0.0-এ সেট করতে হবে। রানটাইমকে অবশ্যই infiniteBounds-কে XR_FALSE-এ সেট করতে হবে এবং সসীম সীমার জন্য প্রস্থ, উচ্চতা ও গভীরতাকে সসীম পজিটিভ সংখ্যায় সেট করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerBoundsEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
xrGetSpatialContainerBoundsEXT ফাংশনটি একটি স্পেশিয়াল কন্টেনারের বর্তমান বাউন্ড কোয়েরি করে।
XrResult xrGetSpatialContainerBoundsEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerBoundsGetInfoEXT* getInfo,
XrSpatialContainerBoundsEXT* bounds);
প্যারামিটারের বিবরণ
spatialContainerহল কোয়েরি করার জন্য XrSpatialContainerEXT।getInfoহল XrSpatialContainerBoundsGetInfoEXT যাতে স্পেশিয়াল কন্টেনারের স্ট্যাটাস পাওয়ার জন্য ব্যবহৃত তথ্য থাকে।boundsহল XrSpatialContainerBoundsEXT-এর একটি পয়েন্টার যেখানে বাউন্ড ফেরত দেওয়া হয়।
স্পেশিয়াল কন্টেনার বাউন্ডেড হলে, সেটির বাউন্ড অবশ্যই অসীম হবে না, স্পেশিয়াল কন্টেনার ইমারসিভ হলে, সেটির বাউন্ড অবশ্যই অসীম হবে।
রানটাইম হয়ত স্পেশিয়াল কন্টেনারের বাউন্ডকে যেকোনও সময় যেকোনও পজিটিভ ফাইনাইট ভ্যালুতে পরিবর্তন করতে পারে, যখন স্পেশিয়াল কন্টেনার বাউন্ড করা থাকে। XrEventDataSpatialContainerBoundsChangedEXT-এর মাধ্যমে স্পেশিয়াল কন্টেনারের বাউন্ডে করা পরিবর্তন জানানো হয়।
এই এক্সটেনশনের মাধ্যমে, কোনও অ্যাপ xrRequestSpatialContainerBoundsModeEXT-এর সাহায্যে বাউন্ডেড ও ইমার্সিভ মোডের মধ্যে পরিবর্তন করা ছাড়া অন্য কোনও বাউন্ড পরিবর্তনের অনুরোধ করতে পারবে না। অন্যান্য এক্সটেনশন ভবিষ্যতে এই ধরনের উপায় প্রদান করতে পারে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrGetSpatialContainerBoundsEXT কল করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
spatialContainerঅবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে -
getInfoযদিNULLনা হয়, তাহলেgetInfoঅবশ্যই একটি সঠিক XrSpatialContainerBoundsGetInfoEXT স্ট্রাকচারের পয়েন্টার হতে হবে -
boundsঅবশ্যই XrSpatialContainerBoundsEXT স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialContainerBoundsGetInfoEXT স্ট্রাকচার হল একটি ইনপুট স্ট্রাকচার যা ভবিষ্যতে এক্সটেনশনের উদ্দেশ্যে ব্যবহার করার জন্য রয়েছে।
typedef struct XrSpatialContainerBoundsGetInfoEXT {
XrStructureType type;
const void* next;
} XrSpatialContainerBoundsGetInfoEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSpatialContainerBoundsGetInfoEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
XrSpatialContainerVolumeClippingEXT এনিউমারেশন স্পেশিয়াল কন্টেনারের জন্য বিভিন্ন ভলিউম ক্লিপিং আচরণ শনাক্ত করে।
typedef enum XrSpatialContainerVolumeClippingEXT {
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_NONE_EXT = 0,
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_STRICT_EXT = 1,
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialContainerVolumeClippingEXT;
Enum-এর বিবরণ
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_NONE_EXT
স্পেশিয়াল কন্টেনারের বাউন্ডিং ভলিউমে কোনও কন্টেন্ট ক্লিপ করা নেই। কন্টেন্ট স্পেশিয়াল কন্টেনারের সীমার বাইরে আঁকা যেতে পারে।
XR_SPATIAL_CONTAINER_VOLUME_CLIPPING_STRICT_EXT
স্পেশিয়াল কন্টেনারের বাউন্ডিং ভলিউমে কন্টেন্ট কঠোরভাবে ক্লিপ করা হয়।
এই এক্সটেনশনে এই এনিউমারেশনের কোনও ব্যবহার নেই। অন্যান্য এক্সটেনশনকে ভলিউম ক্লিপিংয়ের আচরণ নির্দিষ্ট করার অনুমতি দিতে এটি সংজ্ঞায়িত করা হয়েছে। যেমন, কোনও অ্যাপ বাউন্ডেড স্পেশিয়াল কন্টেনারের জন্য ব্যাকগ্রাউন্ড আঁকতে চাইতে পারে। মনোকুলার কিউবম্যাপ ব্যাকগ্রাউন্ড নির্দিষ্ট করার একটি সুবিধাজনক উপায়, তবে একটি মনোকুলার কিউবম্যাপ ধারণাগতভাবে অসীমে অবস্থান করে যা কন্টেনারের বাইরে।
সিস্টেমের ক্ষমতা
xrGetSystemProperties কল করার সময় XrSystemProperties-এর সাথে XrSystemSpatialContainerPropertiesEXT স্ট্রাকচার চেইন করে, কোনও অ্যাপ সিস্টেমের ক্ষমতা পরীক্ষা করতে পারে।
typedef struct XrSystemSpatialContainerPropertiesEXT {
XrStructureType type;
void* next;
uint32_t maxSpatialContainerCount;
XrBool32 supportsBounded;
XrBool32 supportsImmersive;
} XrSystemSpatialContainerPropertiesEXT;
মেম্বারের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।maxSpatialContainerCountহল সর্বাধিক সংখ্যক স্পেশিয়াল কন্টেনার যা তৈরি করা যেতে পারে।- স্পেশিয়াল কন্টেনার বাউন্ড করা গেলে
supportsBoundedট্রু হয়। - স্পেশিয়াল কন্টেনার ইমারসিভ হওয়ার অনুমতি পেলে
supportsImmersiveট্রু হয়।
এই এক্সটেনশনকে সাপোর্ট করে এমন রানটাইমকে এমন অ্যাপ সাপোর্ট করতে হবে যা অনেক স্পেশিয়াল কন্টেনার তৈরি করে, যা শুধুমাত্র মেমরি অ্যালোকেশন দ্বারা সীমাবদ্ধ। একসাথে দেখানো স্পেশিয়াল কন্টেনারের সংখ্যার ক্ষেত্রে রানটাইমের আলাদা সীমা থাকতে পারে। এই এক্সটেনশনে একসাথে দেখানো কন্টেনারের সংখ্যা কোয়েরি করার কোনও উপায় নেই কারণ রানটাইম হয়তো সব রান করা অ্যাপের স্ট্যাটাসের উপর ভিত্তি করে আলাদা আলাদা অ্যাপের উপর সীমাবদ্ধতা আরোপ করতে পারে। এটি ধরে নেওয়া হয় যে অত্যন্ত সীমাবদ্ধ ডিভাইস এবং কম সীমাবদ্ধ ডিভাইসে একই সাথে দেখানো কন্টেনারের সংখ্যার জন্য আলাদা আলাদা সীমা থাকবে; অত্যন্ত সীমাবদ্ধ ডিভাইস একই সাথে দেখানো শুধুমাত্র একটি স্পেশিয়াল কন্টেনারে কাজ করতে পারে এবং কম সীমাবদ্ধ ডিভাইস একই সাথে দেখানো অনেক বেশি সংখ্যক স্পেশিয়াল কন্টেনারে কাজ করতে পারে, যা রেন্ডারিং কম্পিউট সীমার উপর নির্ভর করে।
এই এক্সটেনশনকে সাপোর্ট করে এমন রানটাইমকে বাউন্ডেড স্পেশিয়াল কন্টেনার বা ইমারসিভ স্পেশিয়াল কন্টেনারের মধ্যে অন্তত একটিকে অবশ্যই সাপোর্ট করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSystemSpatialContainerPropertiesEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SYSTEM_SPATIAL_CONTAINER_PROPERTIES_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT ফাংশনটি সিস্টেমে কাজ করে এমন গ্রাফিক্স প্রেজেন্টেশন পদ্ধতি রিটার্ন করে।
XrResult xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t graphicsPresentationCapacityInput,
uint32_t* graphicsPresentationCountOutput,
XrSpatialContainerGraphicsPresentationEXT* graphicsPresentations);
প্যারামিটারের বিবরণ
instanceহল XrInstance যেখান থেকেsystemIdফিরিয়ে আনা হয়েছে।systemIdহল সেইXrSystemIdযার ব্যাপারে কোয়েরি করা হচ্ছে।graphicsPresentationCapacityInputহলgraphicsPresentationsঅ্যারের ক্যাপাসিটি, অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনার অনুরোধ জানাতে 0।graphicsPresentationCountOutputহল লেখা গ্রাফিক্স প্রেজেন্টেশনের সংখ্যার একটি পয়েন্টার, অথবাgraphicsPresentationCapacityInput-এর মান ০ হলে প্রয়োজনীয় ক্ষমতার একটি পয়েন্টার।graphicsPresentationsহল XrSpatialContainerGraphicsPresentationEXT ভ্যালুর অ্যারের একটি পয়েন্টার, তবেgraphicsPresentationCapacityInput-এর ভ্যালু 0 হলে এটি ফাঁকা থাকতে পারে।- প্রয়োজনীয়
graphicsPresentationsসাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার বিভাগ দেখুন।
রানটাইমকে অবশ্যই প্রদত্ত systemId এবং ইনস্ট্যান্সের লাইফটাইমের জন্য এই এনিউমারেশন থেকে সবসময় অভিন্ন বাফার কন্টেন্ট রিটার্ন করতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
-
XR_EXT_spatial_containerএক্সটেনশন xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT কল করার আগে অবশ্যই চালু করতে হবে -
instanceঅবশ্যই একটি সঠিক XrInstance হ্যান্ডেল হতে হবে -
graphicsPresentationCountOutputঅবশ্যইuint32_tভ্যালুর পয়েন্টার হতে হবে -
graphicsPresentationCapacityInputযদি0না হয়, তাহলেgraphicsPresentationsঅবশ্যইgraphicsPresentationCapacityInputXrSpatialContainerGraphicsPresentationEXT মানের অ্যারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
সেশনের স্ট্যাটাসে পরিবর্তন
xrCreateSession কল করার সময় XrSessionCreateInfoSpatialContainersEXT চেইন করার মাধ্যমে সেশনের জন্য স্পেশিয়াল কন্টেনার সাপোর্ট চালু করা হয়।
typedef struct XrSessionCreateInfoSpatialContainersEXT {
XrStructureType type;
const void* next;
} XrSessionCreateInfoSpatialContainersEXT;
স্পেশিয়াল কন্টেনার সাপোর্ট চালু করা থাকলে, XrSession আলাদাভাবে কাজ করে। এর কারণ হল, স্পেশিয়াল কন্টেনার ব্যবহার করার সময় সেশন আর ডিসপ্লেতে ইমেজ কন্টেন্ট দেখায় না, তার পরিবর্তে স্পেশিয়াল কন্টেনার তা করে। তাই, এই এক্সটেনশন চালু করা থাকলে, সেশন কার্যকরভাবে "হেডলেস" হয়। অন্যান্য হেডলেস এক্সটেনশনের মতো নয়, অ্যাপ স্পেশিয়াল কন্টেনারের মাধ্যমে ইমেজ ডেটা জমা দিতে পারে।
স্পেশিয়াল কন্টেনার সাপোর্ট চালু করলে, নিম্নলিখিত উপায়ে কোর OpenXR API পরিবর্তন হয়।
রানটাইম: সিস্টেম বা ডিভাইস হারিয়ে যাওয়া
রানটাইম: সিস্টেম বা ডিভাইস হারিয়ে যাওয়া
xrDestroySession
xrDestroySession
IDLE
(চলছে)
চলছে না...
xrGetSystem
xrCreateSession
xrGetSystem...
xrCreateInstance
xrCreateIn...
xrDestroySession
xrDestroySession
LOSS_PENDING
(চলছে না)
LOSS_PENDING...
xrDestroyInstance
xrDestroyInstance
অ্যাপ: ঐচ্ছিকভাবে
XR আবার চালু করুন
app: ঐচ্ছিকভাবে...
ছবি ১৯. নতুন সেশন স্টেট মেশিন
- সেশনটি কখনই
XR_SESSION_STATE_VISIBLE,XR_SESSION_STATE_FOCUSEDবাXR_SESSION_STATE_EXITINGস্ট্যাটাসে প্রবেশ করে না। রানটাইম অবশ্যই এই স্ট্যাটাসের জন্য ইভেন্ট কখনও সারিবদ্ধ করবে না। এইসব স্টেট যথাক্রমে প্রতি-স্পেশিয়াল কন্টেনার ইভেন্ট XrEventDataSpatialContainerVisibleChangedEXT , XrEventDataSpatialContainerInteractableChangedEXT এবং XrEventDataSpatialContainerClosedEXT দ্বারা রিপ্লেস করা হয়। - এছাড়াও, সেশনটি কখনও
XR_SESSION_STATE_READY,XR_SESSION_STATE_SYNCHRONIZED,XR_SESSION_STATE_STOPPINGস্ট্যাটাসে প্রবেশ করে না। রানটাইম অবশ্যই এইসব স্ট্যাটাসের জন্য ইভেন্ট কখনও সারিবদ্ধ করবে না। এইসব রাজ্যের জন্য কোনও বিকল্প নেই। - রানটাইমকে অবশ্যই সেশনটিকে
XR_SESSION_STATE_IDLEঅবস্থায় থাকাকালীন চলমান হিসাবে বিবেচনা করতে হবে। - রানটাইম অবশ্যই সেশনটিকে ফোকাসড হিসেবে বিবেচনা করবে যখন এটি
XR_SESSION_STATE_IDLEঅবস্থায় থাকে এবং অন্তত একটি স্পেশিয়াল কন্টেনার থাকে যা ইন্টার্যাক্ট করা যায়। - xrBeginSession এবং xrEndSession ফাংশন আর প্রয়োজন নেই। এইসব ফাংশন কল করা হলে রানটাইমকে
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTরিটার্ন করতেই হবে। অন্যান্য এক্সটেনশন এইসব ফাংশনের বিকল্প প্রদান করতে পারে। - এছাড়াও, xrRequestExitSession ফাংশনের আর প্রয়োজন নেই। এই ফাংশন কল করা হলে রানটাইমকে অবশ্যই
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTরিটার্ন করতে হবে। যেসব অ্যাপ চালু থাকা সেশন থেকে বেরিয়ে আসতে চায়, সেগুলি xrRequestSpatialContainerVisibleEXT-এ কল করতে পারে যাতে তাদের কন্টেনার লুকানো যায় এবং সব কন্টেনার আর দেখা না গেলে সেশনটি বন্ধ করে দেওয়া যায়। সেশন শুরু হওয়ার পরে যেসব এক্সটেনশন অতিরিক্ত ইভেন্ট সারিবদ্ধ করে, সেগুলি এখন সেশন তৈরি হওয়ার পরে অবশ্যই সেইসব ইভেন্ট সারিবদ্ধ করতে হবে। এই ধরনের এক্সটেনশন নিচে উল্লেখ করা হয়েছে।
এক্সটেনশন ইভেন্ট
XR_EXT_user_presence
XrEventDataUserPresenceChangedEXT
XR_META_boundary_visibility
XrEventDataBoundaryVisibilityChangedMETA
- সেশনের জন্য xrLocateViews ফাংশন কল করা যাবে না। রানটাইমকে অবশ্যই xrLocateViews থেকে
XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTরিটার্ন করতে হবে। অন্যান্য এক্সটেনশন কোনও নির্দিষ্ট স্পেশিয়াল কন্টেনারের ভিউ লোকেট করার উপায় প্রদান করতে পারে। - xrWaitFrame ফাংশন অবশ্যই সবসময় XrFrameState ::
shouldRender-কে false হিসেবে সেট করবে। অন্যান্য এক্সটেনশন হয়তো এমন উপায় প্রদান করতে পারে যার মাধ্যমে জানা যাবে যে কোনও নির্দিষ্ট স্পেশিয়াল কন্টেনারকে তার কম্পোজিশন লেয়ার আপডেট করা উচিত কিনা। - xrEndFrame ফাংশন কম্পোজিশন লেয়ার জমা দেওয়ার সঠিক উপায় নয়। কোনও অ্যাপ যদি XrFrameEndInfo ::
layerCount-কে শূন্য নয় এমন ভ্যালুতে সেট করে, তাহলে রানটাইমকেXR_ERROR_VALIDATION_FAILUREরিটার্ন করতেই হবে। অন্যান্য এক্সটেনশন হয়ত নির্দিষ্ট স্পেশিয়াল কন্টেনারের জন্য কম্পোজিশন লেয়ার জমা দেওয়ার উপায় প্রদান করে। XR_SESSION_STATE_LOSS_PENDINGস্ট্যাটাসে প্রবেশ করলে সব স্পেশিয়াল কন্টেনারও বন্ধ হয়ে যায়।XR_SESSION_STATE_LOSS_PENDING-এর জন্য সেশন স্টেট পরিবর্তন করার আগে রানটাইমকে প্রতিটি অ্যাক্টিভ স্পেশিয়াল কন্টেনারের জন্য একটি XrEventDataSpatialContainerClosedEXT ইভেন্ট অবশ্যই সারিবদ্ধ করতে হবে।- xrCreateSession ফাংশনের জন্য আর গ্রাফিক্স API বাইন্ডিং স্ট্রাকচারের প্রয়োজন নেই। অন্যান্য এক্সটেনশনের ক্ষেত্রে গ্রাফিক্স বাইন্ডিংয়ের প্রয়োজন হতে পারে, যেমন গ্রাফিক্স API ব্যবহার করে রেন্ডার করার জন্য স্পেশিয়াল কন্টেনারের ক্ষেত্রে।
উপরের আচরণ XR_MND_headless-এর আচরণের থেকে সামান্য আলাদা। সেই সেশনের জন্য স্পেশিয়াল কন্টেনার সাপোর্ট চালু করা থাকলে, রানটাইম অবশ্যই XR_MND_headless থেকে হেডলেস সেশন আচরণ চালু করবে না।
মনে রাখবেন
স্পেশিয়াল কন্টেনার চালু করা থাকলে, সেশন শুধুমাত্র দুটি অবস্থার মধ্যে ট্রানজিশন করে: XR_SESSION_STATE_IDLE (চলছে) এবং XR_SESSION_STATE_LOSS_PENDING (চলছে না)। এর ফলে, রানটাইম আর XR_ERROR_SESSION_RUNNING বা XR_ERROR_SESSION_NOT_RUNNING রিটার্ন করে না। পরিবর্তে, কোনও সেশন না চললে, রানটাইম OpenXR কোরের নিয়ম অনুসরণ করে XR_ERROR_SESSION_LOST বা XR_SESSION_LOSS_PENDING রিটার্ন করে। এছাড়াও, xrBeginSession , একমাত্র ফাংশন যা XR_ERROR_SESSION_RUNNING রিটার্ন করে, এখন থেকে সবসময় XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXT রিটার্ন করবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSessionCreateInfoSpatialContainersEXT ব্যবহার করার আগে
XR_EXT_spatial_containerএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXTহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
Android Manifest এন্ট্রি
AOSP ভিত্তিক রানটাইমে, কোনও অ্যাপ কোড রান করার আগে শুরু হওয়া প্রাথমিক স্পেশিয়াল কন্টেনার স্টেটের উপর ভিত্তি করে কাস্টম আচরণ থাকতে পারে। যেমন, রানটাইম অ্যাক্টিভিটির জন্য বরাদ্দ করা রিসোর্স, লঞ্চ অ্যানিমেশন বা স্প্ল্যাশ স্ক্রিন ডিসপ্লে পরিবর্তন করতে পারে। এই উদ্দেশ্যে নিম্নলিখিত প্রপার্টি প্রদান করা হয়েছে। এগুলি <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" /> ট্যাগকে প্রতিস্থাপন করে, যা স্পেশিয়াল কন্টেনার ভিত্তিক অ্যাপের উচিত নয় নির্দিষ্ট করা, তবে আগের AOSP ভিত্তিক রানটাইমের সাথে সামঞ্জস্যের জন্য এটি করা যেতে পারে।
<property android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="list of modes" />
এই প্রপার্টি রানটাইমকে ইঙ্গিত দেয় যে অ্যাক্টিভিটি দ্বারা বাউন্ডস মোড ব্যবহার করা হয়েছে। ডিফল্ট হিসেবে এটি একটি খালি তালিকা, যার অর্থ কোনও ইঙ্গিত নেই।
এই অ্যাট্রিবিউটের জন্য নিম্নলিখিত স্ট্রিংগুলি সঠিক। একাধিক ভ্যালু | দ্বারা আলাদা করা হয়, যেমন "bounded|immersive" ।
মান
বর্ণনা
"2d_panel"
অ্যাক্টিভিটি Android-এর 2D ভিউ ফ্রেমওয়ার্ক ব্যবহার করে দেখায়।
"bounded"
অ্যাক্টিভিটি XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT ব্যবহার করে।
"immersive"
অ্যাক্টিভিটি XR_SPATIAL_CONTAINER_BOUNDS_MODE_IMMERSIVE_EXT ব্যবহার করে।
<property android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED|
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVE|
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED" />
এই প্রপার্টি রানটাইমকে অ্যাক্টিভিটির প্রাথমিক XrSpatialContainerBoundsModeEXT সম্পর্কে ইঙ্গিত দেয় যখন এটি প্রথম তৈরি করা হয়। ডিফল্ট হিসেবে এটি XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED স্ট্রিং, যার অর্থ কোনও ইঙ্গিত নেই।
রানটাইমের জন্য অ্যাপে এইসব প্রপার্টি থাকার প্রয়োজন নেই, অন্যথায় এই স্পেসিফিকেশন অনুযায়ী কাজ করবে। এইসব প্রপার্টির উপর ভিত্তি করে রানটাইম অ্যাপের দৃশ্যমান আচরণ পরিবর্তন করবে না। এই ধরনের সব মেটাডেটা <activity> লেভেল অথবা <application> লেভেলে নির্দিষ্ট করা থাকতেই হবে। <application> লেভেলে নির্দিষ্ট করা থাকলে, এটি অ্যাপ্লিকেশনের সব অ্যাক্টিভিটির ক্ষেত্রে প্রযোজ্য হয় যেগুলি নিজস্ব ভ্যালু নির্দিষ্ট করে না।
উদাহরণ কোড
নিম্নলিখিত কোড থেকে বোঝা যায় যে কোনও রেন্ডারিং ছাড়াই শুধুমাত্র পারসেপশন-ভিত্তিক ব্যবহারের ক্ষেত্রে কীভাবে এই এক্সটেনশন ব্যবহার করতে হয়।
XrInstance instance; // Already initialized
// Create the session with spatial containers enabled
XrSession session;
XrSessionCreateInfoSpatialContainersEXT spatialContainerCreateInfo {
.type = XR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXT,
};
XrSessionCreateInfo sessionCreateInfo {
.type = XR_TYPE_SESSION_CREATE_INFO,
.next = &spatialContainerCreateInfo, // Enable spatial containers
};
(void)sessionCreateInfo.systemId; // Other create fields set in usual way
CHK_XR(xrCreateSession(instance, &sessionCreateInfo, &session));
// Because spatial containers are enabled, the session is considered
// running. App is able to query perception data such as head poses and hand
// poses.
// Based on app logic or when a system lost event happens, destroy the
// session
CHK_XR(xrDestroySession(session));
নতুন অবজেক্টের ধরন
নতুন কমান্ড
- xrCreateSpatialContainerEXT
- xrCreateSpatialContainerSpaceEXT
- xrDestroySpatialContainerEXT
- xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT
- xrGetSpatialContainerBoundsEXT
- xrGetSpatialContainerStateEXT
- xrRequestSpatialContainerBoundsModeEXT
- xrRequestSpatialContainerVisibleEXT
নতুন স্ট্রাকচার
- XrEventDataSpatialContainerBoundsChangedEXT
- XrEventDataSpatialContainerBoundsModeRequestDeniedEXT
- XrEventDataSpatialContainerClosedEXT
- XrEventDataSpatialContainerInteractableChangedEXT
- XrEventDataSpatialContainerVisibleChangedEXT
- XrEventDataSpatialContainerVisibleRequestDeniedEXT
- XrSpatialContainerBoundsEXT
- XrSpatialContainerBoundsGetInfoEXT
- XrSpatialContainerBoundsModeRequestInfoEXT
- ₣৯৯.৯৯ সিএফপি ফ্রাঁ (XPF)
- XrSpatialContainerSpaceCreateInfoEXT
- XrSpatialContainerStateEXT
- XrSpatialContainerStateGetInfoEXT
- An error occurred while processing your request. Please try again later.
XrSessionCreateInfo এক্সটেন্ড করা হচ্ছে :
XrSystemProperties এক্সটেন্ড করা হচ্ছে :
নতুন Enum
- XrSpatialContainerBoundsModeEXT
- XrSpatialContainerGraphicsPresentationEXT
- XrSpatialContainerVolumeClippingEXT
নতুন Enum কনস্ট্যান্ট
XR_EXT_SPATIAL_CONTAINER_EXTENSION_NAMEXR_EXT_spatial_container_SPEC_VERSIONXrObjectType এক্সটেন্ড করা হচ্ছে :
XR_OBJECT_TYPE_SPATIAL_CONTAINER_EXT
XrResult এক্সটেন্ড করা হচ্ছে :
XR_ERROR_COMPATIBLE_SPATIAL_CONTAINER_MISSING_EXTXR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXTXR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT
XrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXTXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXTXR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_STATE_EXTXR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXTXR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXTXR_TYPE_SYSTEM_SPATIAL_CONTAINER_PROPERTIES_EXT
ইস্যু
আমরা কীভাবে একাধিক বকেয়া দৃশ্যমান অনুরোধ ম্যানেজ করি? Should the app get one change / denied back or multiple? একাধিক ফ্রেম জুড়ে কল করা হলে উত্তর আলাদা হতে পারে। একাধিক অনুরোধের ফলে কোনও অপারেশন না হলে উত্তরটি ভিন্ন হতে পারে, অর্থাৎ একটি স্পেশিয়াল কন্টেনার দৃশ্যমান হওয়ার জন্য অনুরোধ করা, তারপর এমন একটি কন্টেনারের জন্য দৃশ্যমান না হওয়া যা দৃশ্যমান না হয়ে শুরু হয়।
- সমাধান করা হয়েছে। পরিবর্তন ইভেন্ট এবং প্রত্যাখ্যান করা ইভেন্টের জন্য বিভিন্ন বিকল্প। Noop অনুরোধ কোনও পরিবর্তন ইভেন্টকে সারিবদ্ধ করে না, এটি শুধু অ্যাপ ডেভেলপারের জন্য নয়েজ তৈরি করে এবং রানটাইমের জন্য ফিল্টার করা সহজ। একাধিক দৃশ্যমান অনুরোধ বাতিল করা হলে, রানটাইমকে অবশ্যই প্রতিটি বাতিল করা ইভেন্টের জন্য একটি করে ইভেন্ট তৈরি করতে হবে।
কীভাবে একটি কনফর্মেন্স অটোমেশন এক্সটেনশন সংজ্ঞায়িত করা হবে বলে আশা করা হচ্ছে যাতে নীতি আচরণের জন্য সমস্ত ঐচ্ছিক স্পেক টেক্সট এখনও CTS দ্বারা পরীক্ষা করা যায়?
- সমাধান করা হয়েছে। আলাদা টেস্ট এক্সটেনশন। শুধুমাত্র CTS-এর জন্য টেস্ট এক্সটেনশন রানটাইম ইমপ্লিমেন্ট করা হবে, যা CTS-কে সব সিস্টেম নীতি কন্ট্রোল করার অনুমতি দেবে।
স্পেশিয়াল কন্টেনারের পজিশন পরিবর্তন হলে কি আমাদের কোনও ইভেন্ট প্রয়োজন?
- সমাধান করা হয়েছে। না। স্পেশিয়াল কন্টেনার স্পেস নন-ওয়ার্ল্ড লকড এবং
XR_REFERENCE_SPACE_TYPE_VIEW-এর মতো অন্যান্য স্পেস পরিবর্তন হলে কোনও ইভেন্ট হয় না।
- সমাধান করা হয়েছে। না। স্পেশিয়াল কন্টেনার স্পেস নন-ওয়ার্ল্ড লকড এবং
একাধিক স্পেশিয়াল কন্টেনার থাকলে xrSyncActions কীভাবে কাজ করে?
- সমাধান করা হয়েছে। কোনও পরিবর্তন করার প্রয়োজন নেই। xrSyncActions সেশনের সব স্পেশিয়াল কন্টেনারে প্রয়োগ করা হবে। কোনও অ্যাপ যদি ইনপুট অ্যাকশনকে কোনও নির্দিষ্ট স্পেশিয়াল কন্টেনারে ডাইরেক্ট করতে চায়, তাহলে কোন কন্টেনারগুলি সঠিক টার্গেট তা বেছে নিতে এটি ইন্টার্যাক্ট করা যায় এমন প্রতি-কন্টেনার স্ট্যাটাস দেখতে পারে। কোনও অ্যাপ যদি শুধুমাত্র একটি স্পেশিয়াল কন্টেনারের জন্য ইনপুট অ্যাকশন স্টেট সিঙ্ক করতে চায়, তাহলে অতিরিক্ত এক্সটেনশন প্রয়োজন হবে। তবে, আমরা আশা করি যে এর পরিবর্তে এমন একটি এক্সটেনশনের উপর ফোকাস করা হবে যা অ্যাপগুলিকে সম্পূর্ণরূপে ইভেন্ট-ভিত্তিক হতে দেয় এবং ফ্রেম লুপে xrSyncActions কলের প্রয়োজনীয়তা এড়িয়ে যায়।
যেসব অ্যাপ ঘন ঘন আপডেট করা হয় না সেগুলি ইনপুট কীভাবে ম্যানেজ করে?
- সমাধান করা হয়েছে। কোনও পরিবর্তন করার প্রয়োজন নেই। EXT_spatial_container-এর জন্য মূল্যবান হলেও, এটি স্পেশিয়াল কন্টেনারের বাইরেও মূল্যবান। এটি ইভেন্ট চ্যানেল এক্সটেনশনের মাধ্যমে ম্যানেজ করা যায় এবং দুটি ক্ষেত্রেই কাজ করে। স্পেশিয়াল কন্টেনারের জন্য, আমরা একটি স্পেশিয়াল কন্টেনারের ইভেন্ট ফিল্টার করার অতিরিক্ত উপায় যোগ করব।
ডিকাপল করা ইনপুট ও রেন্ডারিং লুপ সহ অ্যাপের জন্য ইনপুট লুপের টাইমিং থ্রটল / কন্ট্রোল করার জন্য আমাদের কি অপেক্ষা করতে হবে?
- সমাধান করা হয়েছে। কোনও পরিবর্তন করার প্রয়োজন নেই। এটি ইভেন্ট চ্যানেল ও বর্তমান অনুরোধ এক্সটেনশনের মাধ্যমে ম্যানেজ করা হবে বলে আশা করা হচ্ছে। বর্তমান অনুরোধ এক্সটেনশন, রেন্ডারিং ইভেন্ট-ভিত্তিক এবং ফ্রেম লুপ থেকে ডিকাপল করার অনুমতি দেয়।
Can a spatial container get its pose relative to other spatial containers? এখানে মূল চিন্তা: আমাদের কি এর জন্য কোনও ব্যবহারের কেস আছে? And if so, how do the spatial container spaces connect to LOCAL?
- সমাধান করা হয়েছে। হ্যাঁ।
XR_REFERENCE_SPACE_TYPE_VIEW-এর মাধ্যমে একই সেশনের মধ্যে স্পেশিয়াল কন্টেনারের জন্য এটি আগে থেকেই করা সম্ভব এবং ভিউ-নির্ভর কন্টেন্ট সাপোর্ট করা বাঞ্ছনীয়। সেশন জুড়ে (যেমন অন্য প্রসেসে) স্পেশিয়াল কন্টেনার পোজ শেয়ার করার জন্য প্রত্যাশিত পাথ হলXR_EXT_spatial_anchorএবং এর আগে থেকে থাকা পারসিস্টেন্স ও শেয়ারিং প্যাটার্ন ব্যবহার করা।
- সমাধান করা হয়েছে। হ্যাঁ।
স্পেশিয়াল কন্টেনারের স্পেস দেখা না গেলে কি তা লোকেট করা যায়?
- সমাধান করা হয়েছে। না। স্পেশিয়াল কন্টেনার দেখা না গেলে, স্পেশিয়াল কন্টেনারের স্পেস লোকেট করা যায় না। এর অর্থ হল, এতে স্পেশিয়ালাইজড অডিও নেই অথবা spatial_container দেখা না গেলে, অ্যাপটি ভিউ নির্ভর কন্টেন্ট "ওয়ার্ম আপ" করতে পারে না। এই দুটিই ঠিক আছে কারণ স্পেশিয়াল কন্টেনার দেখা না গেলে, অ্যাপটি সেই স্পেশিয়াল কন্টেনারের জন্য ব্যবহৃত যেকোনও CPU / GPU লোড বন্ধ করবে বলে আশা করা হয়।
স্পেশিয়াল কন্টেনারে স্পেশিয়াল কন্টেনার স্পেস কোথায় রাখা হবে বলে আশা করা হচ্ছে? সাজেশনগুলি কেন্দ্র বা ন্যূনতম পয়েন্ট (minX, minY, minZ) হয়েছে।
- সমাধান করা হয়েছে। মাঝখানে। এমন কোনও লোকেশন নেই যা স্পেশাল কন্টেনার রিসাইজ UX-এর প্রত্যাশিত বেশিরভাগ উপায়ে (এজ সরানো) সরানো যায় না। OpenXR-এর অন্যান্য অংশে সাধারণত Center ব্যবহার করা হয়। আমরা 2D কম্পিউটিংয়ে উইন্ডোর সাথে অ্যালাইন করিনি, যা ন্যূনতম কোঅর্ডিনেট ব্যবহার করে, কারণ 3D মডেল ভিউয়াররা প্রায়ই এই কনভেনশন অনুসরণ করে না।
স্পেশিয়াল কন্টেনারের নিচে রিসোর্স তৈরি করার জন্য রানটাইম কখন প্রত্যাশিত? এর মধ্যে কখনও কখনও সিস্টেম পরিষেবার সাথে IPC অন্তর্ভুক্ত থাকে।
- সমাধান করা হয়েছে।
xrCreateSpatialContainerEXT-এর অংশ হিসেবে সিঙ্ক্রোনাসভাবে। যদিও IPC জড়িত থাকতে পারে, তবে কন্টেনার তৈরি করার খরচ সাধারণত কম হবে বলে আশা করা হয়। কিছু ভেন্ডরের কাছে কন্টেনার ম্যানেজ করার জন্য গ্লোবাল মিউটেক্স আছে, তবে এগুলি সাধারণত দীর্ঘ সময় অপেক্ষা করে না। মিউটেক্স কনটেনশন সংক্রান্ত সমস্যা হল ভেন্ডর-নির্দিষ্ট বাগ যা প্রতিটি ভেন্ডর সমাধান করবে বলে আশা করা হচ্ছে।
- সমাধান করা হয়েছে।
আমাদের কি এমন কোনও সিগন্যাল প্রয়োজন যা থেকে বোঝা যাবে যে XrSession স্পেশিয়াল কন্টেনার তৈরি করবে এবং তাই পুরনো রেন্ডারিং পাথ কাজ করবে না?
- সমাধান করা হয়েছে। হ্যাঁ। আমরা সেশন স্টেট মেশিনকে মৌলিকভাবে পরিবর্তন করি।
ভার্সনের ইতিহাস
রিভিশন ১, ০৬-০৮-২০২৬ (জ্যারেড ফাইন্ডার, Google)
- প্রাথমিক এক্সটেনশনের বিবরণ