XR_ANDROID_global_passthrough_dimming
Name String
XR_ANDROID_global_passthrough_dimming
Tipo de extensión
Extensión de instancia
Número de extensión registrado
797
Revisión
1
Estado de ratificación
No ratificado
Dependencias de extensiones y versiones
Fecha de la última modificación
2026-03-10
Estado de la IP
No hay reclamos de IP conocidos.
Colaboradores
Brian Chen, Google
Kyle Chen, Google
Nihav Jain, Google
Spencer Quin, Google
Descripción general
A medida que se introducen los dispositivos ópticos transparentes, es importante no solo permitir que las aplicaciones ajusten la oscuridad de la transferencia para proporcionar la mejor combinación con el contexto de la app al usuario, sino también permitir que el sistema atenúe la transferencia por motivos de seguridad.
Esta extensión proporciona dos funciones para que las apps establezcan y obtengan el nivel de atenuación actual, así como un evento para transmitir cuando cambia el nivel de atenuación.
Inspecciona la capacidad del sistema
La estructura XrSystemGlobalDimmingPropertiesANDROID se define de la siguiente manera:
typedef struct XrSystemGlobalDimmingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGlobalDimming;
} XrSystemGlobalDimmingPropertiesANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión. No se definen tales estructuras en OpenXR principal ni en esta extensión.supportsGlobalDimminges unXrBool32que indica si el sistema actual admite la atenuación global.
Una aplicación puede inspeccionar si el sistema admite la atenuación global encadenando una estructura XrSystemGlobalDimmingPropertiesANDROID a XrSystemProperties cuando se llama a xrGetSystemProperties .
Si el entorno de ejecución devuelve XR_FALSE para supportsGlobalDimming, debe devolver XR_ERROR_FEATURE_UNSUPPORTED cuando se llama a xrGetGlobalDimmingLevelANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_global_passthrough_dimmingdebe estar habilitada antes de usar XrSystemGlobalDimmingPropertiesANDROID. -
typedebe serXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Enumera los niveles de atenuación global admitidos
La estructura xrEnumerateSupportedGlobalDimmingLevelsANDROID se define de la siguiente manera:
XrResult xrEnumerateSupportedGlobalDimmingLevelsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedGlobalDimmingLevelCapacityInput,
uint32_t* supportedGlobalDimmingLevelCountOutput,
float* supportedGlobalDimmingLevels);
Descripciones de los miembros
instancees la instancia de la que se recuperósystemId.systemIdes elXrSystemIdcuyos niveles admitidos se enumerarán.supportedGlobalDimmingLevelCapacityInputes la capacidad del arraysupportedGlobalDimmingLevels, o 0 para indicar una solicitud de recuperación de la capacidad requerida.supportedGlobalDimmingLevelCountOutputes un puntero al recuento desupportedGlobalDimmingLevelsescritos o un puntero a la capacidad requerida en caso de quesupportedGlobalDimmingLevelCapacityInputsea insuficiente.supportedGlobalDimmingLevelses un puntero a un array de niveles admitidos, pero puede ser NULL sisupportedGlobalDimmingLevelCapacityInputes 0.
Si el valor de supportedGlobalDimmingLevelCountOutput que se devuelve es 0, se admiten todos los niveles de atenuación global entre 0.0 y 1.0.
xrEnumerateSupportedGlobalDimmingLevelsANDROID enumera los niveles de atenuación global que admite el XrSystemId . Los niveles admitidos no deben cambiar durante el ciclo de vida de su XrInstance . La lista de niveles que se muestra debe ordenarse de forma ascendente.
Los entornos de ejecución deben siempre mostrar contenidos de búfer idénticos de esta enumeración para el systemId determinado y durante el ciclo de vida de instance .
Uso válido (implícito)
- La extensión
XR_ANDROID_global_passthrough_dimmingdebe estar habilitada antes de llamar a xrEnumerateSupportedGlobalDimmingLevelsANDROID. -
instancedebe ser un controlador XrInstance válido. -
supportedGlobalDimmingLevelCountOutputdebe ser un puntero a un valoruint32_t - Si
supportedGlobalDimmingLevelCapacityInputno es0,supportedGlobalDimmingLevelsdebe ser un puntero a un array de valoressupportedGlobalDimmingLevelCapacityInputfloat
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Configura el nivel de atenuación global
La estructura XrGlobalDimmingFrameEndInfoANDROID se define de la siguiente manera:
typedef struct XrGlobalDimmingFrameEndInfoANDROID {
XrStructureType type;
const void* next;
float globalDimmingLevel;
} XrGlobalDimmingFrameEndInfoANDROID;
Descripciones de los parámetros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.globalDimmingLeveles un valor entre 0.0 (transparente) y 1.0 (opaco). El entorno de ejecución puede asignar este valor al nivel de atenuación global compatible más cercano. La aplicación puede establecer este valor en -1.0 para indicar que se prefiere el nivel de atenuación actual.
El valor globalDimmingLevel especifica el porcentaje de luz que se bloquea, donde un valor de 0.0 corresponde al 0% de bloqueo de luz y 1.0 corresponde al 100% de bloqueo de luz. El porcentaje de luz bloqueada se puede representar, en general, de la siguiente manera:
100% - Light Transmittance%
El porcentaje de transmisión de luz, según la norma ISO 8980-3:2022 , se puede medir como la proporción entre el flujo radiante transmitido y el flujo radiante incidente en longitudes de onda de luz visible (de 380 nm a 780 nm).
XrGlobalDimmingFrameEndInfoANDROID es una estructura que una aplicación puede encadenar en XrFrameEndInfo para solicitar un nivel de atenuación global preferido.
El entorno de ejecución debe respetar el nivel de atenuación solicitado si este es diferente del nivel de atenuación actual.
El entorno de ejecución tendrá el control del nivel de atenuación global y puede ignorar el nivel de atenuación global preferido por motivos de seguridad.
Uso válido (implícito)
- La extensión
XR_ANDROID_global_passthrough_dimmingdebe estar habilitada antes de usar XrGlobalDimmingFrameEndInfoANDROID. -
typedebe serXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
La función xrGetGlobalDimmingLevelANDROID se define de la siguiente manera:
XrResult xrGetGlobalDimmingLevelANDROID(
XrSession session,
float* dimmingLevel);
Descripciones de los parámetros
sessiones un controlador XrSession válido.dimmingLeveles un puntero al nivel de atenuación actual.
El valor dimmingLevel que se muestra debe estar entre 0.0 y 1.0, donde 0.0 significa completamente transparente y 1.0 significa completamente atenuado.
Si no se estableció el nivel de atenuación, el entorno de ejecución debe establecerlo en 0.0 cuando la transferencia esté habilitada y en 1.0 cuando esté inhabilitada.
Uso válido (implícito)
- La extensión
XR_ANDROID_global_passthrough_dimmingdebe estar habilitada antes de llamar a xrGetGlobalDimmingLevelANDROID. -
sessiondebe ser un controlador XrSession válido -
dimmingLeveldebe ser un puntero a un valorfloat
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Evento de cambio de nivel de atenuación
La estructura XrEventDataGlobalDimmingLevelChangedANDROID se define de la siguiente manera:
typedef struct XrEventDataGlobalDimmingLevelChangedANDROID {
XrStructureType type;
const void* next;
XrSession session;
} XrEventDataGlobalDimmingLevelChangedANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.sessiones un controlador XrSession válido.
La aplicación puede recuperar este evento con xrPollEvent . Este evento se enviará cuando el nivel de atenuación cambie por las apps o los botones físicos de los dispositivos.
Este evento no se enviará cuando la app enfocada cambie a otra.
La aplicación debería responder al evento llamando a xrGetGlobalDimmingLevelANDROID para obtener el nuevo nivel de atenuación y actualizar XrGlobalDimmingFrameEndInfoANDROID :: globalDimmingLevel según corresponda. Responder al evento garantiza que se indicará al entorno de ejecución cuando la aplicación cambie el nivel de atenuación preferido.
Uso válido (implícito)
- La extensión
XR_ANDROID_global_passthrough_dimmingdebe estar habilitada antes de usar XrEventDataGlobalDimmingLevelChangedANDROID. -
typedebe serXR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Ejemplo de código
Verifica la capacidad del sistema y enumera los niveles de atenuación global admitidos
En el siguiente código de ejemplo, se muestra cómo verificar si se admite la atenuación global.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrEnumerateSupportedGlobalDimmingLevelsANDROID xrEnumerateSupportedGlobalDimmingLevelsANDROID;
XrSystemGlobalDimmingPropertiesANDROID dimmingControlSystemProperties { XR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID };
XrSystemProperties systemProperties; // Chain dimmingControlSystemProperties
// ...
// Run xrGetSystemProperties()
// ...
if (!dimmingControlSystemProperties.supportsGlobalDimming) {
// The system does not support global dimming
return;
}
// Enumerate supported levels
uint32_t count = 0;
CHK_XR(xrEnumerateSupportedGlobalDimmingLevelsANDROID(instance, systemId, count, &count, nullptr));
std::vector<float> supportedLevels(count);
CHK_XR(xrEnumerateSupportedGlobalDimmingLevelsANDROID(instance, systemId, count, &count, supportedLevels.data()));
Evento de cambio de nivel de atenuación de sondeo
En el siguiente código de ejemplo, se muestra cómo sondear el evento de cambio de nivel de atenuación.
XrEventDataBuffer event{ XR_TYPE_EVENT_DATA_BUFFER };
// ...
// Run xrPollEvent()
// ...
switch (event.type) {
// This event will not be sent when focused app switches
case XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID:
{
const XrEventDataGlobalDimmingLevelChangedANDROID &dimmingLevelChangedEvent =
*reinterpret_cast<XrEventDataGlobalDimmingLevelChangedANDROID *>(&event);
// Query new dimming level using xrGetGlobalDimmingLevelANDROID()
}
}
Comandos nuevos
Estructuras nuevas
- XrEventDataGlobalDimmingLevelChangedANDROID
Extensión de XrFrameEndInfo :
Extiende XrSystemProperties :
Nuevas constantes de enum
XR_ANDROID_GLOBAL_PASSTHROUGH_DIMMING_EXTENSION_NAMEXR_ANDROID_global_passthrough_dimming_SPEC_VERSIONExtiende XrStructureType :
XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROIDXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROIDXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID
Problemas
Historial de versiones
Revisión 1, 7 de octubre de 2025 (Brian Chen)
- Descripción inicial de la extensión.