XR_ANDROID_enumerate_system_extension_properties

Cadena de nombre

XR_ANDROID_enumerate_system_extension_properties

Tipo de extensión

Extensión de instancia

Número de extensión registrada

725

Revisión

1

Estado de ratificación

No ratificado

Dependencias de extensión y versión

OpenXR 1.0

Fecha de última modificación

2026-02-11

Estado de IP

No se conocen reclamos de IP.

Colaboradores

Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google

Descripción general

Esta extensión permite que las aplicaciones determinen qué extensiones son compatibles con la configuración actual del sistema. Incluso si el tiempo de ejecución admite una extensión, es posible que el hardware del sistema actual no la admita.

La estructura XrSystemExtensionPropertiesANDROID se define de la siguiente manera:

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

Descripciones de miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructura.
  • properties es el XrExtensionProperties con el nombre de la extensión.
  • isSupported es un valor booleano que indica si el sistema admite la extensión actualmente.

Uso válido (implícito)

La estructura XrEventDataSystemPropertiesChangedANDROID se define de la siguiente manera:

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

Descripciones de miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructura.

El tiempo de ejecución debe poner en cola este evento cuando cambien las propiedades de la extensión del sistema. Por ejemplo, cuando se conectan periféricos nuevos que habilitan funciones nuevas.

Todas las llamadas a xrEnumerateSystemExtensionPropertiesANDROID deben mostrar los mismos valores hasta que se ponga en cola un nuevo evento XrEventDataSystemPropertiesChangedANDROID.

Cuando una aplicación recibe este evento, debe volver a llamar a xrEnumerateSystemExtensionPropertiesANDROID para determinar las propiedades más recientes de la extensión del sistema, y, si es necesario, crear o destruir los objetos de seguimiento asociados con esas extensiones.

Uso válido (implícito)

La función xrEnumerateSystemExtensionPropertiesANDROID se define de la siguiente manera:

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

Descripciones de parámetros

  • instance es un XrInstance válido .
  • systemId es un sliink:XrSystemId válido del sistema para recuperar las propiedades de la extensión.
  • propertyCapacityInput es la capacidad del array properties o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • propertyCountOutput es la cantidad de propiedades de extensión solicitadas.
  • properties es un array de XrSystemExtensionPropertiesANDROID estructuras. Puede ser NULL si propertyCapacityInput es 0.
  • Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de la recuperación del tamaño properties requerido.

Uso válido (implícito)

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Ejemplo

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()
);

Problemas

Historial de versiones

  • Revisión 1, 17 de marzo de 2026 (Kenny Vercaemer)

    • Versión inicial de la extensión