XR_ANDROID_enumerate_system_extension_properties
Chaîne de nom
XR_ANDROID_enumerate_system_extension_properties
Type d'extension
Extension d'instance
Numéro d'extension enregistré
725
Révision
1
État de ratification
Non ratifié
Dépendances des extensions et des versions
Date de dernière modification
2026-02-11
État de l'adresse IP
Aucune réclamation connue pour atteinte à la propriété intellectuelle.
Contributeurs
Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google
Présentation
Cette extension permet aux applications de déterminer quelles extensions sont compatibles avec la configuration système actuelle. Même si une extension est prise en charge par le runtime, il est possible qu'elle ne soit pas compatible avec le matériel du système actuel.
La structure XrSystemExtensionPropertiesANDROID est définie comme suit :
typedef struct XrSystemExtensionPropertiesANDROID {
XrStructureType type;
void* next;
XrExtensionProperties properties;
XrBool32 isSupported;
} XrSystemExtensionPropertiesANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.propertiesest XrExtensionProperties avec le nom de l'extension.isSupportedest une valeur booléenne indiquant si l'extension est actuellement prise en charge par le système.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_enumerate_system_extension_propertiesdoit être activée avant d'utiliser XrSystemExtensionPropertiesANDROID. -
typedoit êtreXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.
La structure XrEventDataSystemPropertiesChangedANDROID est définie comme suit :
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.
L'exécution doit mettre en file d'attente cet événement lorsque les propriétés de l'extension système ont changé. Par exemple, lorsque de nouveaux périphériques sont connectés, ce qui permet de nouvelles fonctionnalités.
Tous les appels à xrEnumerateSystemExtensionPropertiesANDROID doivent renvoyer les mêmes valeurs jusqu'à ce qu'un nouvel événement XrEventDataSystemPropertiesChangedANDROID soit mis en file d'attente.
Lorsqu'une application reçoit cet événement, elle doit appeler à nouveau xrEnumerateSystemExtensionPropertiesANDROID pour déterminer les dernières propriétés d'extension système, en créant ou en détruisant éventuellement les trackers associés à ces extensions selon les besoins.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_enumerate_system_extension_propertiesdoit être activée avant d'utiliser XrEventDataSystemPropertiesChangedANDROID. -
typedoit êtreXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.
La fonction xrEnumerateSystemExtensionPropertiesANDROID est définie comme suit :
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
Descriptions des paramètres
instanceest une XrInstance valide .systemIdest un sliink:XrSystemId valide du système pour lequel récupérer les propriétés d'extension.propertyCapacityInputcorrespond à la capacité du tableaupropertiesou à 0 pour indiquer une requête visant à récupérer la capacité requise.propertyCountOutputcorrespond au nombre de propriétés d'extension demandées.propertiesest un tableau de structures XrSystemExtensionPropertiesANDROID. Elle peut êtreNULLsipropertyCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
propertiesrequise, consultez la section Paramètres de taille du tampon.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_enumerate_system_extension_propertiesdoit être activée avant d'appeler xrEnumerateSystemExtensionPropertiesANDROID. -
instancedoit être un handle XrInstance valide -
propertyCountOutputmust être un pointeur vers une valeuruint32_t - Si
propertyCapacityInputn'est pas0,propertiesdoit être un pointeur vers un tableau de structurespropertyCapacityInputXrSystemExtensionPropertiesANDROID.
Codes de retour
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Exemple
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()
);
Problèmes
Historique des versions
Révision 1, 17/03/2026 (Kenny Vercaemer)
- Version initiale de l'extension.