XR_ANDROID_enumerate_system_extension_properties
名前文字列
XR_ANDROID_enumerate_system_extension_properties
拡張機能の種類
インスタンス拡張機能
登録済み拡張機能番号
725
リビジョン
1
承認ステータス
未承認
拡張機能とバージョンの依存関係
最終更新日
2026-02-11
IP ステータス
既知の IP クレームはありません。
寄与者
Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google
概要
この拡張機能を使用すると、現在のシステム構成でサポートされている拡張機能をアプリケーションで判別できます。拡張機能がランタイムでサポートされていても、現在のシステム ハードウェアではサポートされていない可能性 があります。
XrSystemExtensionPropertiesANDROID 構造体は次のように定義されます。
typedef struct XrSystemExtensionPropertiesANDROID {
XrStructureType type;
void* next;
XrExtensionProperties properties;
XrBool32 isSupported;
} XrSystemExtensionPropertiesANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。propertiesは、XrExtensionProperties で、拡張機能名を含みます。isSupportedは、拡張機能が現在システムでサポートされているかどうかを示すブール値です。
有効な使用方法(暗黙的)
- XrSystemExtensionPropertiesANDROID を使用する前に、
XR_ANDROID_enumerate_system_extension_properties拡張機能を有効にする必要があります 。 -
typeはXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID**である必要があります** -
nextはNULLまたは構造体チェーン内の次の構造体への有効なポインタ**である必要があります**
XrEventDataSystemPropertiesChangedANDROID 構造体は次のように定義されます。
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。
システム拡張機能のプロパティが変更された場合、ランタイムはこのイベントをキューに入れる必要があります 。たとえば、新しい周辺機器が接続され、新しい機能が有効になった場合などです。
新しい XrEventDataSystemPropertiesChangedANDROID イベントがキューに入れられるまで、xrEnumerateSystemExtensionPropertiesANDROID のすべての呼び出しで同じ値が返される必要があります 。
アプリケーションがこのイベントを受信したら、再度 xrEnumerateSystemExtensionPropertiesANDROID を呼び出して、最新のシステム拡張機能のプロパティを判別し、必要に応じて、これらの拡張機能に関連付けられたトラッカーを作成または破棄する必要があります。
有効な使用方法(暗黙的)
-
XR_ANDROID_enumerate_system_extension_properties拡張機能を XrEventDataSystemPropertiesChangedANDROID を使用する前に有効にする必要があります -
typeはXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID**である必要があります** -
nextはNULLまたは構造体チェーン内の次の構造体への有効なポインタ**である必要があります**
xrEnumerateSystemExtensionPropertiesANDROID 関数は次のように定義されます。
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
パラメータの説明
instanceは有効な XrInstance です。systemIdは、拡張機能のプロパティを取得するシステムの有効な sliink:XrSystemId です。propertyCapacityInputは、properties配列の容量です。必要な容量を取得するリクエストを示す場合は 0 です。propertyCountOutputは、リクエストされた拡張機能のプロパティの数です。propertiesは、XrSystemExtensionPropertiesANDROID 構造体の配列です。propertyCapacityInputが 0 の場合、NULLにできます 。- 必要な
propertiesサイズの取得について詳しくは、バッファサイズ パラメータのセクションをご覧ください。
有効な使用方法(暗黙的)
-
XR_ANDROID_enumerate_system_extension_properties拡張機能を xrEnumerateSystemExtensionPropertiesANDROID を呼び出す前に有効にする必要があります。 -
instanceは有効な XrInstance ハンドルである必要があります。 -
propertyCountOutputはuint32_t値へのポインタ**である必要があります** 。 -
propertyCapacityInputが0でない場合、propertiesはpropertyCapacityInputXrSystemExtensionPropertiesANDROID 構造体の配列へのポインタである必要があります 。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
例
XrInstance instance; // XrInstance previously created
XrSystemId systemId; // XrSystemId from a previously created instance
PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;
// Poll events for recommended resolution changes.
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID:
// It's possible that the system was lost and a new id will be returned
XrSystemId newSystemId;
XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
if(XR_SUCCESS == xrGetSystem(instance, &getInfo, &newSystemId)) {
if(systemId != newSystemId) {
//Do things like recreate the session
systemId = newSystemId;
}
}
// Enumerate the extensions to see which ones are now supported based on hardware changes
uint32_t extensionsCount;
xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);
std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
{.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});
XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
instance,
systemId,
extensionsCount,
&extensionsCount,
properties.data()
);
// Do something based on which extensions are now supported by the system
break;
}
}
PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;
XrInstance instance;
XrInstanceCreateInfo createInfo = {XR_TYPE_INSTANCE_CREATE_INFO};
// Initialize the createInfo with appropriate values for the application
CHK_XR(xrCreateInstance(&createInfo, &instance));
// Get the systemId for the system.
XrSystemId systemId;
XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
CHK_XR(xrGetSystem(instance, &getInfo, &systemId));
// Enumerate the system extension properties.
uint32_t extensionsCount;
xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);
std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
{.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});
XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
instance,
systemId,
extensionsCount,
&extensionsCount,
properties.data()
);
問題
変更履歴
リビジョン 1、2026-03-17(Kenny Vercaemer)
- 拡張機能の初期バージョン。