XR_ANDROID_enumerate_system_extension_properties

名前文字列

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 または構造体チェーン内の次の構造体へのポインタです。

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

新しい XrEventDataSystemPropertiesChangedANDROID イベントがキューに入れられるまで、xrEnumerateSystemExtensionPropertiesANDROID のすべての呼び出しで同じ値が返される必要があります

アプリケーションがこのイベントを受信したら、再度 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 値へのポインタ**である必要があります** 。
  • propertyCapacityInput0 でない場合、propertiespropertyCapacityInput 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)

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