XR_EXT_spatial_container
Name String
XR_EXT_spatial_container
एक्सटेंशन का टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
811
बदलाव
1
पुष्टि की स्थिति
मंज़ूरी नहीं मिली
एक्सटेंशन और वर्शन डिपेंडेंसी
पिछली बार बदलाव किए जाने की तारीख
2026-08-06
आईपी स्टेटस
बौद्धिक संपत्ति से जुड़े किसी दावे की जानकारी नहीं है.
योगदान देने वाले
जैरेड फ़ाइंडर, Google
ऐंड्रियास लोव सेल्विक, Meta Platforms
लैकलन फ़ोर्ड, Google
कैस एवरेट, Meta Platforms
ऐडम गाउसेटिस, Meta Platforms
अंकुर अग्रवाल, Unity Technologies
ब्योर्न स्वेनसन, LÖVR
डेनी रॉनग्रेन, Varjo Technologies
फ़्रेडिया हुया-कुआडियो, Godot Engine
गुओडोंग रोंग, Meta Platforms
जेकब बोर्नक्रांट्ज़, NVIDIA
जियान झांग, ByteDance
जॉन कर्नी, Meta Platforms
जॉनाथन राइट, Meta Platforms
जुनफ़ेंग शी, ByteDance
केनी वर्केमर, Google
कर्टिस एवली, Qualcomm
मॉरीशियो नारवेज़, Meta Platforms
नेथन न्यूबर, Valve Corporation
निहाव जैन, Google
निकिता लुत्सेन्को, Meta Platforms
प्रवीण बाबू जे डी, ByteDance
रायली पावलिक, Collabora
सालार खान, Google
शुआई लियू, ByteDance
वॉल्टर लू, Meta Platforms
यिन ली, Microsoft
ज़ीपेंग लियू, ByteDance
खास जानकारी
यह एक्सटेंशन, डिसप्ले की जा सकने वाली इकाइयों की एक नई क्लास तय करता है. इसे "स्पेशल कंटेनर" कहा जाता है. ये डेस्कटॉप 2D विंडोइंग सिस्टम में "विंडो" के कॉन्सेप्ट से मिलते-जुलते हैं.
OpenXR 1.x में, ऐप्लिकेशन के पास इस बात का पूरा कंट्रोल होता है कि उपयोगकर्ता को क्या दिखेगा और उसे उपयोगकर्ता के असल या वर्चुअल एनवायरमेंट के ऊपर कैसे ब्लेंड किया जाएगा. रनटाइम, उपयोगकर्ता की सुरक्षा को पक्का करने के लिए, डिसप्ले में सिर्फ़ मामूली बदलाव करते हैं. यह ऐप्लिकेशन मॉडल, उपयोगकर्ता को एक ही अनुभव में पूरी तरह से शामिल करने के लिए अच्छा है. हालांकि, इसमें एक साथ कई अनुभव नहीं दिए जा सकते. खास तौर पर, एआर और मिक्स्ड रिएलिटी वाले एनवायरमेंट में, लोग अक्सर एक ही समय पर कई अलग-अलग ऐप्लिकेशन इस्तेमाल करना चाहते हैं.
स्पेशल कंटेनर, 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 दिखाना ज़रूरी है.
सही इस्तेमाल (इंप्लिसिट)
- xrCreateSpatialContainerEXT को कॉल करने से पहले,
XR_EXT_spatial_containerएक्सटेंशन को चालू करना ज़रूरी है -
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
graphicsPresentationmust be a valid XrSpatialContainerGraphicsPresentationEXT value
जब कोई स्पेशल कंटेनर इस्तेमाल करने लायक न रह जाए, तो रनटाइम को 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
xrDestroySpatialContainerEXT फ़ंक्शन, किसी मौजूदा स्पेशल कंटेनर को मिटा देता है.
XrResult xrDestroySpatialContainerEXT(
XrSpatialContainerEXT spatialContainer);
पैरामीटर की जानकारी
spatialContainerएक XrSpatialContainerEXT है, जिसे पहले xrCreateSpatialContainerEXT ने बनाया था.
स्पेशल कंटेनर को खत्म करने के बाद, रनटाइम को कंटेनर का कॉन्टेंट नहीं दिखाना चाहिए. साथ ही, कंटेनर के बारे में कोई और इवेंट सूची में नहीं जोड़ना चाहिए.
किसी ऐप्लिकेशन को ऐसे स्पेशल कंटेनर को बंद नहीं करना चाहिए जो दिख रहा हो. ऐसा करने से, ग्राफ़िकल आर्टफ़ैक्ट दिख सकते हैं. इसके बजाय, ऐप्लिकेशन को xrRequestSpatialContainerVisibleEXT का इस्तेमाल करके, स्पेशल कंटेनर को छिपाने का अनुरोध करना चाहिए. इसके बाद, XrEventDataSpatialContainerVisibleChangedEXT इवेंट का इंतज़ार करना चाहिए और फिर कंटेनर को बंद करना चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- xrDestroySpatialContainerEXT को कॉल करने से पहले,
XR_EXT_spatial_containerएक्सटेंशन चालू होना ज़रूरी है -
spatialContainerएक मान्य XrSpatialContainerEXT हैंडल होना चाहिए
Thread की सुरक्षा
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
इमेज 18. स्पेशल कंटेनर स्पेस के ऐक्सिस कन्वेंशन
स्पेशल कंटेनर स्पेस, नॉन-वर्ल्ड लॉक्ड ऑरिजिन है. इमर्सिव मोड में, जिन ऐप्लिकेशन को वर्ल्ड लॉक ओरिजिन की ज़रूरत होती है वे 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_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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
किसको दिखे
ऐप्लिकेशन, xrRequestSpatialContainerVisibleEXT का इस्तेमाल करके, स्पेशल कंटेनर को दिखाने या छिपाने का अनुरोध करते हैं.
XrResult xrRequestSpatialContainerVisibleEXT(
XrSpatialContainerEXT spatialContainer,
const XrSpatialContainerVisibleRequestInfoEXT* info);
पैरामीटर की जानकारी
spatialContainer, XrSpatialContainerEXT है, जिसके लिए बदलाव का अनुरोध किया जाना है.info, XrSpatialContainerVisibleRequestInfoEXT का पॉइंटर है. इसमें अनुरोध की गई विज़िबल स्टेट शामिल होती है.
स्पेशल कंटेनर को दिखाना या छिपाना, एक एसिंक्रोनस कार्रवाई है.
ऐप्लिकेशन को किसी स्पेशल कंटेनर को खत्म करने से पहले, उसे छिपाने का अनुरोध करना चाहिए. इससे रनटाइम को स्मूद ट्रांज़िशन दिखाने में मदद मिलती है. रनटाइम को स्पेशल कंटेनर छिपाने के अनुरोधों को स्वीकार करना चाहिए.
रनटाइम, स्पेशल कंटेनर दिखाने के अनुरोधों को अस्वीकार कर सकता है. ऐसे में, रनटाइम को XrEventDataSpatialContainerVisibleRequestDeniedEXT इवेंट को सूची में शामिल करना होगा. उदाहरण के लिए, कुछ रनटाइम, स्पेशल कंटेनर दिखाने के अनुरोध को अस्वीकार कर देंगे. ऐसा तब होगा, जब उपयोगकर्ता ने सिस्टम से मिले "छोटा करें" बटन का इस्तेमाल करके, स्पेशल कंटेनर को छिपाया हो.
रनटाइम को तब तक स्पेशल कंटेनर नहीं दिखाना चाहिए, जब तक ऐप्लिकेशन कम से कम एक बार उस स्पेशल कंटेनर को दिखाने का अनुरोध न करे. स्पेशल कंटेनर दिखाने के लिए ऐप्लिकेशन के पहले अनुरोध के बाद, रनटाइम स्पेशल कंटेनर की विज़िबिलिटी को बदल सकते हैं. यह ऐप्लिकेशन के अनुरोधों से अलग होता है. इससे ऐप्लिकेशन को, स्पेशल कंटेनर की शुरुआती स्थिति और कॉन्टेंट को कंट्रोल करने की सुविधा मिलती है. साथ ही, रनटाइम को टास्कबार जैसा सिस्टम यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराने की सुविधा मिलती है. इससे उपयोगकर्ता यह चुन सकता है कि कौनसे स्पेशल कंटेनर दिखें.
रनटाइम को XrSystemSpatialContainerPropertiesEXT :: supportsBounded और XrSystemSpatialContainerPropertiesEXT :: supportsImmersive के आधार पर, स्पेसियल कंटेनर को बाउंड मोड में दिखाने के अनुरोधों को अस्वीकार करना चाहिए. ऐसा तब हो सकता है, जब डिफ़ॉल्ट बाउंड मोड XR_SPATIAL_CONTAINER_BOUNDS_MODE_BOUNDED_EXT किसी सिस्टम के साथ काम न करता हो.
ध्यान दें
कुछ सिस्टम पर, स्पेशल कंटेनर को दिखाने या छिपाने के लिए, सिस्टम की सेवाओं के साथ कम्यूनिकेट करना ज़रूरी होता है. साथ ही, ऐसा हो सकता है कि उपयोगकर्ता के सिस्टम डायलॉग के साथ इंटरैक्ट करने के बाद ही, स्पेशल कंटेनर को दिखाया या छिपाया जाए. विज़िबिलिटी स्टेटस में बदलाव करने का अनुरोध करने के लिए, एसिंक्रोनस डिज़ाइन का इस्तेमाल किया जाता है. इससे रनटाइम को इन दोनों कार्रवाइयों को पूरा करने का समय मिलता है.
सही इस्तेमाल (इंप्लिसिट)
- xrRequestSpatialContainerVisibleEXT को कॉल करने से पहले,
XR_EXT_spatial_containerएक्सटेंशन को चालू करना ज़रूरी है -
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
जब भी रनटाइम, किसी स्पेशल कंटेनर के दिखने की सेटिंग में बदलाव करता है, तो रनटाइम को नई स्थिति के साथ 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 होगी. रनटाइम को कंटेनर रेंडर करने में 0.5 सेकंड से ज़्यादा की देरी नहीं करनी चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- XrEventDataSpatialContainerVisibleChangedEXT का इस्तेमाल करने से पहले,
XR_EXT_spatial_containerएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_EVENT_DATA_SPATIAL_CONTAINER_VISIBLE_CHANGED_EXTहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
जब भी रनटाइम, कंटेनर दिखाने के अनुरोध को अस्वीकार करता है, तो रनटाइम को 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
इंटरैक्ट किया जा सकता है
कोई ऐप्लिकेशन, स्पेशल कंटेनर को इंटरैक्टिव बनाने का अनुरोध नहीं कर सकता. कौनसे स्पेशल कंटेनर इंटरैक्टिव हैं, यह पूरी तरह से रनटाइम से कंट्रोल होता है. इंटरैक्ट किया जा सकने वाला स्पेशल कंटेनर, ज़रूरी है कि दिखे.
जब भी रनटाइम, किसी स्पेशल कंटेनर की इंटरैक्टेबल स्थिति को बदलता है, तो रनटाइम को नई स्थिति के साथ 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
परिबंध
स्पेशल कंटेनर में बाउंड मोड और बाउंडिंग बॉक्स होता है. स्पेशल कंटेनर का बाउंड मोड यह बताता है कि बाउंड कैसे काम करते हैं. स्पेशल कंटेनर, इसके बाउंडिंग बॉक्स के अंदर ड्रॉ करता है.
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 का पॉइंटर है. इसमें अनुरोध किया गया बाउंड मोड शामिल होता है.
स्पेशल कंटेनर के बाउंड मोड को बदलना, एक एसिंक्रोनस कार्रवाई है. साथ ही, ऐप्लिकेशन के बदलाव का अनुरोध करने के कई सेकंड बाद, रनटाइम किसी बदलाव या अस्वीकार किए गए इवेंट को सूची में डाल सकते हैं. इससे रनटाइम को यूज़र इंटरफ़ेस (यूआई) पॉप-अप करने की अनुमति मिलती है. यह यूज़र इंटरफ़ेस (यूआई), उपयोगकर्ता को सुरक्षित तरीके से इमर्सिव मोड में जाने की अनुमति देने के लिए ज़रूरी है.
रनटाइम को, न दिखने वाले स्पेशल कंटेनर के लिए बाउंड मोड बदलने के अनुरोध को ज़रूर स्वीकार करना चाहिए. अगर रनटाइम, न दिखने वाले कंटेनर के लिए बाउंड मोड के अनुरोध को अस्वीकार कर देता है, तो वह ऐसे स्पेशल कंटेनर को दिखाने के अनुरोध को अस्वीकार या रोक सकता है. इससे ऐप्लिकेशन, कंटेनर को इमर्सिव कंटेनर के तौर पर शुरू कर सकते हैं. रनटाइम, दिखने वाले स्पेशल कंटेनर के बाउंड मोड को बदलने के अनुरोधों को अस्वीकार कर सकता है. ऐसे में, रनटाइम को 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
जब भी रनटाइम, किसी कंटेनर के बाउंड मोड को बदलने के अनुरोध को अस्वीकार करता है, तो रनटाइम को 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
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की वैल्यू 0 है, तो यह ज़रूरी क्षमता का पॉइंटर है.graphicsPresentations, XrSpatialContainerGraphicsPresentationEXT वैल्यू के कलेक्शन का पॉइंटर है. हालांकि, अगरgraphicsPresentationCapacityInputकी वैल्यू 0 है, तो यह null हो सकता है.- ज़रूरी
graphicsPresentationsसाइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
दिए गए systemId और इंस्टेंस के लाइफ़टाइम के लिए, रनटाइम को इस सूची से हमेशा एक जैसे बफ़र कॉन्टेंट दिखाने चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- xrEnumerateSupportedSpatialContainerGraphicsPresentationsEXT को कॉल करने से पहले,
XR_EXT_spatial_containerएक्सटेंशन को चालू करना ज़रूरी है -
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 के मुख्य एपीआई में इस तरह बदलाव होता है.
रनटाइम: सिस्टम या डिवाइस का ऐक्सेस खोना
रनटाइम: सिस्टम या डिवाइस का ऐक्सेस खोना
xrDestroySession
xrDestroySession
IDLE
(चल रहा है)
कुछ समय से इस्तेमाल में नहीं है...
xrGetSystem
xrCreateSession
xrGetSystem...
xrCreateInstance
xrCreateIn...
xrDestroySession
xrDestroySession
LOSS_PENDING
(नहीं चल रहा है)
नुकसान की भरपाई की प्रक्रिया जारी है...
xrDestroyInstance
xrDestroyInstance
ऐप्लिकेशन: ज़रूरी नहीं
एक्सआर को फिर से लॉन्च करें
ऐप्लिकेशन: ज़रूरी नहीं...
इमेज 19. नए सेशन की स्टेट मशीन
- सेशन कभी भी
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 फ़ंक्शन को अब ग्राफ़िक्स एपीआई बाइंडिंग स्ट्रक्चर की ज़रूरत नहीं है. अन्य एक्सटेंशन के लिए, ग्राफ़िक्स बाइंडिंग की ज़रूरत पड़ सकती है. उदाहरण के लिए, ग्राफ़िक्स एपीआई का इस्तेमाल करके रेंडर करने के लिए, स्पेशल कंटेनर की ज़रूरत पड़ सकती है.
ऊपर बताया गया व्यवहार, 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होनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
Android मेनिफ़ेस्ट एंट्री
एओएसपी पर आधारित रनटाइम में, कस्टम व्यवहार हो सकता है. यह व्यवहार, शुरुआती स्पेशल कंटेनर की स्थिति पर आधारित होता है. यह स्थिति, किसी भी ऐप्लिकेशन कोड को चलाने से पहले शुरू होती है. उदाहरण के लिए, रनटाइम की वजह से, गतिविधि के लिए असाइन किए गए संसाधनों, लॉन्च ऐनिमेशन या स्प्लैश स्क्रीन के डिसप्ले में बदलाव हो सकता है. इस मकसद के लिए, ये प्रॉपर्टी दी गई हैं. ये <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" /> टैग की जगह लेते हैं. स्पेशल कंटेनर पर आधारित ऐप्लिकेशन को इस टैग का इस्तेमाल नहीं करना चाहिए. हालांकि, अगर उन्हें एओएसपी पर आधारित पुराने रनटाइम के साथ काम करना है, तो वे इसका इस्तेमाल कर सकते हैं.
<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
- XrSpatialContainerCreateInfoEXT
- XrSpatialContainerSpaceCreateInfoEXT
- XrSpatialContainerStateEXT
- XrSpatialContainerStateGetInfoEXT
- XrSpatialContainerVisibleRequestInfoEXT
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
समस्याएं
हम एक से ज़्यादा अनुरोधों को कैसे मैनेज करते हैं? क्या ऐप्लिकेशन को एक बार अनुमति मिलनी चाहिए या कई बार? अगर कॉल कई फ़्रेम में हैं, तो जवाब अलग हो सकता है. अगर कई अनुरोधों के नतीजे के तौर पर कोई कार्रवाई नहीं होती है, तो जवाब अलग हो सकता है. जैसे, किसी स्पेशल कंटेनर को दिखाने का अनुरोध करना और फिर उसे न दिखाने का अनुरोध करना.
- समस्या हल हो गई है. बदलाव वाले इवेंट और अस्वीकार किए गए इवेंट के लिए अलग-अलग विकल्प. Noop अनुरोधों से, बदलाव वाले इवेंट की सूची नहीं बनती. इससे ऐप्लिकेशन डेवलपर के लिए सिर्फ़ ग़ैर-ज़रूरी डेटा जनरेट होता है. साथ ही, रनटाइम के लिए इसे फ़िल्टर करना आसान होता है. अगर दिखने वाले कई अनुरोधों को अस्वीकार कर दिया जाता है, तो रनटाइम को हर अनुरोध के लिए, अस्वीकार किए जाने वाला इवेंट जनरेट करना चाहिए.
कॉन्फ़ॉर्मेंस ऑटोमेशन एक्सटेंशन को किस तरह से तय किया जाना चाहिए, ताकि नीति के व्यवहार के लिए सभी वैकल्पिक स्पेसिफ़िकेशन टेक्स्ट की जांच सीटीएस से की जा सके?
- समस्या हल हो गई है. अलग से टेस्ट एक्सटेंशन. सिर्फ़ सीटीएस के लिए, टेस्ट एक्सटेंशन रनटाइम लागू किया जाएगा. इससे सीटीएस को सिस्टम की सभी नीतियों को कंट्रोल करने की अनुमति मिलेगी.
क्या हमें स्पेशल कंटेनर की पोज़िशन बदलने पर, किसी इवेंट की ज़रूरत है?
- समस्या हल हो गई है. नहीं. स्पेशल कंटेनर स्पेस, नॉन-वर्ल्ड लॉक होता है. साथ ही,
XR_REFERENCE_SPACE_TYPE_VIEWजैसे अन्य स्पेस में बदलाव होने पर इवेंट नहीं होते.
- समस्या हल हो गई है. नहीं. स्पेशल कंटेनर स्पेस, नॉन-वर्ल्ड लॉक होता है. साथ ही,
अगर एक से ज़्यादा स्पेशल कंटेनर हैं, तो xrSyncActions कैसे काम करता है?
- समस्या हल हो गई है. कोई बदलाव करने की ज़रूरत नहीं है. xrSyncActions, सेशन में मौजूद सभी स्पेशल कंटेनर पर लागू होगा. अगर कोई ऐप्लिकेशन, इनपुट ऐक्शन को किसी खास स्पेशल कंटेनर पर भेजना चाहता है, तो वह इंटरैक्ट किए जा सकने वाले हर कंटेनर की स्थिति को देख सकता है. इससे यह तय किया जा सकता है कि कौनसे कंटेनर मान्य टारगेट हैं. अगर कोई ऐप्लिकेशन सिर्फ़ एक स्पेशल कंटेनर के लिए इनपुट ऐक्शन की स्थिति को सिंक करना चाहता है, तो उसे एक अतिरिक्त एक्सटेंशन की ज़रूरत होगी. हालांकि, हमारा मकसद एक ऐसे एक्सटेंशन पर फ़ोकस करना है जो ऐप्लिकेशन को पूरी तरह से इवेंट पर आधारित होने की अनुमति देता है. साथ ही, फ़्रेम लूप में xrSyncActions कॉल की ज़रूरत को खत्म करता है.
कभी-कभी अपडेट किए जाने वाले ऐप्लिकेशन, इनपुट को कैसे मैनेज करते हैं?
- समस्या हल हो गई है. कोई बदलाव करने की ज़रूरत नहीं है. यह EXT_spatial_container के लिए तो अहम है ही, स्पेशल कंटेनर के बाहर भी इसकी अहमियत है. इसे इवेंट चैनल एक्सटेंशन की मदद से मैनेज किया जा सकता है. यह दोनों मामलों में काम करता है. स्पेशल कंटेनर के लिए, हम किसी एक स्पेशल कंटेनर के इवेंट को फ़िल्टर करने के और तरीके जोड़ेंगे.
क्या हमें डिकपल्ड इनपुट और रेंडरिंग लूप वाले ऐप्लिकेशन के लिए, इनपुट लूप के समय को थ्रॉटल / कंट्रोल करने के लिए इंतज़ार करना होगा?
- समस्या हल हो गई है. कोई बदलाव करने की ज़रूरत नहीं है. उम्मीद है कि इसे इवेंट चैनल और मौजूदा अनुरोध एक्सटेंशन के ज़रिए मैनेज किया जाएगा. Present request extension की मदद से, रेंडरिंग को इवेंट के हिसाब से किया जा सकता है. साथ ही, इसे फ़्रेम लूप से अलग किया जा सकता है.
क्या कोई स्पेशल कंटेनर, अन्य स्पेशल कंटेनर के हिसाब से अपनी पोज़िशन तय कर सकता है? यहां कुछ अहम बातें बताई गई हैं: क्या हमारे पास इसके इस्तेमाल का कोई उदाहरण है? अगर हां, तो स्पेशल कंटेनर स्पेस, LOCAL से कैसे कनेक्ट होते हैं?
- समस्या हल हो गई है. हां.
XR_REFERENCE_SPACE_TYPE_VIEWपर जाकर, एक ही सेशन में मौजूद स्पेशल कंटेनर के लिए ऐसा पहले से ही किया जा सकता है. साथ ही, व्यू के हिसाब से कॉन्टेंट दिखाना ज़रूरी है. अलग-अलग सेशन में (जैसे कि किसी दूसरी प्रोसेस में) स्पेशल कंटेनर पोज़ शेयर करने के लिए,XR_EXT_spatial_anchorऔर इसके मौजूदा परसिस्टेंस और शेयर करने के पैटर्न का इस्तेमाल करना चाहिए.
- समस्या हल हो गई है. हां.
अगर कोई स्पेशल कंटेनर नहीं दिख रहा है, तो क्या उसकी जगह का पता लगाया जा सकता है?
- समस्या हल हो गई है. नहीं. जब स्पेशल कंटेनर नहीं दिखता है, तो उसके स्पेस का पता नहीं लगाया जा सकता. इसका मतलब है कि इसमें स्पेशलाइज़्ड ऑडियो नहीं है. साथ ही, spatial_container न दिखने पर, ऐप्लिकेशन व्यू के हिसाब से कॉन्टेंट को "वॉर्म अप" नहीं कर सकता. ये दोनों ही सही हैं, क्योंकि जब कोई स्पेशल कंटेनर नहीं दिखता है, तो ऐप्लिकेशन को उस स्पेशल कंटेनर के लिए इस्तेमाल किए जाने वाले सीपीयू / जीपीयू लोड को रोकना चाहिए.
स्पेशल कंटेनर स्पेस को स्पेशल कंटेनर में कहां रखा जाना चाहिए? सुझावों को सेंटर या मिनिमल पॉइंट (minX, minY, minZ) पर रखा गया है.
- समस्या हल हो गई है. बीच में. ऐसी कोई जगह नहीं है जो स्पेशल कंटेनर के साइज़ बदलने वाले उपयोगकर्ता अनुभव (किनारों को मूव करना) के ज़्यादातर तरीकों से मूव न होती हो. Center का इस्तेमाल, आम तौर पर OpenXR के अन्य हिस्सों में किया जाता है. हमने 2D कंप्यूटिंग में विंडो के साथ अलाइन नहीं किया है. इसमें कम से कम कोऑर्डिनेट का इस्तेमाल किया जाता है, क्योंकि 3D मॉडल व्यूअर अक्सर इस नियम का पालन नहीं करते हैं.
स्पेशल कंटेनर के अंदर मौजूद रिसॉर्स को बनाने के लिए, रनटाइम की ज़रूरत कब होती है? कभी-कभी इसमें सिस्टम की सेवाओं के साथ आईपीसी शामिल होता है.
- समस्या हल हो गई है.
xrCreateSpatialContainerEXTके हिस्से के तौर पर सिंक्रोनस तरीके से. हालांकि, इसमें आईपीसी शामिल हो सकता है, लेकिन आम तौर पर कंटेनर बनाने में ज़्यादा खर्च नहीं आता. कुछ वेंडर के पास कंटेनर मैनेज करने के लिए ग्लोबल म्यूटेक्स होते हैं. हालांकि, आम तौर पर इनके लिए ज़्यादा इंतज़ार नहीं करना पड़ता. म्यूटेक्स कॉन्टेंशन से जुड़ी समस्याएं, वेंडर के हिसाब से होने वाली गड़बड़ियां हैं. उम्मीद है कि हर वेंडर इन्हें ठीक करेगा.
- समस्या हल हो गई है.
क्या हमें इस बात के सिग्नल की ज़रूरत है कि XrSession, स्पेशल कंटेनर बनाएगा और इसलिए, लेगसी रेंडरिंग पाथ के साथ काम नहीं करेगा?
- समस्या हल हो गई है. हां. हम सेशन स्टेट मशीन में बुनियादी तौर पर बदलाव करते हैं.
वर्शन हिस्ट्री
रिविज़न 1, 06-08-2026 (जेरेड फ़ाइंडर, Google)
- एक्सटेंशन का शुरुआती ब्यौरा