Пост

Что такое OPENTK4_USE_WAYLAND и для чего он нужен?

Перевод поста NogginBops "What is OPENTK4_USE_WAYLAND and what does it do?"

Пост не является авторским и/или официальным
Ссылка на оригинал: What is OPENTK4_USE_WAYLAND and what does it do?
Автор оригинала: NogginBops

Для первого поста в этом блоге я хочу разобраться с малоизвестной переменной окружения OPENTK4_USE_WAYLAND и тем, как она взаимодействует с OpenTK.

OpenTK 4.x использует GLFW для создания окон и работы с ними. Изначально GLFW не имела поддержки Wayland и полагалась на XWayland для совместимости с этой средой.

Ситуация изменилась с выходом GLFW 3.3, где появилась возможность собрать библиотеку либо для X11, либо для Wayland, что приводило к созданию двух разных файлов .so. Поддержка Wayland в GLFW 3.3 была «сырой», и многие API GLFW невозможно было реализовать под Wayland из-за его ограничений. Это означало, что автоматический выбор Wayland по умолчанию в OpenTK привёл бы к множеству проблем, поскольку GLFW выдавала бы ошибки даже на простых операциях, например, при создании NativeWindow.

Наличие двух разных файлов .so означало, что решение об использовании Wayland или XWayland нужно было принимать в момент загрузки библиотеки GLFW. Чтобы принять это решение, OpenTK 4 использует переменную XDG_SESSION_TYPE для определения запуска под Wayland, а затем учитывает OPENTK4_USE_WAYLAND, чтобы решить, следует ли загружать Wayland-версию GLFW. Таким образом, начиная с OpenTK 4.8.0+, использование Wayland стало опциональным и включается установкой OPENTK4_USE_WAYLAND=1.

GLFW 3.4 всё изменила, добавив нативную поддержку Wayland. Теперь GLFW можно было собрать с поддержкой и X11, и Wayland в одном файле .so. Это добавило в GLFW новый API для выбора бэкенда. На платформах с Wayland GLFW теперь по умолчанию использует Wayland-бэкенд, и чтобы отключить его, нужно явно вызвать новый API GLFW. Поэтому в OpenTK 4.9.1 поведение переменной OPENTK4_USE_WAYLAND было изменено: теперь OPENTK4_USE_WAYLAND=0 отказывается от использования Wayland при запуске в этой среде. Одновременно было введено свойство GLFWProvider.HonorOpenTK4UseWayland, которое позволяет OpenTK игнорировать переменную окружения OPENTK4_USE_WAYLAND полностью, ведя себя так, будто она не установлена.

Эта таблица описывает поведение переменной OPENTK4_USE_WAYLAND для разных версий OpenTK:

Версия OpenTKНе установленаOPENTK4_USE_WAYLAND=0OPENTK4_USE_WAYLAND=1
< 4.8.0Игнорируется
GLFW не поддерживает Wayland
Игнорируется
GLFW не поддерживает Wayland
Игнорируется
GLFW не поддерживает Wayland
>= 4.8.0Всегда X11Всегда X11Wayland
если XDG_SESSION_TYPE=wayland
>= 4.9.1X11 или Wayland
в зависимости от платформы
Всегда X11X11 или Wayland
в зависимости от платформы
Авторский пост защищен лицензией CC BY-NC-SA 4.0

Популярные теги