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입니다.
  • nextNULL이거나 구조 체인의 다음 구조를 가리키는 포인터입니다.
  • properties는 확장 프로그램 이름이 있는 XrExtensionProperties입니다.
  • isSupported는 확장 프로그램이 현재 시스템에서 지원되는지 여부를 나타내는 불리언입니다.

유효한 사용 (암시적)

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조 체인의 다음 구조를 가리키는 포인터입니다.

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

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

애플리케이션이 이 이벤트를 수신하면 xrEnumerateSystemExtensionPropertiesANDROID를 다시 호출하여 최신 시스템 확장 프로그램 속성을 확인하고 필요에 따라 이러한 확장 프로그램과 연결된 트래커를 만들거나 삭제해야 합니다.

유효한 사용 (암시적)

xrEnumerateSystemExtensionPropertiesANDROID 함수는 다음과 같이 정의됩니다.

XrResult xrEnumerateSystemExtensionPropertiesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    propertyCapacityInput,
    uint32_t*                                   propertyCountOutput,
    XrSystemExtensionPropertiesANDROID*         properties);

매개변수 설명

  • instance는 유효한 XrInstance입니다 .
  • systemId는 확장 프로그램 속성을 가져올 시스템의 유효한 sliink:XrSystemId입니다.
  • propertyCapacityInputproperties 배열의 용량이거나 필요한 용량을 가져오는 요청을 나타내는 0입니다.
  • propertyCountOutput은 요청된 확장 프로그램 속성의 수입니다.
  • propertiesXrSystemExtensionPropertiesANDROID 구조의 배열입니다. 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)

    • 첫 번째 확장 프로그램 버전입니다.