XR_ANDROID_spatial_component_subsumed_by

নাম স্ট্রিং

XR_ANDROID_spatial_component_subsumed_by

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

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

নিবন্ধিত এক্সটেনশন নম্বর

৭৯২

সংশোধন

অনুমোদনের অবস্থা

অনুমোদিত নয়

এক্সটেনশন এবং সংস্করণ নির্ভরতা

XR_EXT_spatial_entity
এবং
XR_EXT_spatial_plane_tracking

সর্বশেষ সংশোধনের তারিখ

২০২৫-০৮-১৯

আইপি স্ট্যাটাস

কোনো জ্ঞাত আইপি দাবি নেই।

অবদানকারীরা

ব্রায়ান চেন, গুগল
কাইল চেন, গুগল
লেভানা চেন, গুগল
নিহাব জৈন, গুগল
স্পেন্সার কুইন, গুগল

সংক্ষিপ্ত বিবরণ

এই এক্সটেনশনটি 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.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 এর একটি অ্যারে।

অ্যাপ্লিকেশনটি XrSpatialComponentDataQueryResultEXT- এর পরবর্তী চেইনে XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID যোগ করে একটি XrSpatialSnapshotEXT- এর মধ্যে থাকা স্পেশিয়াল এনটিটিগুলোর XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID কম্পোনেন্ট কোয়েরি করতে পারে

যদি XrSpatialComponentDataQueryResultEXT :: next এর পরবর্তী চেইনে XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID থাকে, কিন্তু XrSpatialComponentDataQueryConditionEXT :: componentTypesXR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।

যদি 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 :: componentTypesXR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT এনুমারেট করা থাকে, তাহলে অ্যাপ্লিকেশনটি এই কম্পোনেন্টকে সমর্থনকারী ক্যাপাবিলিটির XrSpatialCapabilityConfigurationBaseHeaderEXT ডিরাইভড স্ট্রাকচারের XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents লিস্টে এনুমটি অন্তর্ভুক্ত করার মাধ্যমে এটিকে সক্রিয় করতে পারে

ফিল্টার অন্তর্ভুক্ত সত্তা

XrSpatialDiscoveryUniqueEntitiesFilterANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

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

সদস্যদের বিবরণ

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

অন্য কোনো এনটিটির অন্তর্ভুক্ত নয় এমন এনটিটিসহ একটি স্ন্যাপশট পেতে, অ্যাপ্লিকেশনটি XrSpatialDiscoverySnapshotCreateInfoEXT- এর next চেইনে XrSpatialDiscoveryUniqueEntitiesFilterANDROID অন্তর্ভুক্ত করতে পারে

যদি অ্যাপ্লিকেশনগুলি XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes -এ XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID কম্পোনেন্টটি অন্তর্ভুক্ত করার সময় XrSpatialDiscoveryUniqueEntitiesFilterANDROID- কে XrSpatialDiscoverySnapshotCreateInfoEXT- এর সাথে চেইন করে, তাহলে রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।

যদি অ্যাপ্লিকেশনটি XrSpatialDiscoveryUniqueEntitiesFilterANDROID- কে XrSpatialDiscoverySnapshotCreateInfoEXT- এর সাথে চেইন করে, কিন্তু XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes এ কোনো কম্পোনেন্ট তালিকাভুক্ত না করে, তাহলে রানটাইমকে অবশ্যই স্ন্যাপশটে সেই সমস্ত স্পেশিয়াল এনটিটি অন্তর্ভুক্ত করতে হবে যাদের কম্পোনেন্টের সেটটি XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentsspatialContext )-এর জন্য কনফিগার করা ক্যাপাবিলিটিগুলোর জন্য তালিকাভুক্ত করা হয়েছে; তবে সেইসব এনটিটি এর ব্যতিক্রম হবে যাদের 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);

নতুন কাঠামো

নতুন এনাম ধ্রুবক

  • 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

সমস্যা

সংস্করণ ইতিহাস

  • সংশোধন ১, ২০২৫-১১-১৯ (ব্রায়ান চেন)

    • প্রাথমিক সম্প্রসারণের বিবরণ।