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
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èNULLo 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)
- L'estensione
XR_ANDROID_enumerate_system_extension_propertiesdeve essere abilitata prima di utilizzare XrSystemExtensionPropertiesANDROID -
typedeve essereXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
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èNULLo 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)
- L'estensione
XR_ANDROID_enumerate_system_extension_propertiesdeve essere abilitata prima di utilizzare XrEventDataSystemPropertiesChangedANDROID -
typedeve essereXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
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'arraypropertieso 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ò essereNULLsepropertyCapacityInputè 0.- Per una descrizione dettagliata del recupero delle dimensioni
propertiesrichieste, consulta la sezione Parametri delle dimensioni del buffer.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_enumerate_system_extension_propertiesdeve essere abilitata prima di chiamare xrEnumerateSystemExtensionPropertiesANDROID -
instancedeve essere un handle XrInstance valido -
propertyCountOutputdeve essere un puntatore a un valoreuint32_t - Se
propertyCapacityInputnon è0,propertiesdeve essere un puntatore a un array di strutturepropertyCapacityInputXrSystemExtensionPropertiesANDROID
Codici restituiti
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_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.