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
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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.propertiesist die XrExtensionProperties mit dem Namen der Erweiterung.isSupportedist ein boolescher Wert, der angibt, ob die Erweiterung derzeit vom System unterstützt wird.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_enumerate_system_extension_propertiesmuss aktiviert sein, bevor XrSystemExtensionPropertiesANDROID verwendet wird. -
typemussXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROIDsein. -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Struktur XrEventDataSystemPropertiesChangedANDROID ist so definiert:
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder 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
XR_ANDROID_enumerate_system_extension_propertiesErweiterung muss aktiviert sein, bevor XrEventDataSystemPropertiesChangedANDROID verwendet wird. -
typemussXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROIDsein. -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrEnumerateSystemExtensionPropertiesANDROID ist so definiert:
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
Parameterbeschreibungen
instanceist eine gültige XrInstance .systemIdist eine gültige sliink:XrSystemId des Systems, für das die Erweiterungseigenschaften abgerufen werden sollen.propertyCapacityInputist die Kapazität desproperties-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.propertyCountOutputist die Anzahl der angeforderten Erweiterungseigenschaften.propertiesist ein Array von XrSystemExtensionPropertiesANDROID-Strukturen. Es kannNULLsein, wennpropertyCapacityInput0 ist.- Eine detaillierte Beschreibung des Abrufens der erforderlichen
propertiesGröße finden Sie im Abschnitt Parameter für die Puffergröße.
Gültige Verwendung (implizit)
- Die
XR_ANDROID_enumerate_system_extension_propertiesErweiterung muss aktiviert sein, bevor xrEnumerateSystemExtensionPropertiesANDROID aufgerufen wird. -
instancemuss ein gültiger XrInstance-Handle sein. -
propertyCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
propertyCapacityInputnicht0ist ,propertiesmuss ein Zeiger auf ein Array vonpropertyCapacityInputXrSystemExtensionPropertiesANDROID-Strukturen sein.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_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.