Вопрос или проблема
Как запросить версию API библиотеки OpenXR?
xrCreateInstance требует значение для XrInstanceCreateInfo::applicationInfo.apiVersion
“Если среда выполнения не поддерживает запрашиваемую версию apiVersion [xrCreateInstance] должна вернуть XR_ERROR_API_VERSION_UNSUPPORTED”
Существует ли способ запроса версии API среды выполнения? Приложение “OpenXR Tools” для Windows Mixed Reality показывает её, так что я предполагаю, что ответ должен быть “да”, но я не нашел, как это сделать.
Я видел предложение установить XrInstanceCreateInfo::applicationInfo.apiVersion = 0, чтобы предположительно гарантировать, что xrCreateInstance не завершится с ошибкой XR_ERROR_API_VERSION_UNSUPPORTED, но в спецификации нет ничего, что это подтверждает. Более того, даже если xrCreateInstance завершится успешно, значение, возвращаемое в XrInstanceProperties::runtimeVersion, “не обязательно связано с версией API OpenXR”.
Спасибо за любые предложения.
Побочный комментарий: Я только что обновил свой OpenXR SDK (заголовки и библиотеку загрузчика) до 1.1.41, но теперь я получаю XR_ERROR_API_VERSION_UNSUPPORTED. Инструменты WMR OpenXR показывают, что версия API библиотеки среды выполнения составляет 1.0.28 — как для среды выполнения Oculus (Meta Quest Link), так и для Microsoft WMR на ПК и HoloLens.
Ответ или решение
Чтобы запросить версию API OpenXR Runtime, вам необходимо учитывать несколько моментов, касающихся спецификации OpenXR и использования структуры XrInstanceCreateInfo
. Давайте подробно рассмотрим, как можно это сделать.
Шаг 1: Подготовка и инициализация
Перед созданием экземпляра необходимо понимать, какую версию API вы хотите запросить. Как вы отметили, XrInstanceCreateInfo::applicationInfo.apiVersion
должен содержать версию API OpenXR, которую вы хотите использовать. Однако перед этим вы можете проверить версию, поддерживаемую вашей средой выполнения (runtime).
Шаг 2: Использование XrEnumerateInstanceExtensionProperties и XrEnumerateInstanceLayerProperties
Для того чтобы запросить доступные расширения и слои, которые поддерживает runtime, вы можете использовать функции xrEnumerateInstanceExtensionProperties
и xrEnumerateInstanceLayerProperties
. Это не предоставляет прямую информацию о версии API, но может помочь понять возможности вашего runtime.
Шаг 3: Запрос версии API OpenXR Runtime
Наиболее прямой способ узнать версию API, поддерживаемую runtime, — это использовать xrCreateInstance
с минимальным запросом.
-
Установите
XrInstanceCreateInfo::applicationInfo.apiVersion
в самую низкую версию API, которую вы хотите использовать (например, 1.0.0). Это должно быть согласно тому, что указано в спецификации OpenXR. -
Если
xrCreateInstance
возвращаетXR_ERROR_API_VERSION_UNSUPPORTED
, это означает, что запрашиваемая версия API не поддерживается.
Шаг 4: Обработка версии API
Так как вы упомянули, что установка XrInstanceCreateInfo::applicationInfo.apiVersion = 0
не дает четкой версии API и может не поддерживаться спецификацией, лучше всего использовать:
XrInstanceProperties
для получения информации о версии самого runtime, которая будет возвращена после успешного вызоваxrCreateInstance
.
XrInstanceCreateInfo createInfo = {XR_TYPE_INSTANCE_CREATE_INFO};
createInfo.applicationInfo.apiVersion = XR_CURRENT_API_VERSION; // Или конкретная версия, например 1.0.0
XrInstance instance;
XrResult result = xrCreateInstance(&createInfo, &instance);
if (result == XR_SUCCESS) {
// Чтение свойств экземпляра
XrInstanceProperties properties = {XR_TYPE_INSTANCE_PROPERTIES};
xrGetInstanceProperties(instance, &properties);
printf("Runtime version: %d.%d.%d\n", XR_VERSION_MAJOR(properties.runtimeVersion),
XR_VERSION_MINOR(properties.runtimeVersion),
XR_VERSION_PATCH(properties.runtimeVersion));
} else {
// Обработка ошибок
}
Заключение
Таким образом, для получения версии API OpenXR, поддерживаемой вашим runtime, следует попробовать создать экземпляр с минимальной версией по вашему усмотрению. В случае неудачи, это даст понять, что ваша запрашиваемая версия не поддерживается. При успешном создании экземпляра используйте XrInstanceProperties
для получения информации о фактической версии runtime.
Если у вас возникают проблемы с версией API, например "XR_ERROR_API_VERSION_UNSUPPORTED"
, убедитесь, что используете версию SDK и runtime, которые совместимы друг с другом.