XR_ANDROID_enumerate_system_extension_properties

Cadena de nombre

XR_ANDROID_enumerate_system_extension_properties

Tipo de extensión

Extensión de la instancia

Número de extensión registrado

725

Revisión

1

Estado de ratificación

No se ratificó

Dependencias de extensiones y versiones

OpenXR 1.0

Fecha de la última modificación

2026-02-11

Estado de la IP

No hay reclamos conocidos por 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 entorno 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 los miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • 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 los miembros

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

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 nuevas funciones.

Todas las llamadas a xrEnumerateSystemExtensionPropertiesANDROID deben devolver 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 de extensión del sistema más recientes y, posiblemente, crear o destruir los dispositivos de seguimiento asociados con esas extensiones según sea necesario.

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 los parámetros

  • instance es un XrInstance válido .
  • systemId es un sliink:XrSystemId válido del sistema para el que se recuperarán las propiedades de 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 estructuras XrSystemExtensionPropertiesANDROID. 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 cómo recuperar el tamaño de 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, 2026-03-17 (Kenny Vercaemer)

    • Es la versión inicial de la extensión.