XR_ANDROID_enumerate_system_extension_properties

Name String

XR_ANDROID_enumerate_system_extension_properties

Erweiterungstyp

Instanzerweiterung

Registrierte Erweiterungsnummer

725

Revision

1

Ratifizierungsstatus

Nicht ratifiziert

Abhängigkeiten von Erweiterungen und Versionen

OpenXR 1.0

Datum der letzten Änderung

2026-02-11

IP-Status

Keine bekannten IP-Ansprüche.

Mitwirkende

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

Übersicht

Mit dieser Erweiterung können Anwendungen ermitteln, welche Erweiterungen von der aktuellen Systemkonfiguration unterstützt werden. Auch wenn eine Erweiterung von der Laufzeit unterstützt wird, wird sie möglicherweise nicht von der aktuellen Systemhardware unterstützt.

Die Struktur XrSystemExtensionPropertiesANDROID ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • properties ist die XrExtensionProperties mit dem Namen der Erweiterung.
  • isSupported ist ein boolescher Wert, der angibt, ob die Erweiterung derzeit vom System unterstützt wird.

Gültige Verwendung (implizit)

Die Struktur XrEventDataSystemPropertiesChangedANDROID ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.

Die Laufzeit muss dieses Ereignis in die Warteschlange stellen, wenn sich die Eigenschaften der Systemerweiterung geändert haben. Das kann beispielsweise der Fall sein, wenn neue Peripheriegeräte angeschlossen werden, die neue Funktionen ermöglichen.

Alle Aufrufe von xrEnumerateSystemExtensionPropertiesANDROID müssen dieselben Werte zurückgeben, bis ein neues XrEventDataSystemPropertiesChangedANDROID-Ereignis in die Warteschlange gestellt wird.

Wenn eine Anwendung dieses Ereignis empfängt, sollte sie xrEnumerateSystemExtensionPropertiesANDROID noch einmal aufrufen, um die neuesten Eigenschaften der Systemerweiterung zu ermitteln. Dabei können nach Bedarf Tracker erstellt oder gelöscht werden, die mit diesen Erweiterungen verknüpft sind.

Gültige Verwendung (implizit)

Die Funktion xrEnumerateSystemExtensionPropertiesANDROID ist so definiert:

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

Parameterbeschreibungen

  • instance ist eine gültige XrInstance .
  • systemId ist eine gültige sliink:XrSystemId des Systems, für das die Erweiterungseigenschaften abgerufen werden sollen.
  • propertyCapacityInput ist die Kapazität des properties-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • propertyCountOutput ist die Anzahl der angeforderten Erweiterungseigenschaften.
  • properties ist ein Array von XrSystemExtensionPropertiesANDROID-Strukturen. Es kann NULL sein, wenn propertyCapacityInput 0 ist.
  • Eine detaillierte Beschreibung des Abrufens der erforderlichen properties Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

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

Beispiel

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

Probleme

Versionsverlauf

  • Revision 1, 17.03.2026 (Kenny Vercaemer)

    • Erste Version der Erweiterung.