XR_ANDROID_global_passthrough_dimming
Name String
XR_ANDROID_global_passthrough_dimming
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
797
Revision
1
Статус ратификации
Не ратифицировано
Зависимости расширений и версий
Дата последнего изменения
2026-03-10
Статус IP-адреса
Нет известных претензий в отношении интеллектуальной собственности.
Авторы
Брайан Чен (Brian Chen), Google
Кайл Чен (Kyle Chen), Google
Нихав Джайн (Nihav Jain), Google
Спенсер Куин (Spencer Quin), Google
Обзор
С появлением оптических устройств сквозной передачи важно не только позволить приложениям регулировать затемнение сквозной передачи, чтобы обеспечить наилучшее сочетание с контекстом приложения для пользователя, но и позволить системе отменять затемнение сквозной передачи из соображений безопасности.
Это расширение предоставляет приложениям две функции для установки и получения текущего уровня затемнения, а также событие для трансляции при изменении уровня затемнения.
Проверка возможностей системы
Структура XrSystemGlobalDimmingPropertiesANDROID определяется следующим образом:
typedef struct XrSystemGlobalDimmingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGlobalDimming;
} XrSystemGlobalDimmingPropertiesANDROID;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении. Такие структуры не определены в ядре OpenXR или этом расширении.supportsGlobalDimming– этоXrBool32, указывающий, поддерживает ли текущая система глобальное затемнение.
Приложение может проверить, поддерживает ли система глобальное затемнение, связав структуру XrSystemGlobalDimmingPropertiesANDROID с XrSystemProperties при вызове xrGetSystemProperties .
Если среда выполнения возвращает XR_FALSE для supportsGlobalDimming , то при вызове xrGetGlobalDimmingLevelANDROID она должна возвращать XR_ERROR_FEATURE_UNSUPPORTED.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_global_passthrough_dimmingдолжно быть включено до использования XrSystemGlobalDimmingPropertiesANDROID. -
typeдолжно бытьXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
Перечислить поддерживаемые уровни глобального затемнения
Структура xrEnumerateSupportedGlobalDimmingLevelsANDROID определяется следующим образом:
XrResult xrEnumerateSupportedGlobalDimmingLevelsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedGlobalDimmingLevelCapacityInput,
uint32_t* supportedGlobalDimmingLevelCountOutput,
float* supportedGlobalDimmingLevels);
Описания участников
instance– экземпляр, из которого был полученsystemId.systemId– этоXrSystemId, поддерживаемые уровни которого будут перечислены.supportedGlobalDimmingLevelCapacityInput– емкость массиваsupportedGlobalDimmingLevelsили 0, если нужно получить требуемую емкость.supportedGlobalDimmingLevelCountOutput– указатель на количество записанныхsupportedGlobalDimmingLevelsили указатель на требуемую емкость, еслиsupportedGlobalDimmingLevelCapacityInputнедостаточно.supportedGlobalDimmingLevels– указатель на массив поддерживаемых уровней, но может быть NULL, еслиsupportedGlobalDimmingLevelCapacityInputравно 0.
Если возвращенное значение supportedGlobalDimmingLevelCountOutput равно 0, поддерживаются все уровни глобального затемнения от 0,0 до 1,0.
xrEnumerateSupportedGlobalDimmingLevelsANDROID перечисляет уровни глобального затемнения, поддерживаемые XrSystemId . Поддерживаемые уровни не должны меняться в течение жизненного цикла XrInstance . Возвращаемый список уровней должен быть отсортирован по возрастанию.
Среды выполнения должны всегда возвращать идентичное содержимое буфера из этого перечисления для заданного systemId и в течение всего времени существования instance .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_global_passthrough_dimmingдолжно быть включено до вызова xrEnumerateSupportedGlobalDimmingLevelsANDROID. -
instanceдолжен быть действительным дескриптором XrInstance. -
supportedGlobalDimmingLevelCountOutputдолжен быть указателем на значениеuint32_t. - Если
supportedGlobalDimmingLevelCapacityInputне равно0,supportedGlobalDimmingLevelsдолжен быть указателем на массив значенийsupportedGlobalDimmingLevelCapacityInputfloat.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Настроить уровень глобального затемнения
Структура XrGlobalDimmingFrameEndInfoANDROID определяется следующим образом:
typedef struct XrGlobalDimmingFrameEndInfoANDROID {
XrStructureType type;
const void* next;
float globalDimmingLevel;
} XrGlobalDimmingFrameEndInfoANDROID;
Описание параметров
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.globalDimmingLevel– значение от 0,0 (прозрачный) до 1,0 (непрозрачный). Среда выполнения может сопоставить это значение с ближайшим поддерживаемым уровнем глобального затемнения. Приложение может установить значение -1,0, чтобы указать, что предпочтительным является текущий уровень затемнения.
Значение globalDimmingLevel указывает процент блокируемого света, где 0,0 соответствует 0% блокируемого света, а 1,0 – 100 %. Процент заблокированного света можно представить в общем виде следующим образом:
100% - Light Transmittance%
Процент светопропускания, согласно ISO 8980-3:2022 , можно измерить как отношение прошедшего лучистого потока к падающему лучистому потоку при длинах волн видимого света (от 380 до 780 нм).
XrGlobalDimmingFrameEndInfoANDROID – это структура, которую приложение может связать с XrFrameEndInfo, чтобы запросить предпочтительный уровень глобального затемнения.
Среда выполнения должна учитывать запрошенный уровень затемнения, если он отличается от текущего.
Среда выполнения будет контролировать общий уровень затемнения и может игнорировать предпочтительный общий уровень затемнения из соображений безопасности.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_global_passthrough_dimmingдолжно быть включено до использования XrGlobalDimmingFrameEndInfoANDROID. -
typeдолжно бытьXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROID -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
Функция xrGetGlobalDimmingLevelANDROID определяется следующим образом:
XrResult xrGetGlobalDimmingLevelANDROID(
XrSession session,
float* dimmingLevel);
Описание параметров
session– действительный дескриптор XrSession.dimmingLevel– указатель на текущий уровень затемнения.
Возвращаемое значение dimmingLevel должно быть в диапазоне от 0,0 до 1,0, где 0,0 означает полную прозрачность, а 1,0 – полное затемнение.
Если уровень затемнения не задан, среда выполнения должна установить его равным 0,0, когда сквозной режим включен, и 1,0, когда он отключен.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_global_passthrough_dimmingдолжно быть включено до вызова xrGetGlobalDimmingLevelANDROID. -
sessionдолжен быть действительным дескриптором XrSession. -
dimmingLevelдолжен быть указателем на значениеfloat.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Событие изменения уровня затемнения
Структура XrEventDataGlobalDimmingLevelChangedANDROID определяется следующим образом:
typedef struct XrEventDataGlobalDimmingLevelChangedANDROID {
XrStructureType type;
const void* next;
XrSession session;
} XrEventDataGlobalDimmingLevelChangedANDROID;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.session– действительный дескриптор XrSession.
Приложение может получить это событие с помощью xrPollEvent . Это событие отправляется, когда уровень затемнения меняется в приложениях или с помощью физических кнопок на устройствах.
Это событие не отправляется, когда фокус переключается на другое приложение.
Приложение должно отреагировать на событие, вызвав xrGetGlobalDimmingLevelANDROID, чтобы получить новый уровень затемнения и соответствующим образом обновить XrGlobalDimmingFrameEndInfoANDROID :: globalDimmingLevel. Реагирование на событие гарантирует, что среда выполнения получит сигнал, когда приложение изменит предпочтительный уровень затемнения.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_global_passthrough_dimmingдолжно быть включено до использования XrEventDataGlobalDimmingLevelChangedANDROID. -
typeдолжно бытьXR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROID -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
Пример кода
Проверка возможностей системы и перечисление поддерживаемых уровней глобального затемнения
В примере кода ниже показано, как проверить, поддерживается ли глобальное затемнение.
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()));
Событие изменения уровня затемнения при опросе
В следующем примере кода показано, как опрашивать событие изменения уровня затемнения.
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()
}
}
Новые команды
Новые структуры
- XrEventDataGlobalDimmingLevelChangedANDROID
Расширение XrFrameEndInfo :
Расширение XrSystemProperties :
Новые константы перечисления
XR_ANDROID_GLOBAL_PASSTHROUGH_DIMMING_EXTENSION_NAMEXR_ANDROID_global_passthrough_dimming_SPEC_VERSIONРасширение XrStructureType :
XR_TYPE_EVENT_DATA_GLOBAL_DIMMING_LEVEL_CHANGED_ANDROIDXR_TYPE_GLOBAL_DIMMING_FRAME_END_INFO_ANDROIDXR_TYPE_SYSTEM_GLOBAL_DIMMING_PROPERTIES_ANDROID
Проблемы
История версий
Версия 1, 7 октября 2025 г. (Брайан Чен)
- Начальное описание расширения.