XR_ANDROID_spatial_component_subsumed_by

Name String

XR_ANDROID_spatial_component_subsumed_by

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

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

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

792

बदलाव

1

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

मंज़ूरी नहीं मिली

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

XR_EXT_spatial_entity
और
XR_EXT_spatial_plane_tracking

पिछली बार बदलाव किए जाने की तारीख

2025-08-19

आईपी स्टेटस

बौद्धिक संपत्ति से जुड़े किसी दावे की जानकारी नहीं है.

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

ब्रायन चेन, Google
काइल चेन, Google
लेवाना चेन, Google
निहाव जैन, Google
स्पेंसर क्विन, Google

खास जानकारी

यह एक्सटेंशन XR_EXT_spatial_entity पर आधारित है. यह XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT के लिए एक नया कॉम्पोनेंट उपलब्ध कराता है, ताकि मौजूदा इकाई को शामिल करने वाली XrSpatialEntityIdEXT को दिखाया जा सके.

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

यह एक्सटेंशन एक नया फ़िल्टर भी उपलब्ध कराता है. ऐप्लिकेशन इस फ़िल्टर को XrSpatialDiscoverySnapshotCreateInfoEXT से जोड़ सकता है, ताकि XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID कॉम्पोनेंट वाली सभी इकाइयों को फ़िल्टर किया जा सके.

अनुमतियां

Android ऐप्लिकेशन के मेनिफ़ेस्ट में, android.permission.SCENE_UNDERSTANDING_COARSE अनुमति ज़रूर शामिल होनी चाहिए. ऐसा इसलिए, क्योंकि यह एक्सटेंशन आस-पास के प्लेन ट्रैक करता है. android.permission.SCENE_UNDERSTANDING_COARSE अनुमति को खतरनाक अनुमति माना जाता है.

(सुरक्षा का लेवल: खतरनाक)

रनटाइम से जुड़ी सहायता

अगर रनटाइम एक प्लेन को दूसरे प्लेन में शामिल कर सकता है, तो उसे ज़रूरी तौर पर xrEnumerateSpatialCapabilityComponentTypesEXT में XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT क्षमता के लिए, XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID को एक काम करने वाले कॉम्पोनेंट के तौर पर शामिल करके यह बताना होगा.

अटैच की गई XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID इकाई का पूरा कॉम्पोनेंट डेटा, उस इकाई से ज़रूर मेल खाना चाहिए जिसमें उसे शामिल किया गया है.

कॉम्पोनेंट में शामिल किया गया

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

XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID अपने डेटा के लिए XrSpatialEntityIdEXT स्ट्रक्चर का इस्तेमाल करता है. इससे, शामिल की गई इकाई के आईडी का पता चलता है.

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

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

typedef struct XrSpatialComponentSubsumedByListANDROID {
    XrStructureType          type;
    void*                    next;
    uint32_t                 subsumedUniqueIdCount;
    XrSpatialEntityIdEXT*    subsumedUniqueIds;
} XrSpatialComponentSubsumedByListANDROID;

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

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

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

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

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

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

  • XrSpatialComponentSubsumedByListANDROID का इस्तेमाल करने से पहले, XR_ANDROID_spatial_component_subsumed_by एक्सटेंशन को चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID होनी चाहिए
  • next NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • subsumedUniqueIds को subsumedUniqueIdCount XrSpatialEntityIdEXT वैल्यू के कलेक्शन का पॉइंटर होना चाहिए
  • subsumedUniqueIdCount पैरामीटर की वैल्यू, 0 से ज़्यादा होनी चाहिए

कॉन्फ़िगरेशन

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

शामिल की गई इकाइयों को फ़िल्टर करना

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

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

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

  • type, इस स्ट्रक्चर का XrStructureType है.
  • next, NULL है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है.

ऐप्लिकेशन, XrSpatialDiscoverySnapshotCreateInfoEXT की next चेन में XrSpatialDiscoveryUniqueEntitiesFilterANDROID को शामिल कर सकता है, ताकि ऐसी इकाइयों के साथ स्नैपशॉट मिल सके जो किसी दूसरी इकाई में शामिल नहीं हैं.

अगर ऐप्लिकेशन XrSpatialDiscoveryUniqueEntitiesFilterANDROID को XrSpatialDiscoverySnapshotCreateInfoEXT से जोड़ते हैं और XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes में XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID कॉम्पोनेंट शामिल करते हैं, तो रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए .

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

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

कोड का उदाहरण

प्लेन ट्रैकिंग की सुविधा को कॉन्फ़िगर करना

यहां दिए गए कोड के उदाहरण से पता चलता है कि XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT की सुविधा के साथ स्पेशल कॉन्टेक्स्ट कैसे बनाया जाता है. यह सुविधा, XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID के साथ काम करती है.

// Check runtime supported capabilities
uint32_t capabilityCount = 0;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));

if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT) == capabilities.end()) {
  return;
}

// Enumerate supported components for plane tracking capability
XrSpatialCapabilityComponentTypesEXT planeComponents{
  .type = XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT,
};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &planeComponents));
std::vector<XrSpatialComponentTypeEXT> planeCapabilityComponents(planeComponents.componentTypeCountOutput);
planeComponents.componentTypeCapacityInput = planeCapabilityComponents.size();
planeComponents.componentTypes = planeCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, &planeComponents));

const auto supportsComponent = [&planeCapabilityComponents](XrSpatialComponentTypeEXT component) {
  return std::find(planeCapabilityComponents.begin(), planeCapabilityComponents.end(), component) != planeCapabilityComponents.end();
};


std::vector<XrSpatialComponentTypeEXT> planeTrackingComponents {
  XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
  XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
};

if (supportsComponent(XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID)) {
  planeTrackingComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID);
}

// Create capability config for plane tracking
XrSpatialCapabilityConfigurationPlaneTrackingEXT planeTrackingConfig {
  .type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT,
  .next = nullptr,
  .capability = XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT,
  .enabledComponentCount = (uint32_t)planeTrackingComponents.size(),
  .enabledComponents = planeTrackingComponents.data(),
};

// Create spatial context
std::vector<const XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<const XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&planeTrackingConfig));

XrSpatialContextCreateInfoEXT contextCreateInfo {
  .type = XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT,
  .next = nullptr,
  .capabilityConfigCount = (uint32_t)capabilityConfigs.size(),
  .capabilityConfigs = capabilityConfigs.data(),
};

CHK_XR(xrCreateSpatialContextAsyncEXT(session, &contextCreateInfo, &future))

// Completes creating spatial context
XrCreateSpatialContextCompletionEXT contextCompletion{
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};

CHK_XR(xrCreateSpatialContextCompleteEXT(session, future, &contextCompletion))

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

यहां दिए गए उदाहरण कोड से पता चलता है कि XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT के साथ कॉन्फ़िगर किए गए कॉन्टेक्स्ट से, XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID कॉम्पोनेंट डेटा को कैसे क्वेरी किया जाए.

// previously created
XrSpatialSnapshotEXT snapshot;

// Query subsumed_by components
std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
  XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
};

XrSpatialComponentDataQueryConditionEXT queryCond {
  .type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT,
  .componentTypeCount = 1,
  .componentTypes     = enabledComponents.data(),
};

XrSpatialComponentDataQueryResultEXT queryResult {
  .type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
};

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

// Query again with allocated memory
std::vector<XrSpatialEntityIdEXT> subsumedUniqueIds;
subsumedUniqueIds.resize(queryResult.entityIdCountOutput);
XrSpatialComponentSubsumedByListANDROID subsumedByList {
  .type = XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID,
  .subsumedUniqueIdCount = static_cast<uint32_t>(subsumedUniqueIds.size()),
  .subsumedUniqueIds = subsumedUniqueIds.data(),
};

queryResult.next = &subsumedByList;
CHK_XR(xrQuerySpatialComponentDataEXT(
           snapshot, &queryCond, &queryResult));

for (uint32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
  // Plane was subsumed, remove it from processing logic
  // removeEntityFromProcessingLogic(queryResult.entityIds[i], /*replaceWith=*/ subsumedByList.subsumedUniqueIds[i]);
}

// Cleanup
xrDestroySpatialSnapshotEXT(snapshot);

शामिल की गई इकाइयों को फ़िल्टर करना

यहां दिए गए उदाहरण कोड में, फ़िल्टर का इस्तेमाल करके डिस्कवरी स्नैपशॉट से XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID कॉम्पोनेंट वाली इकाइयों को फ़िल्टर करने का तरीका बताया गया है. साथ ही, इसमें शामिल इकाइयों के इकाई आईडी के बारे में क्वेरी करने का तरीका भी बताया गया है.

// Init filter
XrSpatialDiscoveryUniqueEntitiesFilterANDROID filter {
  .type = XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID,
};

// Chain filter to the snapshot create info
// WARNING: Chaining the filter while include subsumed_by component in the
// componentTypes is invalid
XrSpatialDiscoverySnapshotCreateInfoEXT discoverySnapshotCreateInfo {
  .type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
  .next = &filter
};

XrFutureEXT future {XR_NULL_FUTURE_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &discoverySnapshotCreateInfo, &future))

waitUntilReady(future);

// Complete async operation.
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
  createSnapshotCompletionInfo {
    .type   = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT,
    .baseSpace = space,
    .time      = updateTime,
    .future    = future,
  };

XrCreateSpatialDiscoverySnapshotCompletionEXT completion {
  .type = XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT,
};

CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(
           spatialContext, &createSnapshotCompletionInfo,
           &completion));

if(completion.futureResult != XR_SUCCESS) return;

// Subsumed entities has already been filtered out in this snapshot,
// now query the various components of the entities.

// Cleanup
xrDestroySpatialSnapshotEXT(completion.snapshot);

नए स्ट्रक्चर

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

  • XR_ANDROID_SPATIAL_COMPONENT_SUBSUMED_BY_EXTENSION_NAME
  • XR_ANDROID_spatial_component_subsumed_by_SPEC_VERSION
  • XrSpatialComponentTypeEXT को एक्सटेंड करना :

    • XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
  • XrStructureType को एक्सटेंड करना :

    • XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID
    • XR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROID

समस्याएं

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

  • पहला संशोधन, 19-11-2025 (ब्रायन चेन)

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