XR_ANDROID_enumerate_system_extension_properties

Stringa del nome

XR_ANDROID_enumerate_system_extension_properties

Tipo di estensione

Estensione dell'istanza

Numero di estensione registrato

725

Revisione

1

Stato di ratifica

Non ratificato

Dipendenze di estensioni e versioni

OpenXR 1.0

Data dell'ultima modifica

2026-02-11

Stato IP

Nessuna rivendicazione IP nota.

Collaboratori

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

Panoramica

Questa estensione consente alle applicazioni di determinare quali estensioni sono supportate dalla configurazione di sistema corrente. Anche se un'estensione è supportata dal runtime, potrebbe non essere supportata dall'hardware di sistema attuale.

La struttura XrSystemExtensionPropertiesANDROID è definita come segue:

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

Descrizioni dei membri

  • type è l'XrStructureType di questa struttura.
  • next è NULL o un puntatore alla struttura successiva in una catena di strutture.
  • properties è l'XrExtensionProperties con il nome dell'estensione.
  • isSupported è un valore booleano che indica se l'estensione è attualmente supportata dal sistema.

Utilizzo valido (implicito)

La struttura XrEventDataSystemPropertiesChangedANDROID è definita come segue:

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

Descrizioni dei membri

  • type è l'XrStructureType di questa struttura.
  • next è NULL o un puntatore alla struttura successiva in una catena di strutture.

Il runtime deve mettere in coda questo evento quando le proprietà dell'estensione di sistema sono cambiate. Ad esempio, quando vengono collegate nuove periferiche che abilitano nuove funzionalità.

Tutte le chiamate a xrEnumerateSystemExtensionPropertiesANDROID devono restituire gli stessi valori finché non viene messa in coda una nuova struttura XrEventDataSystemPropertiesChangedANDROID.

Quando un'applicazione riceve questo evento, deve chiamare di nuovo xrEnumerateSystemExtensionPropertiesANDROID per determinare le proprietà dell'estensione di sistema più recenti, creando o eliminando i tracker associati a queste estensioni, se necessario.

Utilizzo valido (implicito)

La funzione xrEnumerateSystemExtensionPropertiesANDROID è definita come segue:

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

Descrizioni dei parametri

  • instance è un XrInstance valido .
  • systemId è un XrSystemId valido del sistema per cui recuperare le proprietà dell'estensione.
  • propertyCapacityInput è la capacità dell'array properties o 0 per indicare una richiesta di recupero della capacità richiesta.
  • propertyCountOutput è il numero di proprietà dell'estensione richieste.
  • properties è un array di strutture XrSystemExtensionPropertiesANDROID. Può essere NULL se propertyCapacityInput è 0.
  • Per una descrizione dettagliata del recupero delle dimensioni properties richieste, consulta la sezione Parametri delle dimensioni del buffer.

Utilizzo valido (implicito)

Codici restituiti

Riuscita

  • XR_SUCCESS

Errore

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

Esempio

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

Problemi

Cronologia delle versioni

  • Revisione 1, 17/03/2026 (Kenny Vercaemer)

    • Versione iniziale dell'estensione.