XR_ANDROID_spatial_component_subsumed_by

নামের স্ট্রিং

XR_ANDROID_spatial_component_subsumed_by

এক্সটেনশনের ধরন

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

রেজিস্টার করা এক্সটেনশন নম্বর

792

সংশোধন

1

অনুমোদনের স্ট্যাটাস

অনুমোদিত নয়

এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি

XR_EXT_spatial_entity
এবং
XR_EXT_spatial_plane_tracking

শেষবার পরিবর্তন করার তারিখ

2025-08-19

IP স্ট্যাটাস

IP সংক্রান্ত কোনও দাবি নেই।

কন্ট্রিবিউটর

ব্রায়ান চেন, 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 অনুমতিকে বিপজ্জনক অনুমতি হিসেবে বিবেচনা করা হয়।

(সুরক্ষা লেভেল: বিপজ্জনক)

রানটাইম সংক্রান্ত সহায়তা

রানটাইম যদি একটি প্লেনকে অন্য প্লেনে অন্তর্ভুক্ত করতে সক্ষম হয়, তাহলে এটি অবশ্যই XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID-কে XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT ক্ষমতার জন্য একটি সমর্থিত উপাদান হিসাবে গণনা করে এটি নির্দেশ করবে xrEnumerateSpatialCapabilityComponentTypesEXT-এ।

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 কম্পোনেন্ট কোয়েরি করতে পারে।

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_CAPABILITY_PLANE_TRACKING_EXT ক্ষমতার জন্য XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID যদি XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ এনিউমারেট করা থাকে, তাহলে অ্যাপ্লিকেশনটি XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এর তালিকায় enum অন্তর্ভুক্ত করে এটি চালু করতে পারবে। এই তালিকাটি এই কম্পোনেন্টকে সাপোর্ট করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত স্ট্রাকচারের তালিকা।

সাবসিউম করা এন্টিটি ফিল্টার করুন

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-এ কোনও কম্পোনেন্ট তালিকাভুক্ত না করে, তাহলে রানটাইমকে অবশ্যই স্ন্যাপশটে সমস্ত স্পেশিয়াল এন্টিটি অন্তর্ভুক্ত করতে হবে, যেগুলিতে 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

ইস্যু

ভার্সনের ইতিহাস

  • রিভিশন ১, ১৯-১১-২০২৫ (ব্রায়ান চেন)

    • এক্সটেনশনের প্রাথমিক বিবরণ।