Если коротко:
В OpenXR возможности проверяются поэтапно: приложение перечисляет расширения до создания instance, запрашивает свойства системы и во время сессии отслеживает активные профили и разрешения. Модель гарнитуры сама по себе не является надёжным признаком функции.
Возможности OpenXR нельзя определять только по названию гарнитуры. Доступ к eye tracking, hand tracking или passthrough зависит от runtime, версии ПО, разрешения пользователя и иногда от подключённого модуля.
До создания instance
Вызов перечисления extensions показывает, какие расширения понимает loader/runtime. Приложение формирует список обязательных и дополнительных функций. Обязательное отсутствие блокирует запуск с понятным объяснением; дополнительное отключает только зависимый сценарий.
После выбора системы
Через цепочки свойств можно запросить поддержку функций конкретной XR system. Важно добавлять только структуры включённых расширений и соблюдать время их жизни. Успешный запрос поддержки ещё не означает выданное разрешение.
Во время сессии
Профиль контроллера способен измениться при переподключении. Состояние трекинга тоже меняется покадрово. Приложение должно реагировать на события, валидность позы и доступность данных, а не проверять всё один раз на старте.
Архитектура feature flags
Соберите обнаруженные возможности в отдельный объект состояния. Интерфейс и игровая логика читают его, вместо повторных низкоуровневых запросов. Логируйте runtime, версию API и активные расширения — это упрощает поддержку.
Для запасного пути определите поведение заранее: контроллеры вместо рук, фиксированный рендеринг вместо eye-tracked foveation, обычный фон вместо passthrough. Скрытая неработающая кнопка хуже явно недоступной функции.
Тестирование
Проверьте несколько runtime, отказ в разрешении и отключение устройства во время работы. Capability detection считается готовым, когда приложение не только находит функцию, но и корректно живёт без неё.