XR_ANDROID_global_passthrough_dimming
String de nome
XR_ANDROID_global_passthrough_dimming
Tipo de extensão
Extensão de instância
Número de ramal registrado
797
Revisão
1
Status de ratificação
Não ratificado
Dependências de extensão e versão
Data da última modificação
2026-03-10
Status do IP
Nenhuma reivindicação de PI conhecida.
Colaboradores
Brian Chen, Google
Kyle Chen, Google
Nihav Jain, Google
Spencer Quin, Google
Visão geral
Com a introdução de dispositivos ópticos transparentes, é importante não apenas permitir que os aplicativos ajustem a escuridão do passthrough para oferecer a melhor combinação com o contexto do app ao usuário, mas também permitir que o sistema clareie o passthrough por motivos de segurança.
Essa extensão oferece duas funções para que os apps definam e recebam o nível de escurecimento atual, além de um evento para transmitir quando o nível de escurecimento mudar.
Inspecionar a capacidade do sistema
A estrutura XrSystemGlobalDimmingPropertiesANDROID é definida como:
typedef struct XrSystemGlobalDimmingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGlobalDimming;
} XrSystemGlobalDimmingPropertiesANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.supportsGlobalDimmingé umXrBool32que indica se o sistema atual é compatível com o escurecimento global.
Um aplicativo pode verificar se o sistema oferece suporte ao escurecimento global encadeando uma estrutura XrSystemGlobalDimmingPropertiesANDROID ao XrSystemProperties ao chamar xrGetSystemProperties .
Se o ambiente de execução retornar XR_FALSE para supportsGlobalDimming , ele precisará retornar XR_ERROR_FEATURE_UNSUPPORTED quando xrGetGlobalDimmingLevelANDROID for chamado.
Uso válido (implícito)
- A extensão
XR_ANDROID_global_passthrough_dimmingprecisa ser ativada antes de usar XrSystemGlobalDimmingPropertiesANDROID. -
typeprecisa serXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Enumerar os níveis de escurecimento global compatíveis
A estrutura xrEnumerateSupportedGlobalDimmingLevelsANDROID é definida como:
XrResult xrEnumerateSupportedGlobalDimmingLevelsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedGlobalDimmingLevelCapacityInput,
uint32_t* supportedGlobalDimmingLevelCountOutput,
float* supportedGlobalDimmingLevels);
Descrições dos membros
instanceé a instância de ondesystemIdfoi recuperado.systemIdé oXrSystemIdcom os níveis compatíveis que serão enumerados.supportedGlobalDimmingLevelCapacityInputé a capacidade da matrizsupportedGlobalDimmingLevelsou 0 para indicar uma solicitação de recuperação da capacidade necessária.supportedGlobalDimmingLevelCountOutputé um ponteiro para a contagem desupportedGlobalDimmingLevelsgravados ou um ponteiro para a capacidade necessária casosupportedGlobalDimmingLevelCapacityInputseja insuficiente.supportedGlobalDimmingLevelsé um ponteiro para uma matriz de níveis compatíveis, mas pode ser NULL sesupportedGlobalDimmingLevelCapacityInputfor 0.
Se o supportedGlobalDimmingLevelCountOutput retornado for 0, todos os níveis de escurecimento global entre 0,0 e 1,0 serão aceitos.
xrEnumerateSupportedGlobalDimmingLevelsANDROID enumera os níveis de escurecimento global aceitos pelo XrSystemId . Os níveis com suporte não podem mudar durante o ciclo de vida da XrInstance . A lista de níveis retornada precisa ser classificada em ordem crescente.
Os ambientes de execução precisam sempre retornar conteúdos de buffer idênticos dessa enumeração para o systemId fornecido e durante a vida útil do instance .
Uso válido (implícito)
- A extensão
XR_ANDROID_global_passthrough_dimmingprecisa ser ativada antes de chamar xrEnumerateSupportedGlobalDimmingLevelsANDROID. -
instanceprecisa ser um identificador XrInstance válido -
supportedGlobalDimmingLevelCountOutputprecisa ser um ponteiro para um valoruint32_t - Se
supportedGlobalDimmingLevelCapacityInputnão for0,supportedGlobalDimmingLevelsprecisa ser um ponteiro para uma matriz 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
Configurar o nível de escurecimento global
A estrutura XrGlobalDimmingFrameEndInfoANDROID é definida como:
typedef struct XrGlobalDimmingFrameEndInfoANDROID {
XrStructureType type;
const void* next;
float globalDimmingLevel;
} XrGlobalDimmingFrameEndInfoANDROID;
Descrições dos parâmetros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.globalDimmingLevelé um valor entre 0,0 (transparente) e 1,0 (opaco). O ambiente de execução pode mapear esse valor para o nível de escurecimento global mais próximo com suporte. O aplicativo pode definir esse valor como -1,0 para indicar que o nível de escurecimento atual é o preferido.
O valor globalDimmingLevel especifica a porcentagem de luz bloqueada, em que 0,0 corresponde a 0% de bloqueio de luz e 1,0 corresponde a 100% de bloqueio de luz. A porcentagem de luz bloqueada pode ser representada em geral como:
100% - Light Transmittance%
A porcentagem de transmissão de luz, de acordo com a ISO 8980-3:2022 , pode ser medida como a proporção entre o fluxo radiante transmitido e o fluxo radiante incidente em comprimentos de onda de luz visível (380 nm a 780 nm).
O XrGlobalDimmingFrameEndInfoANDROID é uma estrutura que um aplicativo pode encadear em XrFrameEndInfo para solicitar um nível de escurecimento global preferencial.
O ambiente de execução precisa respeitar o nível de escurecimento solicitado se ele for diferente do atual.
O ambiente de execução terá controle do nível de escurecimento global e poderá desconsiderar o nível preferencial por motivos de segurança.
Uso válido (implícito)
- A extensão
XR_ANDROID_global_passthrough_dimmingprecisa ser ativada antes de usar XrGlobalDimmingFrameEndInfoANDROID. -
typeprecisa serXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A função xrGetGlobalDimmingLevelANDROID é definida como:
XrResult xrGetGlobalDimmingLevelANDROID(
XrSession session,
float* dimmingLevel);
Descrições dos parâmetros
sessioné um identificador XrSession válido.dimmingLevelé um ponteiro para o nível de escurecimento atual.
O dimmingLevel retornado precisa estar entre 0,0 e 1,0, em que 0,0 significa totalmente transparente e 1,0 significa totalmente escurecido.
Se o nível de escurecimento não tiver sido definido, o ambiente de execução precisará definir o nível de escurecimento como 0,0 quando o modo de passagem estiver ativado e 1,0 quando estiver desativado.
Uso válido (implícito)
- A extensão
XR_ANDROID_global_passthrough_dimmingprecisa ser ativada antes de chamar xrGetGlobalDimmingLevelANDROID. -
sessionprecisa ser um identificador XrSession válido -
dimmingLevelprecisa ser um ponteiro para um 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 mudança no nível de escurecimento
A estrutura XrEventDataGlobalDimmingLevelChangedANDROID é definida como:
typedef struct XrEventDataGlobalDimmingLevelChangedANDROID {
XrStructureType type;
const void* next;
XrSession session;
} XrEventDataGlobalDimmingLevelChangedANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.sessioné um identificador XrSession válido.
O aplicativo pode recuperar esse evento usando xrPollEvent . Esse evento será enviado quando o nível de escurecimento for alterado por apps ou botões físicos nos dispositivos.
Esse evento não será enviado quando o app em foco mudar para outro.
O aplicativo precisa responder ao evento chamando xrGetGlobalDimmingLevelANDROID para receber o novo nível de escurecimento e atualizar XrGlobalDimmingFrameEndInfoANDROID :: globalDimmingLevel de acordo. Responder ao evento garante que o ambiente de execução será sinalizado quando o aplicativo mudar o nível de escurecimento preferencial.
Uso válido (implícito)
- A extensão
XR_ANDROID_global_passthrough_dimmingprecisa ser ativada antes de usar XrEventDataGlobalDimmingLevelChangedANDROID. -
typeprecisa serXR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Exemplo de código
Verificar a capacidade do sistema e enumerar os níveis de escurecimento global compatíveis
O exemplo de código a seguir demonstra como verificar se o escurecimento global é compatível.
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 mudança no nível de escurecimento da pesquisa
O exemplo de código a seguir demonstra como consultar o evento de mudança do nível de escurecimento.
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()
}
}
Novos comandos
Novas estruturas
- XrEventDataGlobalDimmingLevelChangedANDROID
Estendendo XrFrameEndInfo :
Estendendo XrSystemProperties :
Novas constantes de tipo enumerado
XR_ANDROID_GLOBAL_PASSTHROUGH_DIMMING_EXTENSION_NAMEXR_ANDROID_global_passthrough_dimming_SPEC_VERSIONEstendendo XrStructureType :
XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROIDXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROIDXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID
Problemas
Histórico de versões
Revisão 1, 07/10/2025 (Brian Chen)
- Descrição inicial da extensão.