XR_ANDROID_enumerate_system_extension_properties

이름 문자열

XR_ANDROID_enumerate_system_extension_properties

확장 프로그램 유형

인스턴스 확장 프로그램

등록된 내선 번호

725

버전

1

승인 상태

비준되지 않음

확장 프로그램 및 버전 종속 항목

OpenXR 1.0

최종 수정일

2026-02-11

IP 상태

알려진 IP 소유권 주장이 없습니다.

도움을 주신 분들

스펜서 퀸, Google
니하브 자인, Google
케니 베르카머, Google

개요

이 확장 프로그램을 사용하면 애플리케이션에서 현재 시스템 구성에서 지원하는 확장 프로그램을 확인할 수 있습니다. 런타임에서 확장 프로그램을 지원하더라도 현재 시스템 하드웨어에서 지원하지 않을 수 있습니다.

XrSystemExtensionPropertiesANDROID 구조는 다음과 같이 정의됩니다.

typedef struct XrSystemExtensionPropertiesANDROID {
    XrStructureType          type;
    void*                    next;
    XrExtensionProperties    properties;
    XrBool32                 isSupported;
} XrSystemExtensionPropertiesANDROID;

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.
  • properties는 확장 프로그램 이름이 있는 XrExtensionProperties입니다.
  • isSupported는 현재 시스템에서 확장 프로그램을 지원하는지 여부를 나타내는 불리언입니다.

올바른 사용 (암시적)

  • XR_ANDROID_enumerate_system_extension_properties 확장 프로그램은 XrSystemExtensionPropertiesANDROID를 사용하기 전에 사용 설정해야 합니다.
  • type은(는) XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID여야 합니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.

XrEventDataSystemPropertiesChangedANDROID 구조는 다음과 같이 정의됩니다.

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

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.

런타임은 시스템 확장 프로그램 속성이 변경되면 이 이벤트를 큐에 추가해야 합니다(MUST). 예를 들어 새 주변기기가 연결되어 새 기능이 사용 설정되는 경우입니다.

xrEnumerateSystemExtensionPropertiesANDROID에 대한 모든 호출은 새 XrEventDataSystemPropertiesChangedANDROID 이벤트가 큐에 추가될 때까지 동일한 값을 반환해야 합니다(must).

애플리케이션은 이 이벤트를 수신하면 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 (케니 베르카머)

    • 초기 확장 프로그램 버전입니다.