XR_EXT_spatial_entity

Name String

XR_EXT_spatial_entity

एक्सटेंशन का टाइप

इंस्टेंस एक्सटेंशन

रजिस्टर किया गया एक्सटेंशन नंबर

741

बदलाव

1

पुष्टि की स्थिति

मंज़ूरी दी गई

एक्सटेंशन और वर्शन डिपेंडेंसी

XR_EXT_future

योगदान देने वाले

निहाव जैन, Google
जैरेड फ़ाइंडर, Google
नैटली फ़्ल्यूरी, Meta
यूइची तागुची, Meta
रॉन बेसेम्स, Meta
यिन ली, Microsoft
कार्तिक कडाप्पन, Magic Leap
जिमी आलमपरमबिल, ByteDance
ज़ीपेंग लियू, ByteDance
जून यान, ByteDance

खास जानकारी

यह एक्सटेंशन, OpenXR में सीन को समझने और स्पेशल रीज़निंग के लिए, कॉन्सेप्ट और बुनियादी बातों के बारे में बताता है. यह कई मिलती-जुलती, लेकिन अलग-अलग सुविधाओं को एक साथ लाता है. इन्हें इस एक्सटेंशन के मुताबिक, एक जैसे तरीके से गिना जाता है, कॉन्फ़िगर किया जाता है, और इंटरैक्ट किया जाता है. इस एक्सटेंशन में, इनमें से किसी भी फ़ंक्शनल एरिया की सटीक जानकारी नहीं दी गई है. इसलिए, औपचारिक जानकारी वाला टेक्स्ट कुछ हद तक अस्पष्ट हो सकता है. इस एक्सटेंशन की खास जानकारी वाले टेक्स्ट में शामिल उदाहरण, कभी-कभी आने वाले समय में उपलब्ध होने वाले या काल्पनिक एक्सटेंशन में बताई गई सुविधा के बारे में बताते हैं. ऐसा उदाहरण देने के मकसद से किया जाता है. हालांकि, इसमें इस तरह की अतिरिक्त सुविधा को सीमित या तय नहीं किया जाता.

इस एक्सटेंशन के मुख्य हिस्से ये हैं:

  • स्पेशल एंटिटी : यह फ़ंक्शन एंटिटी पर आधारित होता है. ये एंटिटी अपने-आप में बहुत कम फ़ंक्शन उपलब्ध कराती हैं.
  • स्पेशल कॉम्पोनेंट : इन इकाइयों से जुड़े कॉम्पोनेंट होते हैं, जो डेटा और व्यवहार उपलब्ध कराते हैं.
  • स्पेशल कॉम्पोनेंट के टाइप : हर स्पेशल कॉम्पोनेंट, किसी खास कॉम्पोनेंट टाइप का होता है. साथ ही, किसी भी इकाई में, किसी भी कॉम्पोनेंट टाइप का ज़्यादा से ज़्यादा एक कॉम्पोनेंट होता है.
  • स्पेशल कॉन्टेक्स्ट : स्पेशल एंटिटी के सभी इंटरैक्शन, शुरू करने और कॉन्फ़िगरेशन के फ़ेज़ के बाद कॉन्टेक्स्ट में होते हैं.
  • स्पेशल कैपेबिलिटी : स्पेशल एंटिटी को मैनिपुलेट करने की सुविधा, आम तौर पर कैपेबिलिटी से मिलती है . क्षमता का मतलब, किसी फ़ंक्शन की यूनिट से है. उदाहरण के लिए, ऐप्लिकेशन के तय किए गए ऐंकर, प्लेन की पहचान करना या इमेज ट्रैकिंग, बिना किसी सीमा के. आम तौर पर, हर सुविधा को एक अलग एक्सटेंशन में तय किया जाता है. यह एक्सटेंशन, इंस्टेंस बनाने के दौरान चालू होता है. साथ ही, इसे बनाने के दौरान किसी खास कॉन्टेक्स्ट के लिए चालू किया जाता है.
  • हर कैपेबिलिटी, कॉम्पोनेंट टाइप के सेट से जुड़ी होती है. इसके लिए, कॉम्पोनेंट, उस कैपेबिलिटी से एक्सपोज़ की गई हर इकाई पर मौजूद होते हैं. क्षमता तय करने वाला एक्सटेंशन यह बताता है कि क्षमता ("गारंटी") के लिए कौनसे कॉम्पोनेंट टाइप ज़रूरी हैं. वहीं, वही एक्सटेंशन या अन्य एक्सटेंशन, कुछ संभावित तरीकों से उपलब्ध कराए गए ज़रूरी नहीं कॉम्पोनेंट टाइप के बारे में बता सकते हैं. किसी भी संख्या में कैपेबिलिटी, इकाइयों को किसी दिए गए कॉम्पोनेंट टाइप के कॉम्पोनेंट उपलब्ध करा सकती हैं. ये कॉम्पोनेंट एक जैसे इस्तेमाल किए जा सकते हैं, भले ही इन्हें किसी भी कैपेबिलिटी ने बनाया हो.
  • स्पेशल कैपेबिलिटी फ़ीचर : कुछ सुविधाओं को कॉन्फ़िगर करने की ज़रूरत होती है. इसलिए, उन्हें कैपेबिलिटी फ़ीचर के हिसाब से पैरामीटर किया जाता है .

यह एक्सटेंशन, मौजूदा सिस्टम पर काम करने वाली हर सुविधा के लिए उपलब्ध कॉम्पोनेंट की सूची बनाने का तरीका उपलब्ध कराता है. इसमें ज़रूरी और वैकल्पिक कॉम्पोनेंट, दोनों शामिल हैं.

कुछ सिस्टम में क्षमताओं के लिए, पैरामीटर को अलग-अलग लेवल पर सेट करने की ज़रूरत पड़ सकती है. इसलिए, यह एक्सटेंशन मौजूदा सिस्टम में किसी क्षमता से जुड़ी, काम करने वाली क्षमता की सुविधाओं की गिनती करने का तरीका उपलब्ध कराता है.

यह एक्सटेंशन, कई सामान्य कॉम्पोनेंट के बारे में भी बताता है. इनका इस्तेमाल, कई तरह की क्षमताओं के लिए किया जा सकता है.

स्पेशल एंटिटी

स्पेशल इकाइयां ऐसी इकाइयां होती हैं जो किसी स्पेस में मौजूद होती हैं. इनमें अलग-अलग तरह का डेटा होता है, जिसे कॉम्पोनेंट में व्यवस्थित किया जाता है. इनमें से कोई भी वजह हो सकती है:

  • फ़िज़िकल (जैसे, दीवार और फ़र्श जैसी समतल सतहें, कुर्सियां और बुककेस जैसी चीज़ें वगैरह)
  • वर्चुअल (जैसे, किसी अन्य ऐप्लिकेशन या उपयोगकर्ता की ओर से अपलोड और शेयर किया गया कॉन्टेंट),
  • ऐप्लिकेशन से तय किया गया (उदाहरण के लिए, ऐप्लिकेशन किसी जगह को "लिविंग रूम" या "किचन" के तौर पर मार्क करता है या किसी पॉइंट को टीवी वगैरह रखने की जगह के तौर पर मार्क करता है)

ऐक्शन सिस्टम के ज़रिए दिखने वाली चीज़ों को स्पेशल एंटिटी के तौर पर मॉडल नहीं किया जाता. जैसे, कंट्रोलर या आई गेज़.

OpenXR में स्पेशल इकाइयों को एंटिटी-कॉम्पोनेंट सिस्टम के तौर पर मॉडल किया जाता है. हर स्पेशल एंटिटी में कॉम्पोनेंट का एक सेट होता है. साथ ही, हर कॉम्पोनेंट उस एंटिटी के लिए डेटा और व्यवहार का एक यूनीक सेट उपलब्ध कराता है.

स्पेशल एंटिटी को XrSpatialEntityIdEXT ऐटम या XrSpatialEntityEXT हैंडल से दिखाया जाता है. इसकी जानकारी, स्पेशल एंटिटी को दिखाने के तरीके सेक्शन में दी गई है.

स्पेशल कॉम्पोनेंट के टाइप

स्पेशल एंटिटी में एक या उससे ज़्यादा कॉम्पोनेंट होते हैं. ये कॉम्पोनेंट, उस एंटिटी के लिए डेटा या व्यवहार उपलब्ध कराते हैं. इस एक्सटेंशन से तय किए गए कुछ सामान्य कॉम्पोनेंट के लिए, सामान्य कॉम्पोनेंट देखें.

typedef enum XrSpatialComponentTypeEXT {
    XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
    XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
    XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
    XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
    XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
    XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
    XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
    XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
    XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
    XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
    XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
    XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
    XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
    XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
    XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
    XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
    XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
    XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
    XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
    XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
    XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
    XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
    XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
    XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
    XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
    XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
    XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
    XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
    XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID = 1000803000,
    XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
    XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;

XrSpatialComponentTypeEXT एन्यूमरेशन, अलग-अलग तरह के कॉम्पोनेंट की पहचान करता है. रनटाइम के दौरान, इनमें से कुछ कॉम्पोनेंट काम कर सकते हैं.

सूची में दिए गए सभी कॉम्पोनेंट टाइप, इस एक्सटेंशन से अपने-आप उपलब्ध नहीं होते: कुछ कॉम्पोनेंट के लिए, इंस्टेंस बनाते समय अतिरिक्त एक्सटेंशन चालू करने की ज़रूरत होती है. इस बारे में दस्तावेज़ में बताया गया है.

इन्यूमरेंट की ये वैल्यू होती हैं:

Enum की जानकारी

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT

यह कॉम्पोनेंट, किसी स्पेशल एंटिटी के लिए 2D बाउंड उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentBounded2DListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialBounded2DDataEXT है

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के लिए 3D बाउंड उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentBounded3DListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrBoxf है

XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT

ऐसा कॉम्पोनेंट जो किसी स्पेशल इकाई के लिए, पैरंट का XrSpatialEntityIdEXT उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentParentListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialEntityIdEXT है

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT

ऐसा कॉम्पोनेंट जो किसी स्पेशल इकाई के लिए 3D मेश उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMesh3DListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialMeshDataEXT है

XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT

यह कॉम्पोनेंट, किसी स्पेशल एंटिटी के लिए प्लेन अलाइनमेंट एनम उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentPlaneAlignmentListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialPlaneAlignmentEXT है (इसे XR_EXT_spatial_plane_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT

ऐसा कॉम्पोनेंट जो किसी स्पेशल इकाई के लिए 2D मेश उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMesh2DListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialMeshDataEXT है (इसे XR_EXT_spatial_plane_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के लिए 2D बाउंड्री पॉलीगॉन उपलब्ध कराता है. इससे जुड़ा सूची स्ट्रक्चर XrSpatialComponentPolygon2DListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialPolygon2DDataEXT है (इसे XR_EXT_spatial_plane_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT

यह कॉम्पोनेंट, किसी प्लेन के लिए सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentPlaneSemanticLabelListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialPlaneSemanticLabelEXT है (इसे XR_EXT_spatial_plane_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT

मार्कर के टाइप, आईडी, और जगह की जानकारी देने वाला कॉम्पोनेंट. इससे जुड़ा लिस्ट स्ट्रक्चर XrSpatialComponentMarkerListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialMarkerDataEXT है (इसे XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT

यह कॉम्पोनेंट, किसी सीन के लिए सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentObjectSemanticLabelListEXT है. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialObjectSemanticLabelEXT है. (XR_EXT_spatial_object_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT

यह कॉम्पोनेंट, कीबोर्ड के लिए सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentKeyboardSemanticLabelListEXT है. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialKeyboardSemanticLabelEXT है. इसे XR_EXT_spatial_object_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT

यह कॉम्पोनेंट, माउस के लिए सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMouseSemanticLabelListEXT है. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialMouseSemanticLabelEXT है. इसे XR_EXT_spatial_object_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT

ऐसा कॉम्पोनेंट जो ऐंकर के लिए जगह की जानकारी देता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentAnchorListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrPosef है (इसे XR_EXT_spatial_anchor एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के लिए सेव किया गया यूयूआईडी उपलब्ध कराता है. इससे जुड़ा सूची स्ट्रक्चर XrSpatialComponentPersistenceListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialPersistenceDataEXT है (इसे XR_EXT_spatial_persistence एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT

प्लेनर इमेज टाइप के बारे में बताने वाला कॉम्पोनेंट. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentImage2DListEXT है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialImageSizeEXT है . (XR_EXT_spatial_image_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के 3D मेश के लिए नॉर्मल उपलब्ध कराता है. इससे जुड़ा सूची का स्ट्रक्चर XrSpatialComponentMesh3DNormalsListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialBufferEXT है (इसे XR_EXT_spatial_mesh_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के 3D मेश के लिए, हर वर्टेक्स के हिसाब से सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMesh3DVertexSemanticLabelsListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialBufferEXT है ; बफ़र में मौजूद डेटा, XrSpatialMeshSemanticLabelEXT पर मैप होता है (इसे XR_EXT_spatial_mesh_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT

यह कॉम्पोनेंट, किसी स्पेशल इकाई के 3D मेश के लिए, हर ट्रायंगल-फ़ेस के सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialBufferEXT है ; बफ़र में मौजूद डेटा, XrSpatialMeshSemanticLabelEXT पर मैप होता है (इसे XR_EXT_spatial_mesh_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID

यह कॉम्पोनेंट, किसी ऑब्जेक्ट के लिए सिमैंटिक लेबल उपलब्ध कराता है. इससे जुड़ा लिस्ट स्ट्रक्चर XrSpatialComponentObjectSemanticLabelListANDROID है. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialObjectSemanticLabelANDROID है. इसे XR_ANDROID_spatial_object_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID

यह कॉम्पोनेंट, किसी इकाई पर रेकास्ट हिट की पोज़िशन की जानकारी देता है. इससे जुड़ा सूची स्ट्रक्चर XrSpatialComponentRaycastResultListANDROID है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialRaycastResultDataANDROID है (इसे XR_ANDROID_spatial_discovery_raycast एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID

यह कॉम्पोनेंट, अटैच की गई इकाई को शामिल करने वाली इकाई का आईडी उपलब्ध कराता है. इससे जुड़ा सूची का स्ट्रक्चर XrSpatialComponentSubsumedByListANDROID है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialEntityIdEXT है (इसे XR_ANDROID_spatial_component_subsumed_by एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS

ऐसा कॉम्पोनेंट जो शू बॉक्स के डाइमेंशन और रूम टाइप की जानकारी देता है. इससे जुड़ा लिस्ट स्ट्रक्चर XrSpatialComponentRoomListANDROIDSYS है. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialRoomDataANDROIDSYS है. इसे XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS

यह कॉम्पोनेंट, किसी बाउंड्री सरफ़ेस के मटीरियल टाइप की जानकारी देता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentMaterialTypeListANDROIDSYS है. इससे जुड़े डेटा का स्ट्रक्चर XrSpatialMaterialTypeANDROIDSYS है. इसे XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS

यह कॉम्पोनेंट, ट्रैक किए जा सकने वाले ऑब्जेक्ट की विश्वसनीयता की जानकारी देता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentConfidenceListANDROIDSYS है. इससे जुड़े डेटा का स्ट्रक्चर float है. इसे XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS

यह कॉम्पोनेंट, कमरे के खाली होने की जानकारी देता है. इससे जुड़ा सूची स्ट्रक्चर XrSpatialComponentRoomEmptinessListANDROIDSYS है. इससे जुड़ा डेटा स्ट्रक्चर float है. इसे XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1

यह कॉम्पोनेंट, अटैच की गई इकाई पर ऑक्यूपेंसी ग्रिड की जानकारी देता है. इससे जुड़ा सूची का स्ट्रक्चर XrSpatialComponentOccupancyGridListANDROIDX1 है ; इससे जुड़ा डेटा स्ट्रक्चर XrSpatialOccupancyGridDataANDROIDX1 है (इसे XR_ANDROIDX1_spatial_occupancy_grid एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID

क्वाड एनोटेशन के बारे में जानकारी देने वाला कॉम्पोनेंट. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentAnnotationQuadListANDROID है ; इससे जुड़े डेटा का स्ट्रक्चर XrSpatialAnnotationQuadDataANDROID है (इसे XR_ANDROID_spatial_annotation_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2

यह कॉम्पोनेंट, स्ट्रीटस्केप ज्यामिति के लिए मेटाडेटा उपलब्ध कराता है. इससे जुड़ी सूची का स्ट्रक्चर XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 है. इससे जुड़े डेटा का स्ट्रक्चर XrSpatialStreetscapeGeometryMetadataANDROIDX2 है. इसे XR_ANDROIDX2_geospatial_streetscape एक्सटेंशन ने जोड़ा है

XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID

ऐसा कॉम्पोनेंट जो किसी इकाई को ज्यामिति पॉइंट के तौर पर पहचानता है. इस कॉम्पोनेंट टाइप के लिए, कोई सूची या डेटा स्ट्रक्चर मौजूद नहीं है. इस कॉम्पोनेंट की मौजूदगी से सिर्फ़ यह पता चलता है कि किसी इकाई को ऐंकर से अटैच किया जा सकता है. (XR_ANDROID_spatial_geometry_point एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1

यह कॉम्पोनेंट, पर्सिस्टेंस स्कोप के बारे में बताता है. इसमें इकाई को सेव किया जाता है. अगर रनटाइम, XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT के साथ काम करता है, तो यह ज़रूरी है कि वह इस कॉम्पोनेंट के साथ भी काम करे. इससे जुड़ा डेटा स्ट्रक्चर XrSpatialBufferEXT है. सूची का स्ट्रक्चर XrSpatialComponentPersistenceScopeDataListANDROIDX1 है. (XR_ANDROIDX1_spatial_anchor_cloud_sharing एक्सटेंशन ने जोड़ा है)

स्पेशल ऑडियो की सुविधाएं और सेटअप

स्पेशल कैपेबिलिटी से, रनटाइम की उन इकाइयों को खोजने की क्षमता का पता चलता है जिनमें कॉम्पोनेंट का एक सेट मौजूद होता है. ऐप्लिकेशन, XrSpatialContextEXT बनाते समय, स्पेशल क्षमता के कॉम्पोनेंट चालू करते हैं. इसके बाद, रनटाइम को खोजी गई इकाइयों पर सिर्फ़ चालू किए गए कॉम्पोनेंट उपलब्ध कराने चाहिए. उदाहरण के लिए, अगर कोई रनटाइम यह रिपोर्ट करता है कि किसी क्षमता के कॉम्पोनेंट में से एक "सिमैंटिक लेबल" है, तो इसका मतलब है कि ऐप्लिकेशन उस क्षमता के कॉन्फ़िगरेशन के ज़रिए सिमैंटिक लेबल चालू कर सकता है. साथ ही, रनटाइम को सिर्फ़ तब सिमैंटिक लेबल कॉम्पोनेंट उपलब्ध कराना चाहिए, जब उसे कॉन्फ़िगर किया गया हो.

typedef enum XrSpatialCapabilityEXT {
    XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
    XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
    XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
    XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
    XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
    XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
    XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
    XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
    XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
    XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
    XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
    XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;

XrSpatialCapabilityEXT एन्यूमरेशन से, उन अलग-अलग तरह की सुविधाओं की पहचान की जाती है जो रनटाइम के साथ काम कर सकती हैं.

इन्यूमरेंट की ये वैल्यू होती हैं:

Enum की जानकारी

XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT

प्लेन ट्रैकिंग (XR_EXT_spatial_plane_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT

क्यूआर कोड का पता लगाने और उन्हें ट्रैक करने की सुविधा. (XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT

माइक्रो क्यूआर कोड का पता लगाने और उन्हें ट्रैक करने की सुविधा. (XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT

Aruco मार्कर का पता लगाने और उन्हें ट्रैक करने की सुविधा. (XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT

AprilTags का पता लगाने और उन्हें ट्रैक करने की सुविधा. (XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT

ऑब्जेक्ट ट्रैकिंग (XR_EXT_spatial_object_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_ANCHOR_EXT

स्पेशल ऐंकर बनाने की सुविधा (XR_EXT_spatial_anchor एक्सटेंशन ने जोड़ी है)

XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT

समतल रेफ़रंस इमेज का पता लगाने और उन्हें ट्रैक करने की सुविधा. (XR_EXT_spatial_image_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

किसी एनवायरमेंट के मेश को ट्रैक करने की क्षमता. (XR_EXT_spatial_mesh_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID

ऑब्जेक्ट ट्रैकिंग (XR_ANDROID_spatial_object_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID

डेप्थ बफ़र के ख़िलाफ़ रेकास्ट (XR_ANDROID_spatial_discovery_raycast एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS

XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन की मदद से, किसी स्पेस को ट्रैक करने की सुविधा जोड़ी गई

XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS

कमरे की सीमा को ट्रैक करने की सुविधा (XR_ANDROIDSYS_spatial_room_tracking एक्सटेंशन ने जोड़ी है)

XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID

एनोटेशन ट्रैकिंग (XR_ANDROID_spatial_annotation_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2

स्ट्रीटस्केप ज्यामिति (XR_ANDROIDX2_geospatial_streetscape एक्सटेंशन से जोड़ी गई)

xrEnumerateSpatialCapabilitiesEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrEnumerateSpatialCapabilitiesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    capabilityCapacityInput,
    uint32_t*                                   capabilityCountOutput,
    XrSpatialCapabilityEXT*                     capabilities);

पैरामीटर की जानकारी

  • instance, XrInstance का हैंडल है.
  • systemId वह XrSystemId है जिसकी स्पेशल ऑडियो की सुविधाओं की गिनती की जाएगी.
  • capabilityCapacityInput, capabilities कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • capabilityCountOutput, क्षमताओं की संख्या है या capabilityCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • capabilities, XrSpatialCapabilityEXT का कलेक्शन है. अगर capabilityCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी capabilities साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, xrEnumerateSpatialCapabilitiesEXT का इस्तेमाल करके, दिए गए XrSystemId के साथ काम करने वाली स्पेशल क्षमताओं की सूची को एन्यूमरेट कर सकता है.

रनटाइम को उन स्पेशल ऑडियो सुविधाओं की गिनती नहीं करनी चाहिए जिनका एक्सटेंशन instance के लिए चालू नहीं है.

सही इस्तेमाल (इंप्लिसिट)

  • xrEnumerateSpatialCapabilitiesEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • instance एक मान्य XrInstance हैंडल होना ज़रूरी है
  • capabilityCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर capabilityCapacityInput की वैल्यू 0 नहीं है, तो capabilities को capabilityCapacityInput XrSpatialCapabilityEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • 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

xrEnumerateSpatialCapabilityComponentTypesEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    XrSpatialCapabilityComponentTypesEXT*       capabilityComponents);

पैरामीटर की जानकारी

  • instance, XrInstance का हैंडल है.
  • systemId वह XrSystemId है जिसके स्पेशल कैपेबिलिटी कॉम्पोनेंट की गिनती की जाएगी.
  • capability, XrSpatialCapabilityEXT है. इसके लिए, कॉम्पोनेंट की गिनती की जाएगी.
  • capabilityComponents, XrSpatialCapabilityComponentTypesEXT का पॉइंटर है. यह एक इनपुट/आउटपुट स्ट्रक्चर है, जिसमें ऐप्लिकेशन के लिए तय किया गया कलेक्शन भरा जाता है.

यह फ़ंक्शन, कॉम्पोनेंट के उन टाइप की गिनती करता है जो सिस्टम में कॉन्फ़िगर की गई इकाइयों पर, दी गई सुविधा उपलब्ध कराती है.

ऐप्लिकेशन, XrSpatialCapabilityComponentTypesEXT :: componentTypes में बताए गए कॉम्पोनेंट टाइप का इस्तेमाल कर सकता है. इससे कॉम्पोनेंट के पूरे सेट को समझा जा सकता है. systemId, capability के लिए इन कॉम्पोनेंट को इस्तेमाल करने की सुविधा देता है. साथ ही, इस सूची का इस्तेमाल करके यह तय किया जा सकता है कि capability के लिए XrSpatialContextEXT बनाते समय, उसके लिए मान्य कॉन्फ़िगरेशन क्या है.

अगर xrEnumerateSpatialCapabilitiesEXT ने capability को एन्यूमेरेटर नहीं किया है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना चाहिए.

रनटाइम को उन स्पेशल कॉम्पोनेंट टाइप की गिनती नहीं करनी चाहिए जिनका एक्सटेंशन instance के लिए चालू नहीं है.

सही इस्तेमाल (इंप्लिसिट)

  • xrEnumerateSpatialCapabilityComponentTypesEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • instance एक मान्य XrInstance हैंडल होना ज़रूरी है
  • capability की वैल्यू, XrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए
  • capabilityComponents को XrSpatialCapabilityComponentTypesEXT स्ट्रक्चर का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialCapabilityComponentTypesEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialCapabilityComponentTypesEXT {
    XrStructureType               type;
    void*                         next;
    uint32_t                      componentTypeCapacityInput;
    uint32_t                      componentTypeCountOutput;
    XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialCapabilityComponentTypesEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • componentTypeCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • componentTypeCountOutput, कॉम्पोनेंट टाइप की संख्या है या componentTypeCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • componentTypes, XrSpatialComponentTypeEXT का कलेक्शन है. अगर componentTypeCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी componentTypes साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialCapabilityComponentTypesEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • अगर componentTypeCapacityInput की वैल्यू 0 नहीं है, तो componentTypes को componentTypeCapacityInput XrSpatialComponentTypeEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

स्पेशल ऑडियो की सुविधा

typedef enum XrSpatialCapabilityFeatureEXT {
    XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
    XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
    XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
    XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
    XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
    XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
    XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
    XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;

कुछ सुविधाओं में ऐसे पैरामीटर होते हैं जो ऐप्लिकेशन को एक्सपोज़ किए जाते हैं. इससे यह कॉन्फ़िगर किया जाता है कि रनटाइम के दौरान कॉम्पोनेंट डेटा की गिनती कैसे की जाती है. पैरामीटर तय करने/कॉन्फ़िगर करने की इन सुविधाओं को कैपेबिलिटी फ़ीचर कहा जाता है. उदाहरण के लिए, इमेज ट्रैक करने की सुविधा के लिए, रनटाइम किसी ऐप्लिकेशन की सुविधा के साथ काम कर सकता है. इससे यह तय किया जा सकता है कि ट्रैक की गई इमेज, स्टेशनरी हैं या नहीं.

कॉन्फ़िगरेशन स्ट्रक्चर के ज़रिए रनटाइम को यह जानकारी देने से, जुड़ी हुई इकाइयों पर मौजूद कॉम्पोनेंट टाइप के सेट में बदलाव नहीं होना चाहिए. उदाहरण के लिए, ट्रैक की गई इमेज पर. हालांकि, रनटाइम शायद इमेज ट्रैकिंग की क्षमता को ऑप्टिमाइज़ कर सके और ऐप्लिकेशन को बेहतर अनुभव दे सके.

ऐसी सुविधाओं को XrSpatialCapabilityFeatureEXT से दिखाया जाता है. साथ ही, ऐप्लिकेशन उन्हें xrEnumerateSpatialCapabilityFeaturesEXT का इस्तेमाल करके दिखाता है.

हर सुविधा को चालू करने के लिए, उससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर होता है. इस तरह के कॉन्फ़िगरेशन स्ट्रक्चर, संबंधित क्षमता के XrSpatialCapabilityConfigurationBaseHeaderEXT :: next से जुड़े होने चाहिए.

इन्यूमरेंट की ये वैल्यू होती हैं:

Enum की जानकारी

XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT

ऐप्लिकेशन को मार्कर का साइज़ तय करने की अनुमति देने वाली सुविधा. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialMarkerSizeEXT है. इसे XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT

यह सुविधा, ऐप्लिकेशन को यह बताने की अनुमति देती है कि मार्कर स्टैटिक हैं या नहीं. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialMarkerStaticOptimizationEXT है. इसे XR_EXT_spatial_marker_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT

स्पेशल फ़ीचर की मदद से, ऐप्लिकेशन XrSpatialObjectSemanticLabelEXT से लेबल के सबसेट की जानकारी दे सकते हैं, ताकि रनटाइम को ट्रैक किया जा सके. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialFeatureObjectSemanticLabelSubsetEXT है. (XR_EXT_spatial_object_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID

रनटाइम, XrSpatialDiscoverySnapshotCreateInfoEXT के लिए XrSpatialBoundsSpherefANDROID फ़िल्टर के साथ काम करता है ; इसके लिए, स्पेशल कॉन्टेक्स्ट बनाने के दौरान किसी कॉन्फ़िगरेशन स्ट्रक्चर को शामिल करने की ज़रूरत नहीं होती. (XR_ANDROID_spatial_discovery_bounds एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID

रनटाइम, XrSpatialDiscoverySnapshotCreateInfoEXT के लिए XrSpatialBoundsBoxfANDROID फ़िल्टर के साथ काम करता है ; इसके लिए, स्पेशल कॉन्टेक्स्ट बनाने के दौरान किसी कॉन्फ़िगरेशन स्ट्रक्चर को शामिल करने की ज़रूरत नहीं होती. (XR_ANDROID_spatial_discovery_bounds एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID

रनटाइम, XrSpatialDiscoverySnapshotCreateInfoEXT के लिए XrSpatialBoundsFrustumfANDROID फ़िल्टर के साथ काम करता है. इसके लिए, स्पेशल कॉन्टेक्स्ट बनाने के दौरान किसी कॉन्फ़िगरेशन स्ट्रक्चर को शामिल करने की ज़रूरत नहीं होती. (XR_ANDROID_spatial_discovery_bounds एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT

रनटाइम, ट्रैक की गई और पहचानी गई इमेज के साइज़ का अपने-आप पता लगाता है. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialImageSizeEXT है. इसे XR_EXT_spatial_image_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT

रनटाइम, XrSpatialImageStaticOptimizationEXT के साथ काम करता है. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialImageStaticOptimizationEXT है. (XR_EXT_spatial_image_tracking एक्सटेंशन ने जोड़ा है)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT

रनटाइम, XrSpatialImageSizeEXT के साथ काम करता है. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialImageSizeEXT है. इसे XR_EXT_spatial_image_tracking एक्सटेंशन ने जोड़ा है

XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT

आस-पास के माहौल के वॉटरटाइट मेश को ट्रैक करने की सुविधा. इससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर XrSpatialFeatureTrackWatertightMeshEXT है. (XR_EXT_spatial_mesh_tracking एक्सटेंशन ने जोड़ा है)

xrEnumerateSpatialCapabilityFeaturesEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    uint32_t                                    capabilityFeatureCapacityInput,
    uint32_t*                                   capabilityFeatureCountOutput,
    XrSpatialCapabilityFeatureEXT*              capabilityFeatures);

पैरामीटर की जानकारी

  • instance, XrInstance का हैंडल है.
  • systemId वह XrSystemId है जिसकी स्पेशल कैपेबिलिटी की सुविधाओं की गिनती की जाएगी.
  • capability, XrSpatialCapabilityEXT है. इसके लिए, सुविधाओं की गिनती की जाएगी.
  • capabilityFeatureCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • capabilityFeatureCountOutput, सुविधाओं की संख्या है या capabilityFeatureCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • XrSpatialCapabilityFeatureEXT का कलेक्शन capabilityFeatures है. अगर capabilityFeatureCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी capabilityFeatures साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, xrEnumerateSpatialCapabilityFeaturesEXT का इस्तेमाल करके, XrSpatialCapabilityEXT के लिए किसी सिस्टम में काम करने वाली सुविधाओं का पता लगाता है.

जिन क्षमताओं में सुविधाएं उपलब्ध होती हैं उनके लिए, ऐप्लिकेशन चालू करने के लिए सुविधा या सुविधाएं चुनता है. साथ ही, XrSpatialContextCreateInfoEXT :: capabilityConfigs में क्षमता के कॉन्फ़िगरेशन स्ट्रक्चर की अगली चेन में, उससे जुड़ा कॉन्फ़िगरेशन स्ट्रक्चर उपलब्ध कराता है.

अगर capability, xrEnumerateSpatialCapabilitiesEXT से बताई गई क्षमता नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना चाहिए .

रनटाइम को स्पेशल ऑडियो की उन सुविधाओं की गिनती नहीं करनी चाहिए जिनका एक्सटेंशन instance के लिए चालू नहीं है.

सही इस्तेमाल (इंप्लिसिट)

  • xrEnumerateSpatialCapabilityFeaturesEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • instance एक मान्य XrInstance हैंडल होना ज़रूरी है
  • capability की वैल्यू, XrSpatialCapabilityEXT की मान्य वैल्यू होनी चाहिए
  • capabilityFeatureCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर capabilityFeatureCapacityInput की वैल्यू 0 नहीं है, तो capabilityFeatures को capabilityFeatureCapacityInput XrSpatialCapabilityFeatureEXT वैल्यू के कलेक्शन का पॉइंटर होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

स्पेशल कॉन्टेक्स्ट

स्पेशल कॉन्टेक्स्ट बनाना

XR_DEFINE_HANDLE(XrSpatialContextEXT)

XrSpatialContextEXT हैंडल, उपयोगकर्ता के आस-पास मौजूद कुछ स्पेशल इकाइयों को खोजने और अपडेट करने के लिए संसाधनों को दिखाता है. ऐप्लिकेशन इस हैंडल का इस्तेमाल करके, इस एक्सटेंशन में मौजूद अन्य फ़ंक्शन की मदद से, स्पेशल एंटिटी को खोज सकता है और उन्हें अपडेट कर सकता है.

xrCreateSpatialContextAsyncEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialContextAsyncEXT(
    XrSession                                   session,
    const XrSpatialContextCreateInfoEXT*        createInfo,
    XrFutureEXT*                                future);

पैरामीटर की जानकारी

  • session एक XrSession है, जिसमें स्पेशल कॉन्टेक्स्ट चालू रहेगा.
  • createInfo, XrSpatialContextCreateInfoEXT है. इसका इस्तेमाल, स्पेशल कॉन्टेक्स्ट पैरामीटर तय करने के लिए किया जाता है.
  • future, XrFutureEXT का पॉइंटर है .

ऐप्लिकेशन, XrSpatialContextEXT हैंडल बना सकता है. इसके लिए, उसे:

  • XrSpatialContextCreateInfoEXT :: capabilityConfigs में XrSpatialCapabilityConfigurationBaseHeaderEXT से मिले स्ट्रक्चर उपलब्ध कराना, ताकि क्षमताओं को चालू किया जा सके और उन क्षमताओं के लिए कॉम्पोनेंट चालू किए जा सकें.
  • XrSpatialCapabilityFeatureEXT के कॉन्फ़िगरेशन स्ट्रक्चर के साथ, क्षमताओं को कॉन्फ़िगर करना.

अगर XrSpatialContextCreateInfoEXT ::capabilityConfigCount की वैल्यू 0 है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT दिखाना चाहिए. स्पेशल कॉन्टेक्स्ट हैंडल के लिए, कम से कम एक सुविधा ज़रूरी है.

अगर XrSpatialContextCreateInfoEXT :: capabilityConfigs कलेक्शन में मौजूद कोई भी क्षमता, xrEnumerateSpatialCapabilitiesEXT से नहीं मिलती है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना चाहिए .

अगर XrSpatialContextCreateInfoEXT :: capabilityConfigs में मौजूद कोई भी XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount 0 है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT दिखाना चाहिए. किसी सुविधा के लिए कॉम्पोनेंट टाइप की सूची के बिना, उस सुविधा का कॉन्फ़िगरेशन अधूरा होता है.

अगर XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents में मौजूद किसी कॉम्पोनेंट टाइप को xrEnumerateSpatialCapabilityComponentTypesEXT में XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability के लिए नहीं गिना जाता है, तो रनटाइम को XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT दिखाना चाहिए.

अगर XrSpatialContextCreateInfoEXT :: capabilityConfigs की अगली चेन में मौजूद कोई भी स्ट्रक्चर, किसी ऐसे XrSpatialCapabilityFeatureEXT से जुड़ा है जिसे xrEnumerateSpatialCapabilityFeaturesEXT में उस क्षमता के लिए नहीं गिना गया है, तो रनटाइम को उस XrSpatialCapabilityFeatureEXT स्ट्रक्चर को अनदेखा करना होगा.

अगर XrSpatialContextCreateInfoEXT :: capabilityConfigs में एक ही XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability वाले कई स्ट्रक्चर शामिल हैं, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT दिखाना चाहिए.

सिस्टम के संसाधनों का बेहतर तरीके से इस्तेमाल करने के लिए, रनटाइम XrSpatialContextCreateInfoEXT कलेक्शन में दिए गए कॉन्फ़िगरेशन का इस्तेमाल कर सकता है. इससे वह आने वाले समय में, स्पेशल रिक्वेस्ट के लिए खुद को तैयार कर सकता है. उदाहरण के लिए, प्लेन ट्रैकिंग की सुविधा के साथ काम करने वाला रनटाइम, अपनी प्लेन ट्रैकिंग पाइपलाइन को सिर्फ़ तब शुरू कर सकता है, जब ऐप्लिकेशन ने प्लेन ट्रैकिंग की सुविधा वाला स्पेशल कॉन्टेक्स्ट हैंडल बनाया हो. अगर कॉन्फ़िगर की गई सुविधाओं को वॉर्म-अप होने में ज़्यादा समय लगता है, तो xrCreateSpatialDiscoverySnapshotAsyncEXT को कॉल करने पर, स्नैपशॉट खाली हो सकता है. xrCreateSpatialDiscoverySnapshotAsyncEXT का इस्तेमाल करने से पहले, ऐप्लिकेशन XrEventDataSpatialDiscoveryRecommendedEXT के लिए इंतज़ार कर सकता है. इससे यह पक्का किया जा सकता है कि ट्रैकिंग की मुख्य सेवाएं चालू हो गई हैं.

अगर कोई रनटाइम, XrSpatialContextEXT के लिए कॉन्फ़िगर की जा रही स्पेशल सुविधाओं के ऐप्लिकेशन ऐक्सेस को कंट्रोल करने के लिए, अनुमति सिस्टम लागू करता है, तो रनटाइम को XR_ERROR_PERMISSION_INSUFFICIENT दिखाना चाहिए. ऐसा तब करना चाहिए, जब इस ऐप्लिकेशन को वे अनुमतियां न दी गई हों.

यह फ़ंक्शन, एसिंक्रोनस ऑपरेशन शुरू करता है और उससे जुड़ा XrFutureEXT बनाता है. इसका इस्तेमाल, xrPollFutureEXT और उससे जुड़े फ़ंक्शन के साथ किया जा सकता है. इस फ़ंक्शन की रिटर्न वैल्यू से सिर्फ़ यह पता चलता है कि एसिंक्रोनस ऑपरेशन को शेड्यूल करने के लिए, पैरामीटर स्वीकार किए जा सकते हैं या नहीं. इससे जुड़ा पूरा करने वाला फ़ंक्शन xrCreateSpatialContextCompleteEXT है. इसका इस्तेमाल तब किया जा सकता है, जब इस फ़ंक्शन से मिलने वाला फ़्यूचर, READY स्टेटस में हो. साथ ही, पूरा करने वाले स्ट्रक्चर XrCreateSpatialContextCompletionEXT में, उस फ़ंक्शन से आउटपुट पॉप्युलेट किए गए हों.

सही इस्तेमाल (इंप्लिसिट)

  • xrCreateSpatialContextAsyncEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • session एक मान्य XrSession हैंडल होना चाहिए
  • createInfo को किसी मान्य XrSpatialContextCreateInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • future को XrFutureEXT वैल्यू का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_TIME_INVALID (अगर XR_ANDROID_spatial_annotation_tracking चालू है)

XrSpatialContextCreateInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialContextCreateInfoEXT {
    XrStructureType                                                type;
    const void*                                                    next;
    uint32_t                                                       capabilityConfigCount;
    const XrSpatialCapabilityConfigurationBaseHeaderEXT* const*    capabilityConfigs;
} XrSpatialContextCreateInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • capabilityConfigCount एक uint32_t है, जो capabilityConfigs कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • capabilityConfigs, XrSpatialCapabilityConfigurationBaseHeaderEXT पॉइंटर के कलेक्शन का पॉइंटर है.

XrSpatialContextCreateInfoEXT स्ट्रक्चर, XrSpatialContextEXT हैंडल बनाने के लिए ज़रूरी जानकारी देता है.

सही इस्तेमाल (इंप्लिसिट)

XrSpatialCapabilityConfigurationBaseHeaderEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
    XrStructureType                     type;
    const void*                         next;
    XrSpatialCapabilityEXT              capability;
    uint32_t                            enabledComponentCount;
    const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;

इस स्ट्रक्चर का इस्तेमाल सीधे तौर पर एपीआई में नहीं किया जाता. इसके बजाय, इसके चाइल्ड स्ट्रक्चर का इस्तेमाल XrSpatialContextCreateInfoEXT के साथ किया जा सकता है, ताकि स्पेशल क्षमताओं को कॉन्फ़िगर किया जा सके.

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • capability एक XrSpatialCapabilityEXT है .
  • enabledComponentCount एक uint32_t है, जो enabledComponents कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • enabledComponents, XrSpatialComponentTypeEXT के कलेक्शन का पॉइंटर है.

अगर xrEnumerateSpatialCapabilitiesEXT ने capability को एन्यूमेरेटर नहीं किया है, तो रनटाइम को XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT दिखाना चाहिए. अगर enabledComponents में मौजूद किसी कॉम्पोनेंट टाइप को xrEnumerateSpatialCapabilityComponentTypesEXT में capability के लिए नहीं गिना गया है, तो रनटाइम को XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT दिखाना चाहिए .

सही इस्तेमाल (इंप्लिसिट)

xrCreateSpatialContextCompleteEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialContextCompleteEXT(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateSpatialContextCompletionEXT*        completion);

पैरामीटर की जानकारी

xrCreateSpatialContextCompleteEXT, xrCreateSpatialContextAsyncEXT से शुरू किए गए एसिंक्रोनस ऑपरेशन को पूरा करता है. अगर future तैयार नहीं है, तो रनटाइम को XR_ERROR_FUTURE_PENDING_EXT दिखाना चाहिए. अगर future पहले ही पूरा हो चुका है या रद्द कर दिया गया है, तो रनटाइम को XR_ERROR_FUTURE_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrCreateSpatialContextCompleteEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • session एक मान्य XrSession हैंडल होना चाहिए
  • completion को XrCreateSpatialContextCompletionEXT स्ट्रक्चर का पॉइंटर होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrCreateSpatialContextCompletionEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrCreateSpatialContextCompletionEXT {
    XrStructureType        type;
    void*                  next;
    XrResult               futureResult;
    XrSpatialContextEXT    spatialContext;
} XrCreateSpatialContextCompletionEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • futureResult, स्पेस के हिसाब से कॉन्टेक्स्ट बनाने की प्रोसेस का XrResult है.
  • spatialContext एक XrSpatialContextEXT है. इसे xrCreateSpatialContextAsyncEXT :: createInfo में मौजूद डेटा और कॉन्फ़िगरेशन का इस्तेमाल करके बनाया गया है.

आने वाले समय में मिलने वाले रिटर्न कोड

futureResult वैल्यू:

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT

अगर futureResult एक सक्सेस कोड है, तो spatialContext का मान्य होना ज़रूरी है. अगर spatialContext मान्य है, तो यह सिर्फ़ xrCreateSpatialContextAsyncEXT :: session की लाइफ़साइकल के दौरान मान्य रहता है या जब तक ऐप्लिकेशन xrDestroySpatialContextEXT के साथ spatialContext को खत्म नहीं कर देता, इनमें से जो भी पहले हो.

सही इस्तेमाल (इंप्लिसिट)

स्पेशल कॉन्टेक्स्ट को मिटाना

xrDestroySpatialContextEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

पैरामीटर की जानकारी

स्पेशल एंटिटी को खोजने और अपडेट करने के टास्क पूरे होने के बाद, ऐप्लिकेशन xrDestroySpatialContextEXT फ़ंक्शन को कॉल कर सकता है. इससे spatialContext हैंडल और उससे जुड़े संसाधनों को रिलीज़ किया जा सकता है. अगर कोई दूसरा मान्य XrSpatialContextEXT मौजूद नहीं है, जिसे spatialContext जैसी ही स्पेशल कैपेबिलिटी के साथ बनाया गया हो, तो यह कॉल रनटाइम को एक सुझाव देता है. इसमें, उन कैपेबिलिटी के लिए ज़रूरी ट्रैकिंग सेवाओं को बंद करने का सुझाव दिया जाता है ताकि सिस्टम के संसाधनों को बचाया जा सके.

सही इस्तेमाल (इंप्लिसिट)

  • xrDestroySpatialContextEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • spatialContext एक मान्य XrSpatialContextEXT हैंडल होना चाहिए

Thread की सुरक्षा

  • spatialContext और किसी भी चाइल्ड हैंडल का ऐक्सेस, बाहरी तौर पर सिंक किया जाना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

स्पेशल एंटिटी के प्रज़ेंटेशन

स्पेशल इकाई का आईडी

XR_DEFINE_ATOM(XrSpatialEntityIdEXT)

XrSpatialEntityIdEXT का इस्तेमाल, उपयोगकर्ता के आस-पास के स्पेस में रनटाइम के दौरान खोजी गई किसी भी तरह की इकाई को दिखाने के लिए किया जाता है. XrSpatialEntityIdEXT, उस XrSpatialContextEXT के लिए मान्य होता है जिसमें इसे खोजा गया है. साथ ही, रनटाइम को एक ही XrSpatialContextEXT में मौजूद अलग-अलग इकाइयों के लिए, एक ही XrSpatialEntityIdEXT का दोबारा इस्तेमाल नहीं करना चाहिए. साथ ही, रनटाइम को एक ही XrSession में मौजूद कई XrSpatialContextEXT में, एक ही XrSpatialEntityIdEXT का फिर से इस्तेमाल नहीं करना चाहिए. भले ही, वह एक ही इकाई को दिखाता हो या अलग-अलग इकाइयों को.

#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0

XR_NULL_SPATIAL_ENTITY_ID_EXT एक रिज़र्व वैल्यू है, जो अमान्य XrSpatialEntityIdEXT को दिखाती है. इसे एपीआई फ़ंक्शन को सिर्फ़ तब पास किया जा सकता है और उनसे वापस लिया जा सकता है, जब इसकी खास तौर पर अनुमति दी गई हो.

स्पेशल एंटिटी हैंडल

XR_DEFINE_HANDLE(XrSpatialEntityEXT)

XrSpatialEntityEXT हैंडल, एक स्पेशल एंटिटी को दिखाता है. कोई ऐप्लिकेशन ऐसा हैंडल बना सकता है, ताकि वह रनटाइम को किसी खास इकाई में अपनी दिलचस्पी के बारे में बता सके.

आईडी से Spatial Entity Handle बनाना

xrCreateSpatialEntityFromIdEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT*   createInfo,
    XrSpatialEntityEXT*                         spatialEntity);

पैरामीटर की जानकारी

ऐप्लिकेशन, XrSpatialEntityEXT हैंडल बनाने के लिए, xrCreateSpatialEntityFromIdEXT का इस्तेमाल कर सकता है. यह हैंडल, उपयोगकर्ता के एनवायरमेंट में मौजूद किसी इकाई का रेफ़रंस होता है.

अगर XrSpatialEntityFromIdCreateInfoEXT :: entityId, spatialContext के लिए मान्य आईडी नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrCreateSpatialEntityFromIdEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • spatialContext एक मान्य XrSpatialContextEXT हैंडल होना चाहिए
  • createInfo को किसी मान्य XrSpatialEntityFromIdCreateInfoEXT स्ट्रक्चर का पॉइंटर होना ज़रूरी है
  • spatialEntity को XrSpatialEntityEXT हैंडल का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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_ENTITY_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialEntityFromIdCreateInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialEntityFromIdCreateInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialEntityIdEXT    entityId;
} XrSpatialEntityFromIdCreateInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • entityId, उस इकाई का XrSpatialEntityIdEXT है जिसके लिए ऐप्लिकेशन को हैंडल बनाना है.

सही इस्तेमाल (इंप्लिसिट)

स्पेशल एंटिटी हैंडल को मिटाएं

xrDestroySpatialEntityEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

पैरामीटर की जानकारी

जब ऐप्लिकेशन को इस हैंडल से रेफ़र की गई इकाई में दिलचस्पी नहीं रह जाती, तब वह spatialEntity हैंडल को रिलीज़ करने के लिए, xrDestroySpatialEntityEXT का इस्तेमाल कर सकता है.

सही इस्तेमाल (इंप्लिसिट)

  • xrDestroySpatialEntityEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • spatialEntity एक मान्य XrSpatialEntityEXT हैंडल होना चाहिए

Thread की सुरक्षा

  • spatialEntity और किसी भी चाइल्ड हैंडल का ऐक्सेस, बाहरी तौर पर सिंक किया जाना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

स्पेशल स्नैपशॉट

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

ऐप्लिकेशन, स्पेस से जुड़ी इकाइयों को खोजने या उनके बारे में जानकारी अपडेट करने के लिए, स्पेस से जुड़े स्नैपशॉट बना सकता है. XrSpatialSnapshotEXT हैंडल, खोजी गई या अपडेट की गई स्पेशल इकाइयों के लिए, ऐसे डेटा को दिखाता है जिसमें बदलाव नहीं किया जा सकता. साथ ही, यह उन इकाइयों के कॉम्पोनेंट के सबसेट को दिखाता है जिन्हें ऐप्लिकेशन ने चुना है. स्पेशल स्नैपशॉट, इकाइयों और उनके कॉम्पोनेंट डेटा का एक जैसा व्यू दिखाता है. स्नैपशॉट बनाने के बाद, स्नैपशॉट का डेटा तब तक नहीं बदलना चाहिए, जब तक स्नैपशॉट मान्य है.

ऐप्लिकेशन जितने चाहे उतने स्नैपशॉट बना सकता है. हालांकि, उसे हर नए स्नैपशॉट के लिए तय की गई मेमोरी का ध्यान रखना होगा. साथ ही, ज़रूरत न होने पर स्नैपशॉट को मिटाना होगा.

डिस्कवरी स्नैपशॉट बनाना

xrCreateSpatialDiscoverySnapshotAsyncEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT*                                future);

पैरामीटर की जानकारी

ऐप्लिकेशन, xrCreateSpatialDiscoverySnapshotAsyncEXT का इस्तेमाल करके, डिस्कवरी स्नैपशॉट बनाकर, स्पेशल इकाइयों को खोज सकता है.

यह फ़ंक्शन, एसिंक्रोनस ऑपरेशन शुरू करता है और उससे जुड़ा XrFutureEXT बनाता है. इसका इस्तेमाल, xrPollFutureEXT और उससे जुड़े फ़ंक्शन के साथ किया जा सकता है. इस फ़ंक्शन की रिटर्न वैल्यू से सिर्फ़ यह पता चलता है कि एसिंक्रोनस ऑपरेशन को शेड्यूल करने के लिए, पैरामीटर स्वीकार किए जा सकते हैं या नहीं. इसके लिए, xrCreateSpatialDiscoverySnapshotCompleteEXT फ़ंक्शन का इस्तेमाल किया जाता है. इसका इस्तेमाल तब किया जा सकता है, जब इस फ़ंक्शन से मिलने वाला फ़्यूचर, READY स्टेटस में हो. साथ ही, इस फ़ंक्शन से मिलने वाले आउटपुट, XrCreateSpatialDiscoverySnapshotCompletionEXT स्ट्रक्चर में मौजूद हों.

ऐप्लिकेशन, डिस्कवरी स्नैपशॉट बनाने के लिए कई अनुरोध सबमिट कर सकता है. इसके लिए, उसे पिछले अनुरोध के पूरा होने का इंतज़ार करने की ज़रूरत नहीं है. रनटाइम, स्नैपशॉट बनाने की प्रोसेस को किसी भी क्रम में शुरू और पूरा कर सकता है. डिवाइस की पावर, थर्मल या अन्य नीतियों की वजह से, अगर सिस्टम के संसाधनों का इस्तेमाल कम करना ज़रूरी हो, तो ऐप्लिकेशन को थ्रॉटल करने के लिए, रनटाइम डिस्कवरी स्नैपशॉट बनाने की प्रोसेस को पूरा होने में देरी कर सकता है.

ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes का इस्तेमाल कर सकता है. इससे उन इकाइयों और कॉम्पोनेंट की सूची को फ़िल्टर किया जा सकता है जिनका डेटा रनटाइम को स्नैपशॉट में शामिल करना चाहिए. अगर ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes में स्पेशल कॉम्पोनेंट टाइप की मान्य सूची उपलब्ध कराता है, तो रनटाइम को स्नैपशॉट में सिर्फ़ ऐसी स्पेशल इकाइयां शामिल करनी चाहिए जिनमें XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes में दिए गए कॉम्पोनेंट में से कम से कम एक कॉम्पोनेंट मौजूद हो. साथ ही, रनटाइम में स्नैपशॉट के सिर्फ़ उन कॉम्पोनेंट का डेटा शामिल होना चाहिए जो स्नैपशॉट में मौजूद हैं.

अगर spatialContext बनाते समय, XrSpatialContextCreateInfoEXT :: capabilityConfigs को पास की गई स्पेशल सुविधाओं के लिए, XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes में मौजूद कोई भी XrSpatialComponentTypeEXT चालू नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT दिखाना चाहिए.

अगर ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes में स्पेसियल कॉम्पोनेंट टाइप की सूची नहीं देता है, तो रनटाइम को स्नैपशॉट में उन सभी स्पेसियल इकाइयों को शामिल करना होगा जिनमें कॉम्पोनेंट का सेट मौजूद है. इन कॉम्पोनेंट को spatialContext के लिए कॉन्फ़िगर की गई क्षमताओं के लिए, XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents में शामिल किया गया है. रनटाइम में, spatialContext के लिए कॉन्फ़िगर की गई सुविधाओं के सभी चालू कॉम्पोनेंट का डेटा शामिल होना चाहिए.

अगर future के पूरा होने से पहले XrEventDataReferenceSpaceChangePending को सूची में शामिल किया जाता है और XrEventDataReferenceSpaceChangePending :: poseValid गलत है, तो रनटाइम शायद ऐसा XrSpatialSnapshotEXT बनाए जिसमें कोई एंटिटी न हो या उन एंटिटी के लिए XrSpatialEntityTrackingStateEXT को सेट करे जिन्हें XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace में XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time पर XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT या XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT पर नहीं ढूंढा जा सकता. रनटाइम को XrEventDataReferenceSpaceChangePending की वजह से, XrCreateSpatialContextCompletionEXT :: futureResult को गड़बड़ी के कोड पर सेट नहीं करना चाहिए .

सही इस्तेमाल (इंप्लिसिट)

  • xrCreateSpatialDiscoverySnapshotAsyncEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • spatialContext एक मान्य XrSpatialContextEXT हैंडल होना चाहिए
  • createInfo को किसी मान्य XrSpatialDiscoverySnapshotCreateInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • future को XrFutureEXT वैल्यू का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialDiscoverySnapshotCreateInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • componentTypeCount एक uint32_t है, जो componentTypes कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • componentTypes, XrSpatialComponentTypeEXT का कलेक्शन है.

XrSpatialDiscoverySnapshotCreateInfoEXT स्ट्रक्चर, स्पेशल एंटिटी को खोजते समय XrSpatialSnapshotEXT हैंडल बनाने की जानकारी देता है.

सही इस्तेमाल (इंप्लिसिट)

xrCreateSpatialDiscoverySnapshotCompleteEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);

पैरामीटर की जानकारी

xrCreateSpatialDiscoverySnapshotCompleteEXT, xrCreateSpatialDiscoverySnapshotAsyncEXT से शुरू किए गए एसिंक्रोनस ऑपरेशन को पूरा करता है. अगर XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future तैयार नहीं है, तो रनटाइम को XR_ERROR_FUTURE_PENDING_EXT दिखाना चाहिए. अगर XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future पहले ही पूरा हो चुका है या रद्द हो चुका है, तो रनटाइम को XR_ERROR_FUTURE_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrCreateSpatialDiscoverySnapshotCompletionInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
    XrStructureType    type;
    const void*        next;
    XrSpace            baseSpace;
    XrTime             time;
    XrFutureEXT        future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • baseSpace, XrSpace है. इसमें, खोजे गए XrSpatialSnapshotEXT की सभी जगहें मौजूद होंगी.
  • time वह XrTime है जिस पर खोजे गए XrSpatialSnapshotEXT की सभी जगहें मौजूद होंगी.
  • future, xrCreateSpatialDiscoverySnapshotAsyncEXT से मिला XrFutureEXT है

बनाए गए स्नैपशॉट में शामिल अलग-अलग कॉम्पोनेंट डेटा की जगहों को baseSpace में दिखाया जाएगा. यह time पर मौजूद है.

सही इस्तेमाल (इंप्लिसिट)

XrCreateSpatialDiscoverySnapshotCompletionEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
    XrStructureType         type;
    void*                   next;
    XrResult                futureResult;
    XrSpatialSnapshotEXT    snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • futureResult, स्पेसियल डिस्कवरी स्नैपशॉट बनाने की प्रोसेस का XrResult है.
  • snapshot एक XrSpatialSnapshotEXT है. इसका इस्तेमाल, खोजी गई स्पेशल इकाइयों के कॉम्पोनेंट डेटा के बारे में क्वेरी करने के लिए किया जा सकता है.

आने वाले समय में मिलने वाले रिटर्न कोड

futureResult वैल्यू:

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

सही इस्तेमाल (इंप्लिसिट)

डिस्कवरी के सुझाव वाला इवेंट

XrEventDataSpatialDiscoveryRecommendedEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
    XrStructureType        type;
    const void*            next;
    XrSpatialContextEXT    spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • spatialContext, XrSpatialContextEXT है. इसके लिए, रनटाइम के दौरान खोज करने का सुझाव दिया जाता है.

ऐप्लिकेशन, xrPollEvent का इस्तेमाल करके इस इवेंट को वापस पा सकता है . ऐप्लिकेशन, इस इवेंट का इंतज़ार करके, स्पेशल इकाइयों को खोजने के लिए xrCreateSpatialDiscoverySnapshotAsyncEXT को बार-बार कॉल करने से बच सकता है. अगर ऐप्लिकेशन, दो XrEventDataSpatialDiscoveryRecommendedEXT इवेंट के बीच एक ही XrSpatialDiscoverySnapshotCreateInfoEXT के साथ कई डिस्कवरी स्नैपशॉट बनाता है, तो हो सकता है कि नतीजे के तौर पर मिलने वाले स्नैपशॉट में एक जैसी इकाइयां शामिल हों. इसलिए, स्नैपशॉट बनाना और डेटा क्वेरी करना बेकार होगा.

इस इवेंट के होने का इंतज़ार करने से, ऐप्लिकेशन सिस्टम पर डिस्कवरी के अनुरोधों का ज़्यादा लोड नहीं डालता. ऐसा इसलिए, क्योंकि हो सकता है कि रनटाइम कोई नया डेटा न दिखाए. साथ ही, इससे सिस्टम के संसाधनों का ज़रूरत से ज़्यादा इस्तेमाल होने का जोखिम कम हो जाता है. इसके अलावा, डिवाइस की पावर या थर्मल नीतियों की वजह से, सिस्टम की परफ़ॉर्मेंस कम होने का जोखिम भी कम हो जाता है. इससे, लाइव ट्रैकिंग की मदद से रीयल टाइम में स्पेशल इकाइयों का पता लगाने वाले रनटाइम और पहले से रिकॉर्ड की गई स्थिति के आधार पर स्पेशल इकाइयां उपलब्ध कराने वाले रनटाइम के बीच समानता बनाने में भी मदद मिलती है. पहले से रिकॉर्ड की गई स्थिति के आधार पर स्पेशल इकाइयां उपलब्ध कराने वाले रनटाइम में, हर XrSpatialContextEXT के लिए, स्पेशल इकाइयों का पता लगाने के सुझाव वाले इवेंट को सिर्फ़ एक बार सूची में शामिल किया जा सकता है.

रनटाइम को इस इवेंट को सूची में नहीं रखना चाहिए, ताकि ऐप्लिकेशन को मौजूदा स्पेशल इकाइयों के कॉम्पोनेंट डेटा में किए गए बदलावों या अडजस्टमेंट के बारे में सूचना दी जा सके. ऐप्लिकेशन, xrCreateSpatialUpdateSnapshotEXT का इस्तेमाल कर सकता है, ताकि वह अपनी पसंद की स्पेशल इकाइयों के लिए, कॉम्पोनेंट डेटा के अपडेट को ट्रैक कर सके.

रनटाइम, xrCreateSpatialDiscoverySnapshotAsyncEXT को कॉल करने के लिए ऐप्लिकेशन का इंतज़ार किए बिना, डिस्कवरी के सुझाव वाले इवेंट को सूची में डाल सकता है. उदाहरण के लिए, रनटाइम XrSpatialContextEXT के कॉन्फ़िगरेशन के आधार पर, डिस्कवरी के सुझाव वाले इवेंट को सूची में शामिल करने का फ़ैसला ले सकता है. इसके अलावा, वह उपयोगकर्ता के आस-पास के माहौल (नई इकाइयों की खोज या मौजूदा इकाइयों के खो जाने) के बारे में अपनी समझ के आधार पर या ऐप्लिकेशन को डिस्कवरी के अनुरोध की सही दर का संकेत देने के लिए भी ऐसा कर सकता है, ताकि सिस्टम के संसाधनों पर ज़्यादा लोड न पड़े. अगर XrSpatialContextEXT के पूरे लाइफ़टाइम के दौरान, उपयोगकर्ता के एनवायरमेंट में कोई इकाई नहीं मिलती है, तो रनटाइम शायद इस इवेंट को XrSpatialContextEXT के लिए कभी भी सूची में न रखे.

रनटाइम को किसी spatialContext के लिए, इस इवेंट को तब तक सूची में नहीं डालना चाहिए, जब तक ऐप्लिकेशन xrCreateSpatialContextCompleteEXT का इस्तेमाल करके, इसे बनाने की प्रोसेस पूरी नहीं कर लेता.

ऐप्लिकेशन के xrDestroySpatialContextEXT को कॉल करने के बाद, रनटाइम को उस स्पेशल कॉन्टेक्स्ट के लिए, खोज के सुझाव वाले किसी भी इवेंट को सूची में नहीं रखना चाहिए. साथ ही, xrPollEvent से उस कॉन्टेक्स्ट के लिए ऐसा कोई इवेंट नहीं दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

क्वेरी कॉम्पोनेंट का डेटा

xrQuerySpatialComponentDataEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT*       queryResult);

पैरामीटर की जानकारी

ऐप्लिकेशन, स्नैपशॉट में मौजूद इकाइयों के कॉम्पोनेंट डेटा के बारे में क्वेरी करने के लिए, xrQuerySpatialComponentDataEXT का इस्तेमाल कर सकता है. इसके लिए, उसे XrSpatialComponentDataQueryConditionEXT :: componentTypes में मौजूद हर XrSpatialComponentTypeEXT के हिसाब से, XrSpatialComponentDataQueryResultEXT :: next में सूची का स्ट्रक्चर अटैच करना होगा.

अगर ऐप्लिकेशन, XrSpatialComponentDataQueryResultEXT :: next में ऐसी सूची का स्ट्रक्चर अटैच करता है जो XrSpatialComponentDataQueryConditionEXT :: componentTypes में मौजूद किसी भी कॉम्पोनेंट से मैच नहीं करता, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए .

ऐप्लिकेशन, XrSpatialComponentDataQueryConditionEXT :: componentTypes में मौजूद कॉम्पोनेंट के सिर्फ़ सबसेट से जुड़ी सूची के स्ट्रक्चर को अटैच करने का विकल्प चुन सकता है. अगर ऐप्लिकेशन को सिर्फ़ उन स्पेशल इकाइयों के आईडी और ट्रैकिंग की स्थिति जाननी है जो queryCondition को पूरा करती हैं, तो वह सूची के स्ट्रक्चर को पूरी तरह से हटाने का विकल्प चुन सकता है. रनटाइम को XrSpatialComponentDataQueryResultEXT :: next चेन में सूची के स्ट्रक्चर की अनुपस्थिति को गड़बड़ी के तौर पर नहीं मानना चाहिए.

अगर XrEventDataReferenceSpaceChangePending को सूची में रखा गया है और XrEventDataReferenceSpaceChangePending :: changeTime बीत चुका है, तो ऐप्लिकेशन XrSpatialSnapshotEXT से कॉम्पोनेंट डेटा के बारे में क्वेरी करता है. इसके बाद, ऐप्लिकेशन शायद इवेंट डेटा का इस्तेमाल करके, पोज़ को अडजस्ट कर सकता है.

रनटाइम को XrSpatialComponentDataQueryResultEXT :: entityIds को सिर्फ़ उन इकाइयों से भरना चाहिए जिनमें XrSpatialComponentDataQueryConditionEXT :: componentTypes में बताए गए सभी कॉम्पोनेंट मौजूद हों. अगर XrSpatialComponentDataQueryConditionEXT :: componentTypeCount की वैल्यू 0 है, तो रनटाइम को स्नैपशॉट में मौजूद सभी इकाइयों (और उनकी ट्रैकिंग स्थितियों) के साथ queryResult को पॉप्युलेट करना चाहिए. अगर XrSpatialComponentDataQueryConditionEXT :: next में क्वेरी की अन्य शर्तें जोड़ी जाती हैं, तो रनटाइम को उन्हें कॉम्पोनेंट टाइप की उपलब्धता के साथ "AND" के तौर पर मानना चाहिए. इसका मतलब है कि रनटाइम को XrSpatialComponentDataQueryResultEXT ::entityIds को सिर्फ़ उन इकाइयों के साथ पॉप्युलेट करना चाहिए जो सभी शर्तों को पूरा करती हैं. रनटाइम को सूची के स्ट्रक्चर में कॉम्पोनेंट डेटा को उसी क्रम में भरना चाहिए जिस क्रम में XrSpatialComponentDataQueryResultEXT :: entityIds में इकाइयां मौजूद हैं. इसका मतलब है कि सूची के स्ट्रक्चर कलेक्शन में दिए गए इंडेक्स पर मौजूद कॉम्पोनेंट डेटा, उसी इंडेक्स पर मौजूद इकाई से मेल खाना चाहिए.

अगर किसी इकाई के लिए ट्रैकिंग की स्थिति XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT नहीं है, तो रनटाइम को XrSpatialComponentDataQueryResultEXT से अटैच की गई सूची के स्ट्रक्चर में मौजूद कलेक्शन में, उस इकाई से जुड़े इंडेक्स पर मौजूद डेटा को नहीं बदलना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

उदाहरण के लिए, ऐप्लिकेशन एक XrSpatialSnapshotEXT बनाता है, जिसमें पांच इकाइयां होती हैं. इनमें -

  • इकाई 1 और 2 में कॉम्पोनेंट XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT और XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT हैं
  • इकाई 3 और 4 में कॉम्पोनेंट XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT और XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT हैं
  • इकाई 5 में XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT और XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT कॉम्पोनेंट हैं.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

3

3

4

4

5

5

Bounded2D

Bounded2D

हां

हां

हां

हां

नहीं

नहीं

नहीं

नहीं

हां

हां

अभिभावक

अभिभावक

हां

हां

हां

हां

नहीं

नहीं

नहीं

नहीं

नहीं

नहीं

Mesh3D

Mesh3D

नहीं

नहीं

नहीं

नहीं

हां

हां

हां

हां

हां

हां

Bounded3D

Bounded3D

नहीं

नहीं

नहीं

नहीं

हां

हां

हां

हां

नहीं

नहीं टेक्स्ट, SVG फ़ॉर्मैट में नहीं है - इसे नहीं दिखाया जा सकता

इमेज 20. स्नैपशॉट का उदाहरण

क्वेरी की शर्त में XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT के साथ ऊपर दिए गए स्नैपशॉट पर xrQuerySpatialComponentDataEXT का इस्तेमाल करने पर, ऐप्लिकेशन को इकाई #1, #2, और #5 मिलेगी. साथ ही, ऐप्लिकेशन, bounded2D डेटा पाने के लिए, XrSpatialComponentDataQueryResultEXT की अगली चेन में XrSpatialComponentBounded2DListEXT स्ट्रक्चर के हिस्से के तौर पर, XrSpatialBounded2DDataEXT का कलेक्शन अटैच कर सकता है.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

5

5

Bounded2D

Bounded2D

entityId #1 के लिए डेटा

एंटिटी के लिए डेटा...

entityId #2 के लिए डेटा

एंटिटी के लिए डेटा...

entityId #5 के लिए डेटा

एंटिटी के लिए डेटा...

entityIds

entityIds

अगली

अगली

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Dat...

बाउंड्री

बाउंड्री

XrSpatialComponent
Bounded2DListEXT

XrSpatialComponent
Bou... टेक्स्ट, एसवीजी फ़ॉर्मैट में नहीं है - इसे नहीं दिखाया जा सकता

इमेज 21. क्वेरी के नतीजे का उदाहरण

क्वेरी की शर्त में दिए गए XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT और XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT कॉम्पोनेंट के साथ ऊपर दिए गए स्नैपशॉट पर xrQuerySpatialComponentDataEXT का इस्तेमाल करने पर, ऐप्लिकेशन को इकाई #3 और #4 वापस मिलेंगी. साथ ही, ऐप्लिकेशन कॉम्पोनेंट का डेटा पाने के लिए, XrSpatialComponentDataQueryResultEXT की अगली चेन में, XrSpatialComponentBounded3DListEXT और XrSpatialComponentMesh3DListEXT स्ट्रक्चर के हिस्से के तौर पर, XrBoxf और XrSpatialMeshDataEXT के कलेक्शन को अटैच कर सकता है.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

3

3

4

4

Bounded3D

Bounded3D

entityId #3 का डेटा

एंटिटी के लिए डेटा...

entityId #4 का डेटा

एंटिटी का डेटा...

Mesh3D

Mesh3D

entityId #3 के लिए डेटा

एंटिटी के लिए डेटा...

entityId #4 का डेटा

एंटिटी का डेटा...

entityIds

entityIds

अगली

अगली

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Da...

बाउंड्री

बाउंड्री

अगली

अगली

XrSpatialComponent
Bounded3DListEXT

XrSpatialComponent
Bo...

XrSpatialComponent
Mesh3DListEXT

XrSpatialComponent
Me...

मेश

meshes Text is not SVG - cannot display

इमेज 22. क्वेरी के नतीजे का उदाहरण

XrSpatialComponentDataQueryConditionEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentDataQueryConditionEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialComponentDataQueryConditionEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • componentTypeCount एक uint32_t है, जो componentTypes कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • componentTypes, XrSpatialComponentTypeEXT का एक कलेक्शन है. इसके लिए, स्नैपशॉट से डेटा लिया जाता है.

सही इस्तेमाल (इंप्लिसिट)

XrSpatialComponentDataQueryResultEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentDataQueryResultEXT {
    XrStructureType                     type;
    void*                               next;
    uint32_t                            entityIdCapacityInput;
    uint32_t                            entityIdCountOutput;
    XrSpatialEntityIdEXT*               entityIds;
    uint32_t                            entityStateCapacityInput;
    uint32_t                            entityStateCountOutput;
    XrSpatialEntityTrackingStateEXT*    entityStates;
} XrSpatialComponentDataQueryResultEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • entityIdCapacityInput, entityIds कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • entityIdCountOutput, entityIds में XrSpatialEntityIdEXT की संख्या है या entityIdCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • entityIds, XrSpatialEntityIdEXT का एक कलेक्शन है. अगर entityIdCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • entityStateCapacityInput, entityStates कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • entityStateCountOutput, entityStates में XrSpatialEntityTrackingStateEXT की संख्या है. इसके अलावा, entityStateCapacityInput के कम होने पर, यह ज़रूरी क्षमता है. यह हमेशा entityIdCountOutput के जैसा ही होना चाहिए .
  • entityStates, XrSpatialEntityTrackingStateEXT का एक कलेक्शन है. अगर entityStateCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी entityIds साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

कोई ऐप्लिकेशन xrCreateSpatialEntityFromIdEXT के साथ entityIds का इस्तेमाल कर सकता है, ताकि वह उन इकाइयों के लिए XrSpatialEntityEXT हैंडल बना सके जिनके लिए उसे नियमित तौर पर अपडेट चाहिए. इसके बाद, ऐप्लिकेशन इन XrSpatialEntityEXT हैंडल का इस्तेमाल xrCreateSpatialUpdateSnapshotEXT के साथ कर सकता है. इससे अपडेट स्नैपशॉट बनाया जा सकता है. इसमें, दी गई इकाइयों के कॉम्पोनेंट का रनटाइम का सबसे नया डेटा होता है.

सही इस्तेमाल (इंप्लिसिट)

typedef enum XrSpatialEntityTrackingStateEXT {
    XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
    XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
    XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
    XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;

XrSpatialEntityTrackingStateEXT, स्पेसियल एंटिटी ट्रैकिंग की संभावित स्थितियों की गिनती करता है:

इन enum का मतलब यह है:

Enum की जानकारी

XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT

रनटाइम ने इस इकाई को ट्रैक करना बंद कर दिया है और इसे फिर से ट्रैक नहीं किया जाएगा.

XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT

रनटाइम ने इस इकाई को ट्रैक करना रोक दिया है. हालांकि, आने वाले समय में इसे ट्रैक करना फिर से शुरू किया जा सकता है.

XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT

फ़िलहाल, रनटाइम इस इकाई को ट्रैक कर रहा है और इसके कॉम्पोनेंट का डेटा मान्य है.

ट्रैकिंग

रोका गया

बंद किया गया

इमेज 23. XrSpatialEntityTrackingStateEXT

  • अगर रनटाइम, स्पेशल एंटिटी की ट्रैकिंग को निलंबित कर देता है, लेकिन आने वाले समय में उसे फिर से शुरू करने की संभावना है, तो वह स्पेशल एंटिटी की स्थिति को XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT से XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT में बदल सकता है. रनटाइम ऐसा कब कर सकता है, इसके कुछ उदाहरण यहां दिए गए हैं. हालांकि, इनके अलावा और भी उदाहरण हो सकते हैं. जैसे, अगर ऐप्लिकेशन का इनपुट फ़ोकस हट जाता है; या अगर दी गई स्पेसियल इकाई, उपयोगकर्ता से इतनी दूर है कि उसे सटीक तरीके से ट्रैक नहीं किया जा सकता; या अगर बहुत सारी इकाइयों को ट्रैक किया जा रहा है और रनटाइम, ट्रैकिंग की लागत को कम करना चाहता है. XrSpatialEntityTrackingStateEXT, ऐप्लिकेशन को हर रनटाइम की अलग-अलग ट्रैकिंग नीतियों से सुरक्षित रखने में मदद करता है.
  • रनटाइम, किसी इकाई की स्थिति को XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT से XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT या XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT में बदल सकता है.
  • अगर स्पेशल एंटिटी खो जाती है और उसकी ट्रैकिंग कभी वापस नहीं पाई जा सकती या फिर से शुरू नहीं की जा सकती, तो रनटाइम को स्पेशल एंटिटी की स्थिति को XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT या XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT से बदलकर XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT करना चाहिए. इसका एक उदाहरण यह हो सकता है कि डिवाइस, ट्रैकिंग सेशन को रीस्टार्ट करता है, लेकिन अपने आस-पास की जगह को फिर से ट्रैक नहीं कर पाता. इसलिए, इस ट्रैकिंग सेशन में खोजी गई इकाइयों को नई इकाइयों के तौर पर मानता है.
  • किसी इकाई की ट्रैकिंग स्थिति को XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT पर सेट करने के बाद, रनटाइम को इसे किसी दूसरी स्थिति में नहीं बदलना चाहिए.
  • xrQuerySpatialComponentDataEXT का इस्तेमाल करके, किसी स्पेशल एंटिटी के कॉम्पोनेंट डेटा के बारे में क्वेरी करते समय, रनटाइम को XrSpatialComponentDataQueryResultEXT की अगली चेन में, ऐप्लिकेशन से उपलब्ध कराए गए बफ़र के कॉन्टेंट में मान्य डेटा सेट करना चाहिए. ऐसा तब करना चाहिए, जब एंटिटी की स्थिति XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT हो. अगर इकाई की स्थिति XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT या XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT है, तो रनटाइम को बफ़र के कॉन्टेंट में बदलाव नहीं करना चाहिए.

कॉम्पोनेंट डेटा के लिए टू-कॉल इडियम

XrSpatialBufferEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialBufferEXT {
    XrSpatialBufferIdEXT      bufferId;
    XrSpatialBufferTypeEXT    bufferType;
} XrSpatialBufferEXT;

सदस्यों की जानकारी

  • bufferId बफ़र डेटा का XrSpatialBufferIdEXT.
  • bufferType, XrSpatialBufferTypeEXT है. इससे bufferId में मौजूद डेटा के टाइप का पता चलता है. ऐप्लिकेशन bufferType का इस्तेमाल कर सकता है, ताकि यह तय किया जा सके कि बफ़र का असल डेटा पाने के लिए किस फ़ंक्शन का इस्तेमाल करना है.

कुछ स्पेशल कॉम्पोनेंट में अलग-अलग साइज़ का डेटा होता है. इसलिए, उनका डेटा पाने के लिए, टू-कॉल इडियम का इस्तेमाल करना ज़रूरी है. ऐसे मामलों में, स्पेशल कॉम्पोनेंट का डेटा स्ट्रक्चर, उस कॉम्पोनेंट के डेटा में ज़रूरी हर वैरिएबल साइज़ के बफ़र के लिए, XrSpatialBufferEXT उपलब्ध कराता है.

एक ही bufferId के लिए, रनटाइम को एक कॉम्पोनेंट डेटा क्वेरी से दूसरी कॉम्पोनेंट डेटा क्वेरी में एक जैसा डेटा देना चाहिए. भले ही, वह एक स्नैपशॉट से दूसरे स्नैपशॉट में हो. कॉम्पोनेंट डेटा क्वेरी कॉल के बीच अलग-अलग bufferId से, ऐप्लिकेशन को पता चलता है कि उस कॉम्पोनेंट का डेटा बदल सकता है.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialBufferEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • bufferType की वैल्यू, XrSpatialBufferTypeEXT की मान्य वैल्यू होनी चाहिए

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

XrSpatialBufferIdEXT का इस्तेमाल, किसी स्पेशल कॉम्पोनेंट के लिए अलग-अलग साइज़ के डेटा को दिखाने के लिए किया जाता है.

रनटाइम को XrSpatialBufferIdEXT और उसके डेटा को मेमोरी में कम से कम तब तक सेव रखना चाहिए, जब तक कि उसे शामिल करने वाले XrSpatialSnapshotEXT की लाइफ़साइकल खत्म नहीं हो जाती. रनटाइम, XrSpatialBufferIdEXT और उसके डेटा को XrSpatialSnapshotEXT के लाइफ़साइकल से ज़्यादा समय तक मेमोरी में सेव रख सकता है. ऐसा इसलिए किया जाता है, ताकि ऐप्लिकेशन से बाद में बनाए गए स्नैपशॉट के हिस्से के तौर पर, वही आईडी दिखाया जा सके. एक ही XrSpatialBufferIdEXT के लिए, रनटाइम को हमेशा सही xrGetSpatialBuffer* फ़ंक्शन के ज़रिए एक ही डेटा दिखाना चाहिए.

typedef enum XrSpatialBufferTypeEXT {
    XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
    XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
    XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
    XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
    XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
    XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
    XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
    XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
    XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;

XrSpatialBufferTypeEXT एन्यूमरेशन, XrSpatialBufferIdEXT से दिखाए गए बफ़र के अलग-अलग डेटा टाइप की पहचान करता है .

Enumerant Descriptions

  • XR_SPATIAL_BUFFER_TYPE_STRING_EXT . स्ट्रिंग बफ़र को वापस पाने के लिए, XrSpatialBufferIdEXT को xrGetSpatialBufferStringEXT में पास किया जा सकता है.
  • XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferUint8EXT में पास किया जा सकता है, ताकि uint8_t बफ़र को वापस पाया जा सके.
  • XR_SPATIAL_BUFFER_TYPE_UINT16_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferUint16EXT में पास किया जा सकता है, ताकि uint16_t बफ़र को वापस पाया जा सके.
  • XR_SPATIAL_BUFFER_TYPE_UINT32_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferUint32EXT में पास किया जा सकता है, ताकि uint32_t बफ़र को वापस पाया जा सके.
  • XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferFloatEXT में पास किया जा सकता है, ताकि float बफ़र को वापस पाया जा सके.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferVector2fEXT में पास किया जा सकता है, ताकि XrVector2f बफ़र को वापस पाया जा सके.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . XrSpatialBufferIdEXT को xrGetSpatialBufferVector3fEXT में पास किया जा सकता है, ताकि XrVector3f बफ़र को वापस लाया जा सके.

xrGetSpatialBufferStringEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    char*                                       buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, वर्णों की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, char का एक कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferStringEXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_STRING_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_STRING_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

रनटाइम के दौरान भरी गई buffer, UTF-8 स्ट्रिंग होनी चाहिए, जो शून्य पर खत्म होती हो.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferStringEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू होना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput, 0 नहीं है, तो buffer को bufferCapacityInput वर्ण वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferUint8EXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferUint8EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint8_t*                                    buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, uint8_t का एक कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferUint8EXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_UINT8_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_UINT8_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferUint8EXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput, 0 नहीं है, तो buffer को bufferCapacityInput uint8_t वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferUint16EXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferUint16EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint16_t*                                   buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, uint16_t का एक कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferUint16EXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_UINT16_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_UINT16_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferUint16EXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput, 0 नहीं है, तो buffer को bufferCapacityInput uint16_t वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferUint32EXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferUint32EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint32_t*                                   buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, uint32_t का एक कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferUint32EXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_UINT32_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_UINT32_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferUint32EXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू होना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput, 0 नहीं है, तो buffer को bufferCapacityInput uint32_t वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferFloatEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferFloatEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    float*                                      buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, float का एक कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferFloatEXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferFloatEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput, 0 नहीं है, तो buffer को bufferCapacityInput float वैल्यू के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferVector2fEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferVector2fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector2f*                                 buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, XrVector2f का कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferVector2fEXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferVector2fEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput की वैल्यू 0 नहीं है, तो buffer को bufferCapacityInput XrVector2f स्ट्रक्चर के कलेक्शन का पॉइंटर होना चाहिए

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

xrGetSpatialBufferVector3fEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrGetSpatialBufferVector3fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector3f*                                 buffer);

पैरामीटर की जानकारी

  • snapshot, XrSpatialSnapshotEXT का हैंडल है.
  • info में, क्वेरी किए जाने वाले बफ़र की जानकारी होती है.
  • bufferCapacityInput, कलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.
  • bufferCountOutput, buffer कलेक्शन में मौजूद एलिमेंट की संख्या है या bufferCapacityInput के कम होने पर ज़रूरी क्षमता है.
  • buffer, XrVector3f का कलेक्शन है. अगर bufferCapacityInput की वैल्यू 0 है, तो यह NULL हो सकती है.
  • ज़रूरी buffer साइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.

ऐप्लिकेशन, किसी कॉम्पोनेंट से मिले XrSpatialBufferEXT का डेटा हासिल कर सकता है. इसके लिए, xrGetSpatialBufferVector3fEXT का इस्तेमाल करके, XrSpatialBufferEXT :: bufferType को XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT पर सेट करना होगा.

अगर XrSpatialBufferGetInfoEXT :: bufferId के लिए XrSpatialBufferTypeEXT, XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT नहीं है, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.

अगर XrSpatialBufferGetInfoEXT :: bufferId, snapshot से जुड़ा नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • xrGetSpatialBufferVector3fEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए
  • info, किसी मान्य XrSpatialBufferGetInfoEXT स्ट्रक्चर का पॉइंटर होना चाहिए
  • bufferCountOutput को uint32_t वैल्यू का पॉइंटर होना चाहिए
  • अगर bufferCapacityInput की वैल्यू 0 नहीं है, तो buffer को bufferCapacityInput XrVector3f स्ट्रक्चर के कलेक्शन का पॉइंटर होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialBufferGetInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialBufferGetInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialBufferIdEXT    bufferId;
} XrSpatialBufferGetInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • bufferId बफ़र के लिए XrSpatialBufferIdEXT जिसका डेटा वापस पाना है.

सही इस्तेमाल (इंप्लिसिट)

#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0

XR_NULL_SPATIAL_BUFFER_ID_EXT एक रिज़र्व वैल्यू है, जो अमान्य XrSpatialBufferIdEXT को दिखाती है. इसे एपीआई फ़ंक्शन को सिर्फ़ तब पास किया जा सकता है और उनसे वापस लिया जा सकता है, जब इसकी खास तौर पर अनुमति दी गई हो.

अपडेट का स्नैपशॉट बनाना

xrCreateSpatialUpdateSnapshotEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrCreateSpatialUpdateSnapshotEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
    XrSpatialSnapshotEXT*                       snapshot);

पैरामीटर की जानकारी

ऐप्लिकेशन, स्नैपशॉट बनाने और रनटाइम के हिसाब से चुनिंदा इकाइयों के लिए कॉम्पोनेंट का नया डेटा पाने के लिए, xrCreateSpatialUpdateSnapshotEXT का इस्तेमाल कर सकता है. स्नैपशॉट बनाते समय, ऐप्लिकेशन XrSpatialEntityEXT हैंडल और कॉम्पोनेंट के टाइप उपलब्ध करा सकते हैं.

ऐप्लिकेशन, XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes का इस्तेमाल कर सकता है. इससे उन कॉम्पोनेंट की सूची को फ़िल्टर किया जा सकता है जिनका डेटा स्नैपशॉट में शामिल किया जाना चाहिए. अगर ऐप्लिकेशन, XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में स्पेसियल कॉम्पोनेंट टाइप की मान्य सूची उपलब्ध कराता है, तो रनटाइम को स्नैपशॉट में सिर्फ़ ऐसी स्पेसियल इकाइयां शामिल करनी चाहिए जिनमें XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में उपलब्ध कराए गए कॉम्पोनेंट में से कम से कम एक कॉम्पोनेंट मौजूद हो. साथ ही, रनटाइम में स्नैपशॉट के सिर्फ़ उन कॉम्पोनेंट का डेटा शामिल होना चाहिए.

अगर spatialContext बनाते समय XrSpatialContextCreateInfoEXT :: capabilityConfigs को पास की गई स्पेशल सुविधाओं के लिए, XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में मौजूद कोई भी XrSpatialComponentTypeEXT चालू नहीं है, तो रनटाइम को XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT दिखाना चाहिए.

अगर ऐप्लिकेशन, XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes में स्पेसियल कॉम्पोनेंट टाइप की सूची नहीं देता है, तो रनटाइम को स्नैपशॉट में XrSpatialUpdateSnapshotCreateInfoEXT :: entities में मौजूद सभी स्पेसियल इकाइयों को शामिल करना चाहिए. साथ ही, इसमें spatialContext के लिए कॉन्फ़िगर की गई क्षमताओं के सभी चालू कॉम्पोनेंट का डेटा शामिल होना चाहिए.

रनटाइम में ऐसी स्पेशल इकाइयां शामिल नहीं होनी चाहिए जो snapshot में XrSpatialUpdateSnapshotCreateInfoEXT :: entities में शामिल नहीं हैं.

ऐप्लिकेशन जितने चाहे उतने स्नैपशॉट बना सकता है. हालांकि, उसे हर नए स्नैपशॉट के लिए तय की गई मेमोरी का ध्यान रखना होगा. साथ ही, ज़रूरत न होने पर स्नैपशॉट को मिटाना होगा.

सही इस्तेमाल (इंप्लिसिट)

  • xrCreateSpatialUpdateSnapshotEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • spatialContext एक मान्य XrSpatialContextEXT हैंडल होना चाहिए
  • createInfo को किसी मान्य XrSpatialUpdateSnapshotCreateInfoEXT स्ट्रक्चर का पॉइंटर होना ज़रूरी है
  • snapshot को XrSpatialSnapshotEXT हैंडल का पॉइंटर होना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • 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_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialUpdateSnapshotCreateInfoEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            entityCount;
    const XrSpatialEntityEXT*           entities;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
    XrSpace                             baseSpace;
    XrTime                              time;
} XrSpatialUpdateSnapshotCreateInfoEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • entityCount एक uint32_t है, जो entities कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • entities, XrSpatialEntityEXT का एक कलेक्शन है. इसके लिए, रनटाइम में स्नैपशॉट में कॉम्पोनेंट डेटा शामिल करना ज़रूरी है.
  • componentTypeCount एक uint32_t है, जो componentTypes कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • componentTypes, XrSpatialComponentTypeEXT का एक कलेक्शन है. इसके लिए, रनटाइम में स्नैपशॉट का डेटा शामिल होना ज़रूरी है.
  • baseSpace, XrSpace है. इसके हिसाब से, अपडेट XrSpatialSnapshotEXT की सभी जगहें तय की जाएंगी.
  • time वह XrTime है जहां अपडेट XrSpatialSnapshotEXT की सभी जगहें मौजूद होंगी.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialUpdateSnapshotCreateInfoEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • entities को entityCount मान्य XrSpatialEntityEXT हैंडल के कलेक्शन का पॉइंटर होना चाहिए
  • अगर componentTypeCount की वैल्यू 0 नहीं है, तो componentTypes को componentTypeCount मान्य XrSpatialComponentTypeEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए
  • baseSpace XrSpace हैंडल मान्य होना चाहिए
  • entityCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए
  • baseSpace और entities के एलिमेंट, दोनों को एक ही XrSession से बनाया, असाइन या वापस लाया गया होना चाहिए

स्नैपशॉट को मिटाना

xrDestroySpatialSnapshotEXT फ़ंक्शन को इस तरह से तय किया गया है:

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

पैरामीटर की जानकारी

ऐप्लिकेशन, XrSpatialSnapshotEXT हैंडल और उससे जुड़े संसाधनों को खत्म करने के लिए, xrDestroySpatialSnapshotEXT को कॉल कर सकता है.

सही इस्तेमाल (इंप्लिसिट)

  • xrDestroySpatialSnapshotEXT को कॉल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • snapshot एक मान्य XrSpatialSnapshotEXT हैंडल होना चाहिए

Thread की सुरक्षा

  • snapshot और किसी भी चाइल्ड हैंडल का ऐक्सेस, बाहरी तौर पर सिंक किया जाना ज़रूरी है

रिटर्न कोड

सफलता

  • XR_SUCCESS

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

सामान्य कॉम्पोनेंट

बाउंडेड 2D

कॉम्पोनेंट का डेटा

XrSpatialBounded2DDataEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialBounded2DDataEXT {
    XrPosef        center;
    XrExtent2Df    extents;
} XrSpatialBounded2DDataEXT;

सदस्यों की जानकारी

  • center एक XrPosef है, जो बाउंडेड 2D कॉम्पोनेंट के ज्यामितीय केंद्र को तय करता है.
  • extents, x-ऐक्सिस (extents.width) और y-ऐक्सिस (extents.height) के साथ बाउंड किए गए 2D कॉम्पोनेंट की सीमाएं हैं. यह center पर केंद्रित है.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT के extents से, प्लेन के कोऑर्डिनेट सिस्टम के x-y प्लेन में मौजूद इकाई के साइज़ का पता चलता है. {0, 0, 0} पोज़िशन, {0, 0, 0, 1} रोटेशन (कोई रोटेशन नहीं), और {1, 1} एक्सटेंट वाले प्लेन का मतलब है कि 1 मीटर x 1 मीटर का प्लेन, {0, 0, 0} पर केंद्रित है. इसका सामने का फ़ेस नॉर्मल वेक्टर, कॉम्पोनेंट के स्पेस में +Z दिशा की ओर इशारा करता है.

X X Y Y Z Z ऊंचाई ऊंचाई Y Y Z Z X X वर्टिकल प्लेन वर्टिकल प्लेन हॉरिज़ॉन्टल प्लेन हॉरिज़ॉन्टल प्लेन चौड़ाई चौड़ाई चौड़ाई चौड़ाई ऊंचाई ऊंचाई

इमेज 24. Bounded2D कॉम्पोनेंट कोऑर्डिनेट सिस्टम

ध्यान दें

OpenXR, X-Y प्लेन का इस्तेमाल करता है. इसमें +Z, प्लेन नॉर्मल होता है. हालांकि, अन्य एपीआई X-Z प्लेन का इस्तेमाल कर सकते हैं. इसमें +Y, प्लेन नॉर्मल होता है. X-Y प्लेन को X-Z प्लेन में बदला जा सकता है. इसके लिए, +X ऐक्सिस के चारों ओर -π/2 रेडियन घुमाना होगा.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialBounded2DDataEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर

XrSpatialComponentBounded2DListEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentBounded2DListEXT {
    XrStructureType               type;
    void*                         next;
    uint32_t                      boundCount;
    XrSpatialBounded2DDataEXT*    bounds;
} XrSpatialComponentBounded2DListEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • boundCount एक uint32_t है, जो bounds कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • bounds, XrSpatialBounded2DDataEXT का एक कलेक्शन है.

अगर XrSpatialComponentBounded2DListEXT, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए. हालांकि, XrSpatialComponentDataQueryConditionEXT ::componentTypeCount शून्य नहीं है और XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है.

अगर boundCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.

अगर xrQuerySpatialComponentDataEXT :: snapshot को xrCreateSpatialDiscoverySnapshotCompleteEXT से बनाया गया है, तो रनटाइम के लिए XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace और XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time में XrSpatialBounded2DDataEXT :: center देना ज़रूरी है .

अगर xrQuerySpatialComponentDataEXT :: snapshot को xrCreateSpatialUpdateSnapshotEXT से बनाया गया है, तो रनटाइम के लिए ज़रूरी है कि वह XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace और XrSpatialUpdateSnapshotCreateInfoEXT :: time में XrSpatialBounded2DDataEXT :: center उपलब्ध कराए.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialComponentBounded2DListEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • bounds, boundCount XrSpatialBounded2DDataEXT स्ट्रक्चर के कलेक्शन का पॉइंटर होना चाहिए
  • boundCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन

अगर किसी सुविधा के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT को शामिल किया गया है, तो ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में enum वैल्यू को शामिल करना होगा. इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT की अगली चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

बाउंडेड 3D

कॉम्पोनेंट का डेटा

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT अपने डेटा के लिए XrBoxf का इस्तेमाल करता है.

डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर

XrSpatialComponentBounded3DListEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentBounded3DListEXT {
    XrStructureType    type;
    void*              next;
    uint32_t           boundCount;
    XrBoxf*            bounds;
} XrSpatialComponentBounded3DListEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • boundCount एक uint32_t है, जो bounds कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • bounds, XrBoxf का कलेक्शन है.

अगर XrSpatialComponentBounded3DListEXT, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए. हालांकि, XrSpatialComponentDataQueryConditionEXT ::componentTypeCount शून्य नहीं है और XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है.

अगर boundCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.

अगर xrQuerySpatialComponentDataEXT :: snapshot को xrCreateSpatialDiscoverySnapshotCompleteEXT से बनाया गया है, तो रनटाइम को ज़रूर XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace में XrBoxf :: center को XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time पर उपलब्ध कराना होगा.

अगर xrQuerySpatialComponentDataEXT :: snapshot को xrCreateSpatialUpdateSnapshotEXT से बनाया गया है, तो रनटाइम के लिए ज़रूरी है कि वह XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace में XrSpatialUpdateSnapshotCreateInfoEXT :: time पर XrBoxf :: center उपलब्ध कराए.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialComponentBounded3DListEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • bounds को boundCount XrBoxf स्ट्रक्चर के कलेक्शन का पॉइंटर होना चाहिए
  • boundCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन

अगर किसी क्षमता के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT को शामिल किया गया है, तो ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में enum को शामिल करना होगा. इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT की अगली चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

अभिभावक

कॉम्पोनेंट का डेटा

XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT अपने डेटा के लिए XrSpatialEntityIdEXT का इस्तेमाल करता है.

डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर

XrSpatialComponentParentListEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentParentListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 parentCount;
    XrSpatialEntityIdEXT*    parents;
} XrSpatialComponentParentListEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.
  • parentCount एक uint32_t है, जो parents कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • parents, XrSpatialEntityIdEXT का एक कलेक्शन है.

अगर XrSpatialComponentParentListEXT, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए. हालांकि, XrSpatialComponentDataQueryConditionEXT ::componentTypeCount शून्य नहीं होना चाहिए और XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया जाना चाहिए.

अगर parentCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialComponentParentListEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • parents को parentCount XrSpatialEntityIdEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए
  • parentCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन

अगर किसी क्षमता के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT को शामिल किया गया है, तो ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में enum को शामिल करना होगा. इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT की अगली चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

मेश 3D

कॉम्पोनेंट का डेटा

XrSpatialMeshDataEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialMeshDataEXT {
    XrPosef               origin;
    XrSpatialBufferEXT    vertexBuffer;
    XrSpatialBufferEXT    indexBuffer;
} XrSpatialMeshDataEXT;

सदस्यों की जानकारी

  • origin एक XrPosef है, जो मेश के ऑरिजिन के बारे में बताता है. मेश के सभी वर्टिसेस, इस ऑरिजिन के हिसाब से होने चाहिए.
  • vertexBuffer एक XrSpatialBufferEXT है. यह उस बफ़र का आईडी उपलब्ध कराता है जो उस इकाई के वर्टेक्स बफ़र को दिखाता है जिस पर यह कॉम्पोनेंट मौजूद है. वर्टेक्स की पोज़िशन, origin के हिसाब से होनी चाहिए .
  • indexBuffer एक XrSpatialBufferEXT है. यह बफ़र के लिए आईडी उपलब्ध कराता है. यह बफ़र, ट्रायंगल इंडेक्स के कलेक्शन को दिखाता है. साथ ही, vertexBuffer में मेश वर्टिस के इंडेक्स की जानकारी देता है. ट्रायंगल इंडेक्स, घड़ी की सुई की उलटी दिशा में ज़रूर दिखाए जाने चाहिए. साथ ही, तीन इंडेक्स एक ट्रायंगल को दिखाते हैं.

XrSpatialMeshDataEXT का इस्तेमाल करने वाले कॉम्पोनेंट टाइप के लिए, vertexBuffer और indexBuffer के XrSpatialBufferTypeEXT की जानकारी देना ज़रूरी है.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialMeshDataEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन को चालू करना ज़रूरी है
  • vertexBuffer एक मान्य XrSpatialBufferEXT स्ट्रक्चर होना चाहिए
  • indexBuffer एक मान्य XrSpatialBufferEXT स्ट्रक्चर होना चाहिए
डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर

XrSpatialComponentMesh3DListEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialComponentMesh3DListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 meshCount;
    XrSpatialMeshDataEXT*    meshes;
} XrSpatialComponentMesh3DListEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • meshCount एक uint32_t है, जो meshes कलेक्शन में मौजूद एलिमेंट की संख्या बताता है.
  • meshes, XrSpatialMeshDataEXT का एक कलेक्शन है.

ऐप्लिकेशन, XrSpatialSnapshotEXT में मौजूद स्पेशल इकाइयों के मेश 3D कॉम्पोनेंट के बारे में क्वेरी कर सकता है. इसके लिए, XrSpatialComponentDataQueryConditionEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT जोड़ना होगा. साथ ही, XrSpatialComponentDataQueryResultEXT की अगली पॉइंटर चेन में XrSpatialComponentMesh3DListEXT जोड़ना होगा.

अगर XrSpatialComponentMesh3DListEXT, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए. हालांकि, XrSpatialComponentDataQueryConditionEXT ::componentTypeCount शून्य नहीं है और XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है.

अगर meshCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT को ज़रूर दिखाना चाहिए.

meshes कलेक्शन में रनटाइम से भरे गए XrSpatialMeshDataEXT के लिए, XrSpatialMeshDataEXT :: vertexBuffer के लिए XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT होना चाहिए और XrSpatialMeshDataEXT :: indexBuffer के लिए XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT32_EXT होना चाहिए.

सही इस्तेमाल (इंप्लिसिट)

  • XrSpatialComponentMesh3DListEXT का इस्तेमाल करने से पहले, XR_EXT_spatial_entity एक्सटेंशन चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • meshes को meshCount XrSpatialMeshDataEXT स्ट्रक्चर के कलेक्शन का पॉइंटर होना चाहिए
  • meshCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए
कॉन्फ़िगरेशन

अगर किसी सुविधा के लिए, XrSpatialCapabilityComponentTypesEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT को शामिल किया गया है, तो ऐप्लिकेशन उसे चालू कर सकता है. इसके लिए, उसे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents सूची में enum को शामिल करना होगा. यह सूची, इस कॉम्पोनेंट के साथ काम करने वाली सुविधा के XrSpatialCapabilityConfigurationBaseHeaderEXT से मिले स्ट्रक्चर की होती है.

इस कॉम्पोनेंट को XrSpatialCapabilityConfigurationBaseHeaderEXT की अगली चेन में शामिल करने के लिए, किसी खास कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

ट्रैकिंग स्टेटस के हिसाब से फ़िल्टर करना

XrSpatialFilterTrackingStateEXT स्ट्रक्चर को इस तरह से तय किया गया है:

typedef struct XrSpatialFilterTrackingStateEXT {
    XrStructureType                    type;
    const void*                        next;
    XrSpatialEntityTrackingStateEXT    trackingState;
} XrSpatialFilterTrackingStateEXT;

सदस्यों की जानकारी

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.
  • trackingState, XrSpatialEntityTrackingStateEXT है. इसके लिए, ऐप्लिकेशन फ़िल्टर लागू करना चाहता है.

ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT की अगली चेन में XrSpatialFilterTrackingStateEXT का इस्तेमाल कर सकता है, ताकि सिर्फ़ उन इकाइयों को खोजा जा सके जिनकी ट्रैकिंग स्थिति trackingState है.

ऐप्लिकेशन, XrSpatialComponentDataQueryConditionEXT की अगली चेन में XrSpatialFilterTrackingStateEXT का इस्तेमाल कर सकता है. इससे स्नैपशॉट से कॉम्पोनेंट डेटा क्वेरी को सिर्फ़ उन इकाइयों तक सीमित किया जा सकता है जिनकी ट्रैकिंग स्थिति trackingState है.

सही इस्तेमाल (इंप्लिसिट)

कोड का उदाहरण

ऐप्लिकेशन का इस्तेमाल

आम तौर पर, ऐप्लिकेशन इस पैटर्न में स्पेशल एंटिटी एक्सटेंशन का इस्तेमाल करते हैं:

  • कोई ऐप्लिकेशन, सबसे पहले xrEnumerateSpatialCapabilitiesEXT का इस्तेमाल करके, सिस्टम की स्पेशल क्षमताओं की गिनती करता है. इसके बाद, यह XrSpatialCapabilityEXT के दिखाए गए ऐरे की जांच करता है. साथ ही, xrEnumerateSpatialCapabilityComponentTypesEXT और xrEnumerateSpatialCapabilityFeaturesEXT का इस्तेमाल करके, उन क्षमताओं के लिए काम करने वाले कॉम्पोनेंट और सुविधाओं की गिनती करता है. इससे ऐप्लिकेशन को उन कॉम्पोनेंट की पूरी जानकारी मिलती है जिन्हें वह चालू कर सकता है. साथ ही, उन कॉन्फ़िगरेशन की जानकारी मिलती है जिन्हें यह सुविधा स्वीकार करती है.
  • इसके बाद, ऐप्लिकेशन एक या उससे ज़्यादा XrSpatialContextEXT हैंडल बनाता है. इनमें, स्पेशल कैपेबिलिटी के खास कॉन्फ़िगरेशन होते हैं. ये कॉन्फ़िगरेशन, स्पेशल कॉन्टेक्स्ट में किसी खास सुविधा को चालू और कॉन्फ़िगर करते हैं. साथ ही, उन सुविधाओं के लिए कॉम्पोनेंट को चालू और कॉन्फ़िगर करते हैं.
  • हर XrSpatialContextEXT के लिए, ऐप्लिकेशन उस XrSpatialContextEXT के लिए XrEventDataSpatialDiscoveryRecommendedEXT इवेंट मिलने का इंतज़ार करता है. इसके बाद, वह स्पेशल एंटिटी खोजने के लिए xrCreateSpatialDiscoverySnapshotAsyncEXT का इस्तेमाल करता है. यह एसिंक्रोनस ऑपरेशन पूरा होने के बाद, ऐप्लिकेशन को XrSpatialSnapshotEXT हैंडल मिलता है.
  • ऐप्लिकेशन, xrQuerySpatialComponentDataEXT का इस्तेमाल करके, इस XrSpatialSnapshotEXT में शामिल इकाइयों और कॉम्पोनेंट डेटा के लिए क्वेरी करता है. अगर इकाई की स्थिति XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT है, तो ऐप्लिकेशन, क्वेरी की गई इकाइयों के कॉम्पोनेंट का नया डेटा पढ़ता है. यह डेटा, XrSpatialComponentDataQueryResultEXT की अगली चेन से जुड़े स्ट्रक्चर से लिया जाता है.
  • अगर ऐप्लिकेशन को कुछ ऐसी इकाइयां मिलती हैं जो दिलचस्प हैं और जिनके लिए वह समय के साथ अपडेट पाना चाहता है, तो वह xrCreateSpatialEntityFromIdEXT का इस्तेमाल करके, उन इकाइयों के लिए XrSpatialEntityEXT हैंडल बनाता है. ऐप्लिकेशन को ऐसी दिलचस्प इकाइयों के अपडेट मिलते हैं. इसके लिए, वह xrCreateSpatialUpdateSnapshotEXT का इस्तेमाल करता है. साथ ही, नए बनाए गए XrSpatialSnapshotEXT पर उसी xrQuerySpatialComponentDataEXT फ़ंक्शन का इस्तेमाल करता है, ताकि उन इकाइयों के लिए कॉम्पोनेंट का नया डेटा मिल सके.

स्पेशल इकाइयों और क्वेरी कॉम्पोनेंट के डेटा का पता लगाना

यहां दिए गए उदाहरण कोड में, "Foo" क्षमता के लिए स्पेशल इकाइयों को खोजने और उनके कॉम्पोनेंट डेटा के बारे में क्वेरी करने का तरीका बताया गया है.

/****************************/
/* Capability definition    */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)

#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
  XrStructureType                     type;
  const void* XR_MAY_ALIAS            next;
  XrSpatialCapabilityEXT              capability;
  uint32_t                            enabledComponentCount;
  const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;

/******************************/
/* End capability definition  */
/******************************/

auto waitUntilReady = [](XrFutureEXT future) {
  XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
  XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
  pollInfo.future = future;
  do {
    // sleep(1);
    CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
  } while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};

// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
  const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
    XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
  };

  // Configure Foo capability for the spatial context
  XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
  fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
  fooConfig.enabledComponentCount = enabledComponents.size();
  fooConfig.enabledComponents = enabledComponents.data();

  std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
  capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));

  XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
  spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
  spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
  XrFutureEXT createContextFuture;
  CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));

  waitUntilReady(createContextFuture);

  XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
  CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
  if (completion.futureResult != XR_SUCCESS) {
    return;
  }

  spatialContext = completion.spatialContext;
}

auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
  // We want to look for entities that have the following components.
  std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};

  XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
  snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
  snapshotCreateInfo.componentTypes = snapshotComponents.data();
  XrFutureEXT future = XR_NULL_FUTURE_EXT;
  CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));

  waitUntilReady(future);

  XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
  completionInfo.baseSpace = localSpace;
  completionInfo.time = time;
  completionInfo.future = future;

  XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
  CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
  if (completion.futureResult == XR_SUCCESS) {
    // Query for the bounded2d component data
    XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
    XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
    queryCond.componentTypes = &componentToQuery;

    XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
    queryResult.entityIdCapacityInput = 0;
    queryResult.entityIds = nullptr;
    queryResult.entityStateCapacityInput = 0;
    queryResult.entityStates = nullptr;
    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
    std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
    queryResult.entityIdCapacityInput = entityIds.size();
    queryResult.entityIds = entityIds.data();
    queryResult.entityStateCapacityInput = entityStates.size();
    queryResult.entityStates = entityStates.data();

    std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
    XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
    boundsList.boundCount = bounded2d.size();
    boundsList.bounds = bounded2d.data();
    queryResult.next = &boundsList;

    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
      if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
        // 2D extents for entity entityIds[i] is bounded2d[i].extents.
      }
    }

    CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
  }
};

while (1) {
  // ...
  // For every frame in frame loop
  // ...

  XrFrameState frameState;  // previously returned from xrWaitFrame
  const XrTime time = frameState.predictedDisplayTime;

  // Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
  XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
  XrResult result = xrPollEvent(instance, &event);
  if (result == XR_SUCCESS) {
      switch (event.type) {
          case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
              const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
                  *reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
              // Discover spatial entities for the context that we received the "discovery
              // recommended" event for.
              discoverSpatialEntities(eventdata.spatialContext, time);
              break;
          }
      }
  }

  // ...
  // Finish frame loop
  // ...
}

CHK_XR(xrDestroySpatialContextEXT(spatialContext));

बफ़र डेटा के लिए क्वेरी करना

यहां दिए गए उदाहरण वाले कोड में, XrSpatialBufferEXT उपलब्ध कराने वाले कॉम्पोनेंट का डेटा पाने का तरीका बताया गया है.

/****************************/
/* Component definition     */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)

#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)

// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
    XrStructureType                   type;
    void* XR_MAY_ALIAS                next;
    uint32_t                          fooCount;
    XrSpatialBufferEXT*               foo;
} XrSpatialComponentFooListEXT;

/******************************/
/* End Component definition  */
/******************************/

// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;

XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));

std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();

std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;

CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));

for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
  // foo component data for entity entityIds[i]
  if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
    XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
    getInfo.bufferId = fooBuffers[i].bufferId;
    uint32_t bufferCountOutput;
    CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
    std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
    CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));

    // XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
  }
}

एक्सटेंशन से जुड़े दिशा-निर्देश

  • अगर कोई एक्सटेंशन नया XrSpatialComponentTypeEXT तय कर रहा है, जो किसी स्पेशल एंटिटी के बारे में अतिरिक्त डेटा उपलब्ध कराता है, तो

    • एक्सटेंशन को उस कॉम्पोनेंट के लिए एक सूची का स्ट्रक्चर भी तय करना चाहिए. इससे ऐप्लिकेशन, रनटाइम के लिए एक कलेक्शन पास कर सकता है, ताकि xrQuerySpatialComponentDataEXT :: queryCondition को पूरा करने वाली हर स्पेशल इकाई के डेटा को भरा जा सके. इस तरह के सूची स्ट्रक्चर के कुछ उदाहरण XrSpatialComponentParentListEXT और XrSpatialComponentBounded2DListEXT हैं. अगर कॉम्पोनेंट डेटा का साइज़ अलग-अलग है और ऐप्लिकेशन को इसकी क्वेरी करने के लिए टू-कॉल इडियम का इस्तेमाल करना पड़ता है, तो कॉम्पोनेंट डेटा को लिस्ट स्ट्रक्चर में अलग-अलग साइज़ के हर डेटा के लिए, XrSpatialBufferEXT उपलब्ध कराना चाहिए. साथ ही, हर बफ़र के लिए XrSpatialBufferTypeEXT की जानकारी देना ज़रूरी है. इसके बाद, ऐप्लिकेशन कॉम्पोनेंट डेटा के लिए टू-कॉल इडियम में बताए गए फ़ंक्शन का इस्तेमाल करके, बफ़र डेटा के लिए क्वेरी कर सकता है. इस तरह के स्ट्रक्चर का एक उदाहरण XrSpatialMeshDataEXT है, जो XrSpatialComponentMesh3DListEXT में शामिल है.
    • यह एक्सटेंशन, ऐसे स्ट्रक्चर भी उपलब्ध करा सकता है जिन्हें ऐप्लिकेशन, XrSpatialComponentDataQueryConditionEXT :: next से जोड़ सकता है. इससे इस कॉम्पोनेंट के डेटा से जुड़ी क्वेरी के लिए, अतिरिक्त फ़िल्टर उपलब्ध कराए जा सकते हैं.
  • एक्सटेंशन, XrSpatialDiscoverySnapshotCreateInfoEXT को एक्सटेंड करने वाले स्ट्रक्चर तय कर सकते हैं, ताकि डिस्कवरी के लिए अतिरिक्त फ़िल्टर उपलब्ध कराए जा सकें. स्नैपशॉट बनाने के लिए इस्तेमाल किए जाने वाले फ़िल्टर से, स्पेशल कॉन्टेक्स्ट के कॉन्फ़िगरेशन पर असर नहीं पड़ना चाहिए. इसके बजाय, इनका इस्तेमाल रनटाइम को यह बताने के लिए किया जाना चाहिए कि स्नैपशॉट में कौनसी इकाइयां और डेटा शामिल करना है. यह जानकारी, स्पेशल कॉन्टेक्स्ट के मौजूदा कॉन्फ़िगरेशन (और इसलिए, इसमें इस्तेमाल की जाने वाली सेवाओं के मौजूदा कॉन्फ़िगरेशन) से ट्रैक की जाती है.

  • अगर कोई एक्सटेंशन नया XrSpatialCapabilityEXT तय करता है, तो

    • इसमें XrSpatialComponentTypeEXT की सूची भी होनी चाहिए. यह सूची, रनटाइम को उस सुविधा के लिए इकाइयों पर ज़रूर उपलब्ध करानी चाहिए.
    • साथ ही, इसे XrSpatialCapabilityConfigurationBaseHeaderEXT से मिले स्ट्रक्चर उपलब्ध कराने होंगे, ताकि उस क्षमता को कॉन्फ़िगर किया जा सके.
  • अगर कोई एक्सटेंशन नया XrSpatialCapabilityFeatureEXT तय करता है, तो उसे एक ऐसा कॉन्फ़िगरेशन स्ट्रक्चर भी तय करना चाहिए जिसे XrSpatialCapabilityConfigurationBaseHeaderEXT के अगले पॉइंटर से जोड़ा जा सके. ऐप्लिकेशन, XrSpatialContextEXT बनाते समय इस सुविधा को चालू करने के लिए इसका इस्तेमाल कर सकता है.

  • नए XrSpatialCapabilityEXT को तय करने वाले एक्सटेंशन को, खास जानकारी के लिए इस टेंप्लेट का पालन करना चाहिए -

    • खास जानकारी
    • रनटाइम से जुड़ी सहायता
    • कॉन्फ़िगरेशन
    • गारंटी वाले कॉम्पोनेंट
    • कोड का उदाहरण
  • नए XrSpatialComponentTypeEXT को तय करने वाले एक्सटेंशन को, खास जानकारी के लिए इस टेंप्लेट का पालन करना चाहिए -

    • कॉम्पोनेंट का डेटा
    • डेटा के बारे में क्वेरी करने के लिए कॉम्पोनेंट की सूची का स्ट्रक्चर
    • कॉन्फ़िगरेशन
  • ऐप्लिकेशन को XrSpatialBufferIdEXT उपलब्ध कराने वाला एपीआई लिखते समय, उसके साथ XrSpatialBufferTypeEXT ज़रूर होना चाहिए. इससे ऐप्लिकेशन को यह जानकारी मिलती है कि बफ़र का डेटा टाइप क्या है. साथ ही, ऐप्लिकेशन बफ़र का असल कॉन्टेंट पाने के लिए, सही xrGetSpatialBuffer* फ़ंक्शन का इस्तेमाल कर सकता है.

सिमैंटिक लेबल डिज़ाइन और एक्सटेंशन से जुड़े दिशा-निर्देश

यह एक्सटेंशन, किसी इकाई के सिमैंटिक लेबल की जानकारी देने के लिए कोई कॉम्पोनेंट तय नहीं करता. हालांकि, यह ऐसे किसी भी एक्सटेंशन के लिए डिज़ाइन के नियम और दिशा-निर्देश तय करता है जो इस तरह के कॉम्पोनेंट को तय करता है. यहां दिए गए टेक्स्ट में, " चाहिए " और " ज़रूरी है " शब्दों का इस्तेमाल, इस तरह की सुविधा बनाने वाले लोगों के लिए किया गया है. इनका इस्तेमाल, रनटाइम लागू करने या एपीआई का इस्तेमाल करने वाले ऐप्लिकेशन के लिए नहीं किया गया है.

  • अगर कोई एक्सटेंशन किसी XrSpatialCapabilityEXT के लिए सिमैंटिक लेबल तय कर रहा है, तो उसे ऐसा करने के लिए एक नया XrSpatialComponentTypeEXT तय करना चाहिए. साथ ही, लेबल के सेट ("सिमैंटिक लेबल सेट") के साथ एक नया एन्यूमरेशन तय करना चाहिए, ताकि वह उस कॉम्पोनेंट का डेटा बन सके.
  • सेमैंटिक लेबल सेट को दिखाने वाले एन्यूमरेशन में एक वैल्यू ज़रूर होनी चाहिए. इससे यह पता चलता है कि इकाई को इस सेट के किसी भी लेबल में शामिल नहीं किया गया है. इस एन्यूमरेंट के नाम में 'UNCATEGORIZED' शामिल होना ज़रूरी है. उदाहरण के लिए, XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT . इस वैल्यू से ऐप्लिकेशन को पता चलता है कि रनटाइम इस इकाई को पहचानता है. हालांकि, ऐसे अन्य सिमैंटिक लेबल सेट भी हैं जिनमें इस इकाई को कैटगरी में बांटा गया है.
  • xrEnumerateSpatialCapabilityComponentTypesEXT में, नए तय किए गए इस XrSpatialComponentTypeEXT की गिनती करने का मतलब है कि रनटाइम, उस कॉम्पोनेंट टाइप से जुड़े सिमैंटिक लेबल सेट (और इसलिए सेट में तय किए गए लेबल) के साथ काम करता है.
  • ऐप्लिकेशन, इस सिमैंटिक लेबल सेट से जुड़े लेबल वाली इकाइयों को खोजने की अपनी इच्छा ज़ाहिर करते हैं. इसके लिए, वे XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents में मौजूद कॉन्फ़िगरेशन स्ट्रक्चर के अरे में, उससे जुड़ा XrSpatialComponentTypeEXT शामिल करते हैं. यह अरे, उस क्षमता के लिए होता है जिसके लिए कॉम्पोनेंट टाइप को शामिल किया गया है.
  • ऐसा हो सकता है कि किसी एक स्पेशल इकाई में कई कॉम्पोनेंट हों. हर कॉम्पोनेंट, अपने सिमैंटिक लेबल सेट से इकाई को एक लेबल देता है. यहां दिए गए उदाहरण को देखें. इसमें कुछ काल्पनिक सिमैंटिक लेबल सेट - XrSpatialObjectSemanticLabel शामिल हैं. इनमें कुर्सी, सोफ़ा, टेबल वगैरह जैसी वैल्यू हो सकती हैं, XrSpatialSofaBrand , जिसमें IKEA, Wayfair वगैरह जैसी वैल्यू हो सकती हैं. साथ ही, XrSpatialIkeaSofa , जिसमें सोफ़ा के लिए IKEA के खास मॉडल के नाम हो सकते हैं. इस मामले में, सोफ़ा इकाई में तीनों कॉम्पोनेंट (तीनों सिमैंटिक लेबल सेट के लेबल) मौजूद हैं. हर कॉम्पोनेंट, इकाई के बारे में अलग-अलग जानकारी देता है.
  • अगर कोई एक्सटेंशन, नया XrSpatialComponentTypeEXT तय कर रहा है, जो UNCATEGORIZED लेबल के अलावा कई लेबल वाला नया सिमैंटिक लेबल सेट उपलब्ध कराता है, तो एक्सटेंशन को XrSpatialCapabilityFeatureEXT तय करने पर विचार करना चाहिए. इससे ऐप्लिकेशन, उस कॉम्पोनेंट टाइप से जुड़े सिमैंटिक लेबल सेट में तय किए गए लेबल के सिर्फ़ एक सबसेट को चालू कर सकते हैं. यह सबसेट, क्षमता कॉन्फ़िगरेशन की अगली चेन में दिया जाता है. यह रनटाइम के लिए एक हिंट के तौर पर काम करता है, ताकि वे अपनी ट्रैकिंग पाइपलाइन को ऑप्टिमाइज़ कर सकें और सिर्फ़ दिए गए सबसेट को ट्रैक कर सकें. इस तरह के फ़ीचर स्ट्रक्चर का एक उदाहरण यहां दिया गया है.
  • एक्सटेंशन को मौजूदा सिमैंटिक लेबल सेट की सूची में लेबल नहीं जोड़ने चाहिए. इसके बजाय, उन्हें एक नया इन्युमरेशन तय करना चाहिए. इसमें एक जैसे सिमैंटिक वाले इन्युमरेंट होने चाहिए. साथ ही, इनकी वैल्यू, दूसरे सेट की वैल्यू के बराबर होनी चाहिए. इसके अलावा, इसमें नए जोड़े गए इन्युमरेंट भी होने चाहिए. नए सिमैंटिक लेबल सेट की जानकारी में, पुराने लेबल सेट और नए लेबल सेट के बीच मैपिंग भी ज़रूर होनी चाहिए. नीचे उदाहरण देखें.
सिमैंटिक लेबल के सबसेट के लिए, स्पेशल फ़ीचर की परिभाषा का उदाहरण
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
  // ... label values
} XrSpatialExampleSemanticLabelEXT;

/*
typedef enum XrSpatialCapabilityFeatureEXT {
  // .. existing values

  // new spatial feature value
  XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT

  // .. existing values
} XrSpatialCapabilityFeatureEXT;
*/

// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
    XrStructureType                             type;
    const void* XR_MAY_ALIAS                    next;
    uint32_t                                    semanticLabelCount;
    const XrSpatialExampleSemanticLabelEXT*     semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
स्पेशल सिमैंटिक लेबल एक्सटेंशन का उदाहरण
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;

ऊपर दिए गए उदाहरण को देखें, जिसमें एक एक्सटेंशन, एन्यूमरेशन XrSpatialExamplePlaneSemanticLabelExtensionEXT को तय करता है. ऐसा इसलिए किया जाता है, ताकि दरवाज़ों और खिड़कियों को दिखाने वाली वैल्यू के साथ, मौजूदा XrSpatialPlaneSemanticLabelEXT को बढ़ाया जा सके. नए इन्युमरेशन की खास जानकारी में, इस फ़ॉर्म के लिए टेक्स्ट ज़रूर शामिल होना चाहिए -

For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -

[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT                | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT   | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT    | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT   | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT    | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT  | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====

नए मैक्रो

नए बेस टाइप

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

नए ऑब्जेक्ट टाइप

नए निर्देश

नए स्ट्रक्चर

नए Enum

नए Enum कॉन्सटेंट

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • XrObjectType को एक्सटेंड करना :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • XrResult को एक्सटेंड करना :

    • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
    • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XrStructureType को एक्सटेंड करना :

    • XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT
    • XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
    • XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT
    • XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT

समस्याएं

  • क्या कोई इकाई हमेशा सिर्फ़ एक क्षमता से बनती है?

    • समाधान किया गया
    • जवाब: नहीं. यह पूरी तरह से रनटाइम पर निर्भर करता है. यह उसकी ट्रैकिंग क्षमताओं और इस बात पर निर्भर करता है कि वह पहचानी गई इकाई को कैसे दिखाना चाहता है. यह स्पेसिफ़िकेशन, स्पेसियल एंटिटी को दिखाने का कोई खास तरीका नहीं बताता. हालांकि, यह किसी क्षमता के लिए ज़रूरी कॉम्पोनेंट के बारे में बताता है, ताकि कम से कम उम्मीदें तय की जा सकें. रनटाइम, अलग-अलग क्षमताओं से पहचानी गई इकाइयों को मर्ज कर सकता है. साथ ही, उन्हें एक इकाई के तौर पर दिखा सकता है. इसमें उन सभी क्षमताओं के कॉम्पोनेंट शामिल होते हैं जिनकी मदद से इकाई की पहचान की गई थी. उदाहरण के लिए, टेबल का पता लगाने के लिए, प्लेन ट्रैकिंग और ऑब्जेक्ट ट्रैकिंग, दोनों सुविधाओं का इस्तेमाल किया जा सकता है. प्लेन ट्रैकिंग की सुविधा, इकाई पर XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT कॉम्पोनेंट उपलब्ध कराती है और ऑब्जेक्ट ट्रैकिंग की सुविधा, XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT कॉम्पोनेंट उपलब्ध कराती है. कुछ रनटाइम, टेबल को दो अलग-अलग इकाइयों के तौर पर उपलब्ध करा सकते हैं. इनमें से हर इकाई के पास गारंटी वाले कॉम्पोनेंट का अपना सेट होता है. वहीं, कुछ रनटाइम, टेबल को दिखाने के लिए सिर्फ़ एक इकाई उपलब्ध करा सकते हैं. साथ ही, उसी इकाई पर XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT और XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT, दोनों मौजूद होते हैं. यहां यह ध्यान रखना ज़रूरी है कि किसी भी स्पेसियल इकाई में, किसी भी कॉम्पोनेंट टाइप का ज़्यादा से ज़्यादा एक कॉम्पोनेंट हो सकता है. इसलिए, अगर अलग-अलग क्षमताओं से जनरेट किया गया कॉम्पोनेंट डेटा किसी इकाई के लिए मेल नहीं खाता है, तो रनटाइम को उन्हें दो अलग-अलग इकाइयों के तौर पर दिखाना चाहिए.

वर्शन हिस्ट्री

  • पहला संशोधन, 12-04-2024 (निहाव जैन, Google)

    • एक्सटेंशन का शुरुआती ब्यौरा