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 के लिए एक नया कॉम्पोनेंट उपलब्ध कराता है, ताकि subsumed_by प्रॉपर्टी को दिखाया जा सके.

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

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

अनुमतियां

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

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

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

अगर रनटाइम, subumed_by के साथ काम करता है, तो उसमें प्लेन ट्रैकिंग की सुविधा ज़रूर होनी चाहिए. साथ ही, xrEnumerateSpatialCapabilitiesEXT में XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT की गिनती करके, इसकी जानकारी देनी चाहिए.

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

XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID अटैच की गई इकाई का सारा कॉम्पोनेंट डेटा, उसे शामिल करने वाली इकाई के डेटा से मिलता-जुलता होना चाहिए.

Subsumed By Component

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

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 में मौजूद स्पैटियल एंटिटी के subsumed_by कॉम्पोनेंट के बारे में क्वेरी कर सकता है. इसके लिए, उसे XrSpatialComponentDataQueryResultEXT की अगली चेन में XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID जोड़ना होगा.

अगर XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID, XrSpatialComponentDataQueryResultEXT :: next की अगली चेन में है, लेकिन XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID को XrSpatialComponentDataQueryConditionEXT :: componentTypes में शामिल नहीं किया गया है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_VALIDATION_FAILURE वापस भेजना ज़रूरी है .

अगर subsumedUniqueIdCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput से कम है, तो रनटाइम को xrQuerySpatialComponentDataEXT से XR_ERROR_SIZE_INSUFFICIENT वापस लाना ज़रूरी है .

मान्य इस्तेमाल (इंप्लिसिट)

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

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

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

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

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

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

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

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

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

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

मान्य इस्तेमाल (इंप्लिसिट)

कोड का उदाहरण

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

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

// Check runtime supported capabilities
uint32_t capabilityCount;
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;
}

std::vector<XrSpatialComponentTypeEXT> planeTrackingComponents {
  XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
  XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT,
  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 के साथ कॉन्फ़िगर किए गए कॉन्टेक्स्ट से, subsumed_by कॉम्पोनेंट के डेटा को क्वेरी करने का तरीका बताया गया है .

// Create Discovery Snapshot
XrSpatialDiscoverySnapshotCreateInfoEXT discoverySnapshotCreateInfo {
  .type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
};

CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT (
spatialContext, &discoverySnapshotCreateInfo, &future));

// Poll the state till snapshot it's ready.
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 {
  XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};

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

if(completion.futureResult != XR_SUCCESS) return;

// 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(
           completion.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(
           completion.snapshot, &queryCond, &queryResult));

std::vector<XrSpatialEntityEXT> subsumedEntities;
for(uint32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
    // access planes[i] for merged plane id
    XrSpatialEntityIdEXT entityId = queryResult.entityIds[i];
    XrSpatialEntityIdEXT subsumedUniqueId = subsumedUniqueIds[i];

    // create handle via entityId
  XrSpatialEntityFromIdCreateInfoEXT entityCreateInfo {
    .type = XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT,
    .entityId = entityId,
  };

  XrSpatialEntityEXT entity = XR_NULL_HANDLE;
  xrCreateSpatialEntityFromIdEXT(spatialContext, &entityCreateInfo, &entity);

  subsumedEntities.push_back(entity);
}

// Cleanup
xrDestroySpatialSnapshotEXT(completion.snapshot);

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

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

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

// Chain filter to the snapshot create info
// WARNING: Chain 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
};

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 {
  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
// Bounded2D to render subsuming planes
std::vector<XrSpatialComponentTypeEXT> queryComponents {
  XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};

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

XrSpatialComponentDataQueryResultEXT queryResult {
  .type = XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT,
};

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

// Chain Bounded2D list
std::vector<XrSpatialBounded2DDataEXT> bounded2dData;
bounded2dData.resize(queryResult.entityIdCountOutput);

XrSpatialComponentBounded2DListEXT bounded2dList {
  .type = XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT,
  .boundCount = static_cast<uint32_t>(bounded2dData.size()),
  .bounds = bounded2dData.data(),
};

// Query again
queryResult.next = &bounded2dList;
CHK_XR(xrQuerySpatialComponentDataEXT(
           completion.snapshot, &queryCond, &queryResult));

std::vector<XrSpatialEntityEXT> subsumingPlanes;
for(uint32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
  // access planes[i] for merged plane id
  XrSpatialEntityIdEXT entityId = queryResult.entityIds[i];

  // create handle via entityId.
  XrSpatialEntityFromIdCreateInfoEXT entityCreateInfo {
    .type = XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT,
    .entityId = entityId,
  };

  XrSpatialEntityEXT entity = XR_NULL_HANDLE;
  xrCreateSpatialEntityFromIdEXT(spatialContext, &entityCreateInfo, &entity);

  subsumingPlanes.push_back(entity);
}

// 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 (ब्रायन चेन)

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