Как запросить версию API среды выполнения OpenXR

Вопрос или проблема

Как запросить версию 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 с минимальным запросом.

  1. Установите XrInstanceCreateInfo::applicationInfo.apiVersion в самую низкую версию API, которую вы хотите использовать (например, 1.0.0). Это должно быть согласно тому, что указано в спецификации OpenXR.

  2. Если 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, которые совместимы друг с другом.

Оцените материал
Добавить комментарий

Капча загружается...