XR_EXT_spatial_container

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

XR_EXT_spatial_container

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

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

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

811

সংশোধন

1

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

অনুমোদিত নয়

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

OpenXR 1.0

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

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)

নিম্নলিখিত ধাপগুলি অনুসরণ করে একটি অ্যাপ্লিকেশন স্পেশিয়াল কন্টেনারের মাধ্যমে রেন্ডার করা শুরু করে:

  1. xrCreateSpatialContainerEXT-এর সাহায্যে স্পেশাল কন্টেনার তৈরি করুন।
  2. প্রাথমিক প্রেজেন্টেশনের জন্য কন্টেনারের যেকোনও স্ট্যাটাস পরিবর্তন করুন, যেমন এর বাউন্ডস মোড।
  3. xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে রানটাইমকে কন্টেনার দেখানোর অনুরোধ করুন।
  4. কন্টেনার দেখানোর জন্য রানটাইম রেডি হওয়া পর্যন্ত অপেক্ষা করুন। রানটাইম রেডি হয়ে গেলে, এটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টকে সারিবদ্ধ করে, যেখানে visible-কে XR_TRUE-এ সেট করা হয়।
  5. স্পেশিয়াল কন্টেনারের জন্য রেন্ডারিং শুরু করুন।

এবং স্পেশিয়াল কন্টেনার বন্ধ করার পদ্ধতি নিচে উল্লেখ করা হল:

  1. xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে রানটাইমকে কন্টেনার লুকানোর অনুরোধ করুন।
  2. রানটাইম কন্টেনার লুকানো শেষ না করা পর্যন্ত অপেক্ষা করুন। রানটাইম কন্টেনারকে সম্পূর্ণভাবে লুকিয়ে ফেললে, এটি XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টকে সারিবদ্ধ করে যেখানে visible-কে XR_FALSE হিসেবে সেট করা হয়।
  3. স্পেশিয়াল কন্টেনারের জন্য রেন্ডারিং শেষ করুন।
  4. 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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXT
  • XR_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 ব্যবহার করতেই হবে। ওরিয়েন্টেড বক্স সবচেয়ে সাধারণ বাউন্ডিং শেপ হিসেবে ব্যবহার করা হয়।

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

কোনও স্পেশিয়াল কন্টেনার আর ব্যবহারযোগ্য না থাকলে, রানটাইমকে অবশ্যই একটি 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 ইভেন্ট কিউতে রাখতে হবে।

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

xrDestroySpatialContainerEXT ফাংশন আগে থেকে থাকা স্পেশিয়াল কন্টেনার ধ্বংস করে দেয়।

XrResult xrDestroySpatialContainerEXT(
    XrSpatialContainerEXT                       spatialContainer);

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

স্পেশিয়াল কন্টেনার ধ্বংস করার পরে রানটাইমকে কন্টেনারের কন্টেন্ট আর দেখানো চলবে না এবং কন্টেনার সম্পর্কে কোনও অতিরিক্ত ইভেন্টকে সারিতে রাখা চলবে না।

কোনও অ্যাপের উচিত নয় এমন কোনও স্পেশিয়াল কন্টেনার নষ্ট করা যা দেখা যাচ্ছে, কারণ এটি করলে গ্রাফিক্যাল আর্টিফ্যাক্ট হতে পারে, এর পরিবর্তে কোনও অ্যাপের উচিত xrRequestSpatialContainerVisibleEXT-এর মাধ্যমে স্পেশিয়াল কন্টেনার লুকানোর অনুরোধ করা, XrEventDataSpatialContainerVisibleChangedEXT ইভেন্টের জন্য অপেক্ষা করা এবং তারপর কন্টেনার নষ্ট করা।

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

  • xrDestroySpatialContainerEXT কল করার আগে XR_EXT_spatial_container এক্সটেনশন অবশ্যই চালু করতে হবে
  • spatialContainer অবশ্যই একটি সঠিক XrSpatialContainerEXT হ্যান্ডেল হতে হবে

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

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_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 স্ট্রাকচারের পয়েন্টার হতে হবে
  • space XrSpace হ্যান্ডেলের জন্য অবশ্যই পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialContainerSpaceCreateInfoEXT, xrCreateSpatialContainerSpaceEXT-এর সাথে ব্যবহার করা হয় যাতে XrSpace হ্যান্ডেল তৈরি করা যায়।

typedef struct XrSpatialContainerSpaceCreateInfoEXT {
    XrStructureType          type;
    const void*              next;
    XrSpatialContainerEXT    spatialContainer;
} XrSpatialContainerSpaceCreateInfoEXT;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • 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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

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

XrSpatialContainerStateGetInfoEXT, xrGetSpatialContainerStateEXT-এর সাথে ব্যবহার করা হয় যাতে XrSpatialContainerStateEXT কোয়েরি করা যায়।

typedef struct XrSpatialContainerStateGetInfoEXT {
    XrStructureType    type;
    const void*        next;
} XrSpatialContainerStateGetInfoEXT;

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

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

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

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

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

দৃশ্যমানতা

অ্যাপ 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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

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

XrSpatialContainerVisibleRequestInfoEXT, xrRequestSpatialContainerVisibleEXT-এর সাথে ব্যবহার করা হয় যাতে স্পেশিয়াল কন্টেনারের দৃশ্যমানতা পরিবর্তন করা যায়।

typedef struct XrSpatialContainerVisibleRequestInfoEXT {
    XrStructureType    type;
    const void*        next;
    XrBool32           visible;
} XrSpatialContainerVisibleRequestInfoEXT;

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

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

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

প্রতিবার রানটাইম কোনও স্পেশিয়াল কন্টেনারের দৃশ্যমানতা পরিবর্তন করলে, রানটাইমকে অবশ্যই নতুন স্ট্যাটাস সহ একটি 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 হবে। রানটাইম যেন ০.৫ সেকেন্ডের বেশি সময় ধরে কন্টেনার রেন্ডার করতে দেরি না করে।

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

রানটাইম যখনই কোনও কন্টেনার দেখানোর অনুরোধ প্রত্যাখ্যান করে, রানটাইমকে অবশ্যই একটি XrEventDataSpatialContainerVisibleRequestDeniedEXT ইভেন্ট সারিবদ্ধ করতে হবে।

typedef struct XrEventDataSpatialContainerVisibleRequestDeniedEXT {
    XrStructureType          type;
    const void*              next;
    XrSpatialContainerEXT    spatialContainer;
} XrEventDataSpatialContainerVisibleRequestDeniedEXT;

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

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

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

ইন্টার‌্যাক্ট করা যায়

কোনও অ্যাপ স্পেশিয়াল কন্টেনার ইন্টার‍্যাক্টেবল করার জন্য অনুরোধ করতে পারবে না। কোন স্পেশিয়াল কন্টেনারের সাথে ইন্টার‍্যাক্ট করা যাবে তা সম্পূর্ণভাবে রানটাইম দ্বারা নিয়ন্ত্রিত হয়। ইন্টার‍্যাক্ট করা যায় এমন স্পেশিয়াল কন্টেনার অবশ্যই দৃশ্যমান হতে হবে।

রানটাইম যখনই কোনও স্পেশিয়াল কন্টেনারের ইন্টার‍্যাক্ট করার মতো অবস্থা পরিবর্তন করে, তখনই রানটাইমকে অবশ্যই নতুন অবস্থার সাথে 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-এ সেট করা) ইভেন্টের আগে সারিবদ্ধ করতে হবে।

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

বাউন্ড

স্পেশিয়াল কন্টেনারে বাউন্ডস মোড ও বাউন্ডিং বক্স থাকে। স্পেশিয়াল কন্টেনারের বাউন্ড মোড থেকে জানা যায় যে বাউন্ড কীভাবে কাজ করে। স্পেশিয়াল কন্টেনার যে বাউন্ডিং বক্সের মধ্যে আঁকে।

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

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

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

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

XrSpatialContainerBoundsModeRequestInfoEXT-কে xrRequestSpatialContainerBoundsModeEXT-এর সাথে ব্যবহার করা হয় যাতে স্পেশিয়াল কন্টেনারের বাউন্ডস মোড পরিবর্তন করা যায়।

typedef struct XrSpatialContainerBoundsModeRequestInfoEXT {
    XrStructureType                    type;
    const void*                        next;
    XrSpatialContainerBoundsModeEXT    boundsMode;
} XrSpatialContainerBoundsModeRequestInfoEXT;

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

  • type হল এই স্ট্রাকচারের XrStructureType।
  • next হল NULL অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।
  • 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-এর জন্য একই নিয়ম অনুসরণ করে।

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

রানটাইম যখনই কোনও কন্টেনারের বাউন্ডস মোড পরিবর্তন করার অনুরোধ প্রত্যাখ্যান করে, তখন রানটাইমকে অবশ্যই একটি XrEventDataSpatialContainerBoundsModeRequestDeniedEXT ইভেন্ট সারিবদ্ধ করতে হবে।

typedef struct XrEventDataSpatialContainerBoundsModeRequestDeniedEXT {
    XrStructureType          type;
    const void*              next;
    XrSpatialContainerEXT    spatialContainer;
} XrEventDataSpatialContainerBoundsModeRequestDeniedEXT;

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

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

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

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-এ সেট করতে হবে এবং সসীম সীমার জন্য প্রস্থ, উচ্চতা ও গভীরতাকে সসীম পজিটিভ সংখ্যায় সেট করতে হবে।

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

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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ব্যর্থতা

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

XrSpatialContainerBoundsGetInfoEXT স্ট্রাকচার হল একটি ইনপুট স্ট্রাকচার যা ভবিষ্যতে এক্সটেনশনের উদ্দেশ্যে ব্যবহার করার জন্য রয়েছে।

typedef struct XrSpatialContainerBoundsGetInfoEXT {
    XrStructureType    type;
    const void*        next;
} XrSpatialContainerBoundsGetInfoEXT;

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

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

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

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 ট্রু হয়।

এই এক্সটেনশনকে সাপোর্ট করে এমন রানটাইমকে এমন অ্যাপ সাপোর্ট করতে হবে যা অনেক স্পেশিয়াল কন্টেনার তৈরি করে, যা শুধুমাত্র মেমরি অ্যালোকেশন দ্বারা সীমাবদ্ধ। একসাথে দেখানো স্পেশিয়াল কন্টেনারের সংখ্যার ক্ষেত্রে রানটাইমের আলাদা সীমা থাকতে পারে। এই এক্সটেনশনে একসাথে দেখানো কন্টেনারের সংখ্যা কোয়েরি করার কোনও উপায় নেই কারণ রানটাইম হয়তো সব রান করা অ্যাপের স্ট্যাটাসের উপর ভিত্তি করে আলাদা আলাদা অ্যাপের উপর সীমাবদ্ধতা আরোপ করতে পারে। এটি ধরে নেওয়া হয় যে অত্যন্ত সীমাবদ্ধ ডিভাইস এবং কম সীমাবদ্ধ ডিভাইসে একই সাথে দেখানো কন্টেনারের সংখ্যার জন্য আলাদা আলাদা সীমা থাকবে; অত্যন্ত সীমাবদ্ধ ডিভাইস একই সাথে দেখানো শুধুমাত্র একটি স্পেশিয়াল কন্টেনারে কাজ করতে পারে এবং কম সীমাবদ্ধ ডিভাইস একই সাথে দেখানো অনেক বেশি সংখ্যক স্পেশিয়াল কন্টেনারে কাজ করতে পারে, যা রেন্ডারিং কম্পিউট সীমার উপর নির্ভর করে।

এই এক্সটেনশনকে সাপোর্ট করে এমন রানটাইমকে বাউন্ডেড স্পেশিয়াল কন্টেনার বা ইমারসিভ স্পেশিয়াল কন্টেনারের মধ্যে অন্তত একটিকে অবশ্যই সাপোর্ট করতে হবে।

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

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 অবশ্যই graphicsPresentationCapacityInput XrSpatialContainerGraphicsPresentationEXT মানের অ্যারের পয়েন্টার হতে হবে

রিটার্ন কোড

হয়ে গেছে

  • XR_SUCCESS

ব্যর্থতা

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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 রিটার্ন করবে।

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

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));

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

নতুন কমান্ড

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

নতুন Enum

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

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

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

    • XR_ERROR_COMPATIBLE_SPATIAL_CONTAINER_MISSING_EXT
    • XR_ERROR_SPATIAL_CONTAINERS_ENABLED_EXT
    • XR_ERROR_SPATIAL_CONTAINERS_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_CONTAINER_CLOSED_EXT
  • XrStructureType এক্সটেন্ড করা হচ্ছে :

    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_CHANGED_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_DENIED_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_CLOSED_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_INTERACTABLE_CHANGED_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_REQUEST_DENIED_EXT
    • XR_TYPE_SESSION_CREATE_INFO_SPATIAL_CONTAINERS_EXT
    • XR_TYPE_SPATIAL_CONTAINER_BOUNDS_EXT
    • XR_TYPE_SPATIAL_CONTAINER_BOUNDS_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CONTAINER_BOUNDS_MODE_REQUEST_INFO_EXT
    • XR_TYPE_SPATIAL_CONTAINER_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_CONTAINER_SPACE_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_CONTAINER_STATE_EXT
    • XR_TYPE_SPATIAL_CONTAINER_STATE_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CONTAINER_VISIBLE_REQUEST_INFO_EXT
    • XR_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)

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