XR_ANDROID_enumerate_system_extension_properties
Cadena de nombre
XR_ANDROID_enumerate_system_extension_properties
Tipo de extensión
Extensión de instancia
Número de extensión registrada
725
Revisión
1
Estado de ratificación
No ratificado
Dependencias de extensión y versión
Fecha de última modificación
2026-02-11
Estado de IP
No se conocen reclamos de IP.
Colaboradores
Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google
Descripción general
Esta extensión permite que las aplicaciones determinen qué extensiones son compatibles con la configuración actual del sistema. Incluso si el tiempo de ejecución admite una extensión, es posible que el hardware del sistema actual no la admita.
La estructura XrSystemExtensionPropertiesANDROID se define de la siguiente manera:
typedef struct XrSystemExtensionPropertiesANDROID {
XrStructureType type;
void* next;
XrExtensionProperties properties;
XrBool32 isSupported;
} XrSystemExtensionPropertiesANDROID;
Descripciones de miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructura.propertieses el XrExtensionProperties con el nombre de la extensión.isSupportedes un valor booleano que indica si el sistema admite la extensión actualmente.
Uso válido (implícito)
- La extensión
XR_ANDROID_enumerate_system_extension_propertiesdebe habilitarse antes de usar XrSystemExtensionPropertiesANDROID -
typedebe serXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructura
La estructura XrEventDataSystemPropertiesChangedANDROID se define de la siguiente manera:
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
Descripciones de miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructura.
El tiempo de ejecución debe poner en cola este evento cuando cambien las propiedades de la extensión del sistema. Por ejemplo, cuando se conectan periféricos nuevos que habilitan funciones nuevas.
Todas las llamadas a xrEnumerateSystemExtensionPropertiesANDROID deben mostrar los mismos valores hasta que se ponga en cola un nuevo evento XrEventDataSystemPropertiesChangedANDROID.
Cuando una aplicación recibe este evento, debe volver a llamar a xrEnumerateSystemExtensionPropertiesANDROID para determinar las propiedades más recientes de la extensión del sistema, y, si es necesario, crear o destruir los objetos de seguimiento asociados con esas extensiones.
Uso válido (implícito)
- La extensión
XR_ANDROID_enumerate_system_extension_propertiesdebe habilitarse antes de usar XrEventDataSystemPropertiesChangedANDROID. -
typedebe serXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructura
La función xrEnumerateSystemExtensionPropertiesANDROID se define de la siguiente manera:
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
Descripciones de parámetros
instancees un XrInstance válido .systemIdes un sliink:XrSystemId válido del sistema para recuperar las propiedades de la extensión.propertyCapacityInputes la capacidad del arraypropertieso 0 para indicar una solicitud para recuperar la capacidad requerida.propertyCountOutputes la cantidad de propiedades de extensión solicitadas.propertieses un array de XrSystemExtensionPropertiesANDROID estructuras. Puede serNULLsipropertyCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de la recuperación del tamaño
propertiesrequerido.
Uso válido (implícito)
- La extensión
XR_ANDROID_enumerate_system_extension_propertiesdebe habilitarse antes de llamar a xrEnumerateSystemExtensionPropertiesANDROID. -
instancedebe ser un controlador XrInstance válido. -
propertyCountOutputdebe ser un puntero a un valoruint32_t. - Si
propertyCapacityInputno es0,propertiesdebe ser un puntero a un array de estructuras XrSystemExtensionPropertiesANDROIDpropertyCapacityInput.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Ejemplo
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()
);
Problemas
Historial de versiones
Revisión 1, 17 de marzo de 2026 (Kenny Vercaemer)
- Versión inicial de la extensión