XR_ANDROID_global_passthrough_dimming
Name String
XR_ANDROID_global_passthrough_dimming
Type d'extension
Extension d'instance
Numéro d'extension enregistré
797
Révision
1
État de la ratification
Non ratifié
Dépendances d'extension et de version
Date de dernière modification
2026-03-10
État de l'adresse IP
Aucune réclamation de propriété intellectuelle connue.
Participants
Brian Chen, Google
Kyle Chen, Google
Nihav Jain, Google
Spencer Quin, Google
Présentation
Avec l'introduction des appareils optiques transparents, il est important de permettre aux applications d'ajuster l'obscurité du passthrough afin d'offrir à l'utilisateur la meilleure intégration possible avec le contexte de l'application, mais aussi de permettre au système d'éclaircir le passthrough pour des raisons de sécurité.
Cette extension fournit deux fonctions permettant aux applications de définir et d'obtenir le niveau d'atténuation actuel, ainsi qu'un événement à diffuser lorsque le niveau d'atténuation change.
Inspecter les capacités du système
La structure XrSystemGlobalDimmingPropertiesANDROID est définie comme suit :
typedef struct XrSystemGlobalDimmingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGlobalDimming;
} XrSystemGlobalDimmingPropertiesANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.supportsGlobalDimmingest unXrBool32, qui indique si le système actuel est compatible avec la gradation globale.
Une application peut vérifier si le système est compatible avec l'atténuation globale en associant une structure XrSystemGlobalDimmingPropertiesANDROID à XrSystemProperties lors de l'appel de xrGetSystemProperties .
Si l'environnement d'exécution renvoie XR_FALSE pour supportsGlobalDimming , il doit renvoyer XR_ERROR_FEATURE_UNSUPPORTED lorsque xrGetGlobalDimmingLevelANDROID est appelé.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_global_passthrough_dimmingdoit être activée avant d'utiliser XrSystemGlobalDimmingPropertiesANDROID. -
typedoit êtreXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
Énumérer les niveaux de gradation globale compatibles
La structure xrEnumerateSupportedGlobalDimmingLevelsANDROID est définie comme suit :
XrResult xrEnumerateSupportedGlobalDimmingLevelsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedGlobalDimmingLevelCapacityInput,
uint32_t* supportedGlobalDimmingLevelCountOutput,
float* supportedGlobalDimmingLevels);
Descriptions des membres
instanceest l'instance à partir de laquellesystemIda été récupéré.systemIdest l'élémentXrSystemIddont les niveaux compatibles seront énumérés.supportedGlobalDimmingLevelCapacityInputest la capacité du tableausupportedGlobalDimmingLevels, ou 0 pour indiquer une requête de récupération de la capacité requise.supportedGlobalDimmingLevelCountOutputest un pointeur vers le nombre desupportedGlobalDimmingLevelsécrits, ou un pointeur vers la capacité requise sisupportedGlobalDimmingLevelCapacityInputest insuffisant.supportedGlobalDimmingLevelsest un pointeur vers un tableau de niveaux compatibles, mais peut être NULL sisupportedGlobalDimmingLevelCapacityInputest égal à 0.
Si la valeur supportedGlobalDimmingLevelCountOutput renvoyée est 0, tous les niveaux de gradation globale compris entre 0,0 et 1,0 sont acceptés.
xrEnumerateSupportedGlobalDimmingLevelsANDROID énumère les niveaux d'assombrissement global acceptés par le XrSystemId . Les niveaux acceptés ne doivent pas changer pendant la durée de vie de son XrInstance . La liste des niveaux renvoyée doit être triée par ordre croissant.
Les environnements d'exécution doivent toujours renvoyer un contenu de tampon identique à partir de cette énumération pour le systemId donné et pendant la durée de vie de instance .
Utilisation valide (implicite)
- L'extension
XR_ANDROID_global_passthrough_dimmingdoit être activée avant d'appeler xrEnumerateSupportedGlobalDimmingLevelsANDROID. -
instancedoit être un handle XrInstance valide -
supportedGlobalDimmingLevelCountOutputdoit être un pointeur vers une valeuruint32_t - Si
supportedGlobalDimmingLevelCapacityInputn'est pas0,supportedGlobalDimmingLevelsdoit être un pointeur vers un tableau de valeurssupportedGlobalDimmingLevelCapacityInputfloat.
Codes renvoyés
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Configurer le niveau de réduction globale de la luminosité
La structure XrGlobalDimmingFrameEndInfoANDROID est définie comme suit :
typedef struct XrGlobalDimmingFrameEndInfoANDROID {
XrStructureType type;
const void* next;
float globalDimmingLevel;
} XrGlobalDimmingFrameEndInfoANDROID;
Description des paramètres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.globalDimmingLevelest une valeur comprise entre 0,0 (transparent) et 1,0 (opaque). L'environnement d'exécution peut mapper cette valeur au niveau de gradation globale compatible le plus proche. L'application peut définir cette valeur sur -1,0 pour indiquer que le niveau d'atténuation actuel est préférable.
La valeur globalDimmingLevel spécifie le pourcentage de lumière bloquée, où une valeur de 0,0 correspond à 0 % de lumière bloquée et 1,0 correspond à 100 % de lumière bloquée. Le pourcentage de lumière bloquée peut être représenté de manière générale comme suit :
100% - Light Transmittance%
Le pourcentage de transmission de la lumière, conformément à la norme ISO 8980-3:2022 , peut être mesuré comme le rapport entre le flux radiant transmis et le flux radiant incident aux longueurs d'onde de la lumière visible (380 nm à 780 nm).
XrGlobalDimmingFrameEndInfoANDROID est une structure qu'une application peut enchaîner dans XrFrameEndInfo pour demander un niveau de gradation globale préféré.
L'environnement d'exécution doit respecter le niveau de gradation demandé s'il est différent du niveau de gradation actuel.
L'environnement d'exécution contrôlera le niveau d'assombrissement global et pourra ignorer le niveau d'assombrissement global préféré pour des raisons de sécurité.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_global_passthrough_dimmingdoit être activée avant d'utiliser XrGlobalDimmingFrameEndInfoANDROID. -
typedoit êtreXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
La fonction xrGetGlobalDimmingLevelANDROID est définie comme suit :
XrResult xrGetGlobalDimmingLevelANDROID(
XrSession session,
float* dimmingLevel);
Description des paramètres
sessionest un handle XrSession valide.dimmingLevelest un pointeur vers le niveau d'atténuation actuel.
La valeur dimmingLevel renvoyée doit être comprise entre 0,0 et 1,0, où 0,0 signifie "totalement transparent" et 1,0 signifie "totalement assombri".
Si le niveau d'atténuation n'a pas été défini, l'environnement d'exécution doit le définir sur 0,0 lorsque le passthrough est activé et sur 1,0 lorsqu'il est désactivé.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_global_passthrough_dimmingdoit être activée avant d'appeler xrGetGlobalDimmingLevelANDROID. -
sessiondoit être un handle XrSession valide -
dimmingLeveldoit être un pointeur vers une valeurfloat
Codes renvoyés
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Événement de modification du niveau de luminosité
La structure XrEventDataGlobalDimmingLevelChangedANDROID est définie comme suit :
typedef struct XrEventDataGlobalDimmingLevelChangedANDROID {
XrStructureType type;
const void* next;
XrSession session;
} XrEventDataGlobalDimmingLevelChangedANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.sessionest un handle XrSession valide.
L'application peut récupérer cet événement à l'aide de xrPollEvent . Cet événement est envoyé lorsque le niveau de luminosité est modifié par des applications ou par des boutons physiques sur les appareils.
Cet événement n'est pas envoyé lorsque l'application sélectionnée passe à une autre.
L'application doit répondre à l'événement en appelant xrGetGlobalDimmingLevelANDROID pour obtenir le nouveau niveau d'atténuation et mettre à jour XrGlobalDimmingFrameEndInfoANDROID :: globalDimmingLevel en conséquence. La réponse à l'événement garantit que l'environnement d'exécution sera signalé lorsque l'application modifiera le niveau d'assombrissement préféré.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_global_passthrough_dimmingdoit être activée avant d'utiliser XrEventDataGlobalDimmingLevelChangedANDROID. -
typedoit êtreXR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
Exemple de code
Vérifier les capacités du système et énumérer les niveaux de gradation globale compatibles
L'exemple de code suivant montre comment vérifier si la gradation globale est prise en charge.
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()));
Événement de modification du niveau de gradation de l'interrogation
L'exemple de code suivant montre comment interroger l'événement de modification du niveau de luminosité.
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()
}
}
Nouvelles commandes
Nouvelles structures
- XrEventDataGlobalDimmingLevelChangedANDROID
Extension de XrFrameEndInfo :
Extension de XrSystemProperties :
Nouvelles constantes d'énumération
XR_ANDROID_GLOBAL_PASSTHROUGH_DIMMING_EXTENSION_NAMEXR_ANDROID_global_passthrough_dimming_SPEC_VERSIONExtension de XrStructureType :
XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROIDXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROIDXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID
Problèmes
Historique des versions
Révision 1, 07/10/2025 (Brian Chen)
- Description initiale de l'extension.