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 এর জন্য একটি নতুন কম্পোনেন্ট প্রদান করে, যা subsumed_by প্রপার্টিটিকে প্রকাশ করে।
যখন রানটাইম দুটি ট্র্যাক করা প্লেন যে আসলে একই, তা শনাক্ত করার জন্য পর্যাপ্ত পরিবেশগত তথ্য সংগ্রহ করে, তখন প্লেন দুটির একটির আইডিযুক্ত subsumed_by কম্পোনেন্টটি অন্যটির সাথে সংযুক্ত করা হবে।
এই এক্সটেনশনটি একটি নতুন ফিল্টারও যুক্ত করে, যা অ্যাপ্লিকেশনটি XrSpatialDiscoverySnapshotCreateInfoEXT- এর সাথে চেইন করে সেইসব এনটিটি ফিল্টার করে বাদ দিতে পারে , যেগুলোর সাথে subsumed_by কম্পোনেন্ট সংযুক্ত আছে।
অনুমতি
অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ম্যানিফেস্টে অবশ্যই 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 সংযুক্ত এনটিটির সমস্ত কম্পোনেন্ট ডেটা অবশ্যই এটিকে অন্তর্ভুক্তকারী এনটিটির ডেটার সাথে অভিন্ন হতে হবে।
উপাদানের অন্তর্ভুক্ত
উপাদান ডেটা
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- এর মধ্যে থাকা স্পেশিয়াল এনটিটিগুলোর subsumed_by কম্পোনেন্ট কোয়েরি করতে পারে ।
যদি XrSpatialComponentDataQueryResultEXT :: next এর পরবর্তী চেইনে XR_TYPE_SPATIAL_COMPONENT_SUBSUMED_BY_LIST_ANDROID থাকে, কিন্তু XrSpatialComponentDataQueryConditionEXT :: componentTypes এ XR_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 :: componentTypes এ XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT এনুমারেট করা থাকে, তাহলে অ্যাপ্লিকেশনটি এই কম্পোনেন্টকে সমর্থনকারী ক্যাপাবিলিটির XrSpatialCapabilityConfigurationBaseHeaderEXT ডিরাইভড স্ট্রাকচারের XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents লিস্টে এনুমটি অন্তর্ভুক্ত করার মাধ্যমে এটিকে সক্রিয় করতে পারে ।
ফিল্টার অন্তর্ভুক্ত সত্তা
XrSpatialDiscoveryUniqueEntitiesFilterANDROID কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialDiscoveryUniqueEntitiesFilterANDROID {
XrStructureType type;
const void* next;
} XrSpatialDiscoveryUniqueEntitiesFilterANDROID;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার।
অন্য কোনো এনটিটির অন্তর্ভুক্ত নয় এমন এনটিটিসহ একটি স্ন্যাপশট পেতে, অ্যাপ্লিকেশনটি XrSpatialDiscoverySnapshotCreateInfoEXT- এর পরবর্তী চেইনে XrSpatialDiscoveryUniqueEntitiesFilterANDROID অন্তর্ভুক্ত করতে পারে ।
যদি অ্যাপ্লিকেশনগুলি XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes -এ XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID কম্পোনেন্টটি অন্তর্ভুক্ত করার সময় XrSpatialDiscoveryUniqueEntitiesFilterANDROID- কে XrSpatialDiscoverySnapshotCreateInfoEXT- এর সাথে চেইন করে, তাহলে রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
যদি অ্যাপ্লিকেশনটি XrSpatialDiscoveryUniqueEntitiesFilterANDROID- কে XrSpatialDiscoverySnapshotCreateInfoEXT- এর সাথে চেইন করে, কিন্তু XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes এ কোনো কম্পোনেন্ট তালিকাভুক্ত না করে, তাহলে রানটাইমকে অবশ্যই স্ন্যাপশটে সেই সমস্ত স্পেশিয়াল এনটিটি অন্তর্ভুক্ত করতে হবে যাদের কম্পোনেন্টের সেটটি XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents এ স্পেশিয়ালকনটেক্সট (spatialContext)-এর জন্য কনফিগার করা ক্যাপাবিলিটিগুলোর জন্য তালিকাভুক্ত করা হয়েছে; তবে সেইসব এনটিটি এর ব্যতিক্রম হবে যাদের XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID কম্পোনেন্টটি রয়েছে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialDiscoveryUniqueEntitiesFilterANDROID ব্যবহার করার আগে
XR_ANDROID_spatial_component_subsumed_byএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_DISCOVERY_UNIQUE_ENTITIES_FILTER_ANDROIDহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
উদাহরণ কোড
প্লেন ট্র্যাকিং ক্ষমতা কনফিগার করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে 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' কম্পোনেন্ট সংযুক্ত এনটিটিগুলোকে ফিল্টার করে বাদ দিতে হয়, এবং সেইসাথে অন্তর্ভুক্তকারী এনটিটিগুলোর এনটিটি আইডি কোয়েরি করতে হয়।
// 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);
নতুন কাঠামো
XrSpatialComponentDataQueryResultEXT- এর সম্প্রসারণ:
XrSpatialDiscoverySnapshotCreateInfoEXT- এর সম্প্রসারণ:
নতুন এনাম ধ্রুবক
-
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
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন ১, ২০২৫-১১-১৯ (ব্রায়ান চেন)
- প্রাথমিক সম্প্রসারণের বিবরণ।