XR_ANDROID_enumerate_system_extension_properties

Name String

XR_ANDROID_enumerate_system_extension_properties

拡張機能の種類

インスタンス拡張

登録済みの内線番号

725

リビジョン

1

承認ステータス

未批准

拡張機能とバージョンの依存関係

OpenXR 1.0

最終更新日

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 は、拡張機能が現在システムでサポートされているかどうかを示すブール値です。

有効な使用方法(暗黙的)

XrEventDataSystemPropertiesChangedANDROID 構造体は次のように定義されます。

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

メンバーの説明

  • type は、この構造の XrStructureType です。
  • next は、NULL または構造体チェーン内の次の構造体へのポインタです。

ランタイムは、システム拡張プロパティが変更されたときに、このイベントをキューに追加しなければなりません。たとえば、新しい周辺機器が接続されて新しい機能が有効になった場合です。

xrEnumerateSystemExtensionPropertiesANDROID のすべての呼び出しは、新しい XrEventDataSystemPropertiesChangedANDROID イベントがキューに追加されるまで、同じ値を返さなければなりません。

アプリケーションがこのイベントを受信すると、xrEnumerateSystemExtensionPropertiesANDROID を再度呼び出して最新のシステム拡張プロパティを特定し、必要に応じてそれらの拡張機能に関連付けられたトラッカーを作成または破棄する必要があります。

有効な使用方法(暗黙的)

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 は propertyCapacityInput XrSystemExtensionPropertiesANDROID 構造の配列へのポインタでなければなりません。

戻りコード

成功

  • XR_SUCCESS

失敗

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SYSTEM_INVALID
  • XR_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)

    • 拡張機能の初期バージョン。