ProHoster > BLOG > știri pe internet > Proiectul xrdesktop pentru utilizarea GNOME și KDE în căști de realitate virtuală
Proiectul xrdesktop pentru utilizarea GNOME și KDE în căști de realitate virtuală
Разработчики из компании Collabora prezentat proiect xrdesktop, в рамках которого при поддержке компании Valve развивается библиотека с элементами для взаимодействия с традиционными рабочими столами внутри трёхмерных окружений, формируемых при использовании 3D-очков и шлемов виртуальной реальности. Код библиотеки написан на языке Си и distribuit de sub licență MIT. Ansambluri gata făcute pregătit pentru Arch Linux и Ubuntu 19.04 / 18.04.
В настоящее время для Linux уже имеются средства для прямого вывода на шлемы виртуальной реальности (Vulkan-расширения VK_EXT_acquire_xlib_display для X11 и VK_EXT_acquire_wl_display для Wayland), но отсутствуют поддержка на уровне корректной отрисовки окон в 3D-пространстве и синхронизации частоты обновления экрана. Целью проекта xrdesktop является разработка методов, которые позволят использовать в виртуальных окружениях классические интерфейсы, ориентированные на вывод на двухмерном экране и управление при помощи клавиатуры и мыши.
Компоненты xrdesktop расширяют имеющиеся оконные и композитные менеджеры возможностями для использования runtime систем виртуальной реальности для отрисовки окон и рабочего стола в трехмерных виртуальных окружениях. В xrdesktop продвигается идея интеграции в существующие десктоп-окружения без необходимости запуска отдельного специализированного композитного менеджера и позволяя использовать с 3D-шлемами уже имеющиеся пользовательские конфигурации, используемые с обычным монитором.
Архитектура проекта подразумевает возможность интеграции с любыми рабочими столами, но на текущем этапе разработки компоненты для поддержки шлемов виртуальной реальности реализованы для KDE и GNOME. Для KDE поддержка 3D-шлемов реализован через Compiz-подобный плагин, а для GNOME через набор пачтей к GNOME Shell. Указанные компоненты зеркалируют существующие окна в виртуальное окружение 3D-шлемов в форме отдельной сцены или в оверлейном режиме, при котором окна рабочего стола могут накладываться на другие запущенные приложения виртуальной реальности.
Кроме механизмов отрисовки в xrdesktop предоставляются компоненты для обеспечения навигации и ввода при помощи специализированных пространственных контроллеров, таких как Valve Index и VIVE Wand. Xrdesktop на основе информации от VR-контроллеров генерирует обычные события ввода, симулируя использование клавиатуры и мыши.
В состав xrdesktop входит несколько библиотек, формирующих текстуры окон для VR runtime при помощи OpenVR, а также основанная на API система рендеринга полноценного рабочего стола в 3D-окружении. Так как xrdesktop не предоставляет собственного оконного менеджера, требуется проведение работы по интеграции с существующими оконными менеджерами (xrdesktop может быть портирован для любого оконного менеджера X11 или Wayland). На стороне графических драйверов для работы требуется драйвер с поддержкой API Vulkan и расширения VK_KHR_external_memory extension.
Основные составные части xrdesktop:
gulkan — glib-обвязка для Vulkan, предоставляющая классы для обработки устройств, шейдеров и инициализации текстур из памяти или DMA-буферов;
gxr — API для абстрагирования программных интерфейсов для разработки приложений виртуальной реальности. В настоящее время поддерживается только OpenVR, но в ближайшее время будет добавлена и поддержка стандарта OpenXR;
libinputsynth — библиотека для синтеза событий ввода, таких как движение мыши, клики и нажатия клавиш, реализованная в форме бэкендов для xdo, xi2 и Clutter;
xrdesktop — библиотека для управления окнами в 3D-окружении, набор сопутствующих виджетов и бэкенды для отрисовки сцены;
Проектом поддерживается несколько методов организации взаимодействия с рабочим столом и окнами в виртуальном окружении, которые могут применяться для захвата окон, масштабирования, перемещения, вращения, наложения на сферу, закрепления и скрытия окон, использования управляющего меню и одновременного управления двумя руками с использованием нескольких контроллеров.