Запуск SDL2 игр на примере Left 4 Dead 2 под Wayland + улучшение производительности + бонус

Итак, этот гайд подойдет тем, кто имеет видеокарты AMD и Nvidia со свежими на данный момент драйверами и выше (автор проверял только на версиях, указанные в статье, версии ниже не гарантируются):
radv 23.3.0 для AMD,
проприетарный 565.57.01-2 для Nvidia
а Intel… А зачем Вы вообще покупали видеокарты от Intel?

В этот раз мы рассмотрим запуск нативных для ОС Linux игр, которые пользуются графикой SDL2, например Left 4 Dead 2. Ни для кого не секрет, что на данный момент под Wayland многие игры запускаются через трансляцию сервера X11, что также добавляет накладных ресурсов нашему процессору, но мы можем избавиться от этого довольно примитивным методом замены одного .so файла (на ОС Windows похожие файлы имеют расширение .dll).

Рассмотрим этот способ на лицензионной копии Left 4 Dead 2 в Steam. Находим нашу игру, нажимаем Правой Кнопкой Мыши (ПКМ) и переходим в Свойства:

В открывшемся окне переходим во вкладку Установленные файлы и нажимаем Обзор. Откроется проводник, который установлен в Вашей системе, с папкой игры:

Далее переходим в папку bin и ищем файл libSDL2-2.0.so.0. Последняя дата изменения датируется аж 27.02.2023 гг. Да уж, это нам не подходит.

Скачиваем пакеты sdl2 sdl2_image lib32-sdl2 lib32-sdl2_image

Готово, теперь у нас есть свежий .so файл. Копируем libSDL2-2.0.so.0 в папке Left 4 Dead 2 или переименовываем его, чтобы в случае чего можно было этот файл вернуть обратно.

Переходим в /usr/lib64, здесь находим libSDL2-2.0.so.0, но не спешите его копировать, скорее всего, это ярлык, который ведет к другому файлу, вот он нам и нужен. В моем случае это был libSDL2-2.0.so.0.3000.9. Когда мы нашли нужный файл, просто копируем в папку с игрой (либо в конце статьи скачайте архив со всеми материалами, в том числе .so файлом, если не хотите заморачиваться):

sudo cp "/usr/lib64/libSDL2-2.0.so.0.3000.9" "/путь_до_игры/steamapps/common/Left 4 Dead 2/bin/libSDL2-2.0.so.0"

Так, не спешим запускать игру, в Steam в Свойствах игры под Параметрами запуска добавляем:

SDL_VIDEODRIVER=wayland %command%

Также я рекомендую добавить отдельные команды для самой игры для лучшей производительности:

SDL_VIDEODRIVER=wayland %command% -vulkan -heapsize 1572864 -threads 12 -novid -console -high +mat_motion_blur_percent_of_screen_max 0 +mat_queue_mode 2
Разбор каждой команды

vulkan — выставляет рендер Vulkan вместо OpenGL. Если Ваша видеокарта не поддерживает Vulkan или с эти рендером наблюдаются частые вылеты, уберите эту команду.

heapsize 1572864 — оптимизация памяти игры. Оставляем как есть, если у Вас более 3 Гб оперативной памяти.
512 Мб: heapsize 262144
1 Гб: heapsize 524288
2 Гб: heapsize 1048576

threads — указать количество потоков (именно потоков, не ядер!) Вашего процессора.

novid — отключает начальные видеовставки.

console — необязательная команда, добавляет консоль для дебага и держателей серверов.

high — выставляет высокий приоритет игре.

mat_motion_blur_percent_of_screen_max 0 — убирает размытие по экрану

mat_queue_mode 2 — включение мультипоточности в игре. 1 — заставляет игру запускаться в одном потоке с очередью, 0 — запуск с игры с одним потоком (не рекомендуется изменять значение этой команды).

И вот теперь пробуем запуск игры. Если у Вас высветилось предупреждение об английских локалях, то можно проигнорировать, игра должна идти и так. Теперь наша игра запускается через драйвер Wayland, а не X11, что должно улучшить фреймрейт, ведь теперь мы избавились от ненужного для этой игры слоя совместимости.
Если игра не запустилась по какой-то причине, то необходимо в систему доустановить зависимости: libdl.so.2 libpthread.so.0 libc.so.6
Если и после этого игра у Вас не запускается, то отмените все изменения и верните оригинальный .so файл.

Бонус для тех, кто играет, как я, с геймпада

Сразу оговорюсь: полный гайд будет в другой статье…

А вот если Вы пользовались Steam Input для геймпада, то тут возникнет конфуз: Steam не оптимизирован под Wayland от слова совсем. Но я нашел элегантное решение, которое подойдет одинаково для пользователей X11 и Wayland — программа JoyShockMapper (можно скачать архив с ним ниже).

Если Вы захотите сбилдить проект для себя, то прилагаю официальную страницу программы:
https://github.com/Electronicks/JoyShockMapper

Итак, если Вы скачали архив (в смысле еще нет?!), то открываем нашу программку JoyShockMapper с помощью консоли (геймпад должен быть подключен перед запуском). Изначально программа выглядит так:

Переходим в папку GyroConfigs и перетаскиваем курсором файл Left4Dead2.txt в терминал с открытой программой, нажимаем Enter. Текст должен поменяться:

Теперь наш геймпад (если поддерживается гироскоп) будет управлять мышью, а кнопки геймпада будут эмулировать нажатие кнопок клавиатуры.

Расшифровка управления
IN_GAME_SENS = 2.0 # поменяйте значение 2.0 на чувствительность, которую вы указали в игре, задать чувствительность можно в консоли, например: sensitivity 2.0

GYRO_OFF = L # отключение гироскопа на зажатие левого бампера
ZL = RMOUSE # левый триггер нажимает Правую Кнопку Мыши (ПКМ)
R = LMOUSE # правый бампер нажимает Левую Кнопку Мыши (ЛКМ)
ZR = V # правый триггер нажимает кнопку V (в моем случае это толчок зомби)

N = Q # верхняя кнопка (треугольник / Y) выбор оружия
E = F # правая кнопка (круг / B) использование / подбор предмета
S = SPACE # нижняя кнопка (крест / A) прыжок
W = R # левая кнопка (квадрат / X) перезарядка оружия

LUP = W # левый стик вверх, передвижение вперед
LDOWN = S # левый стик вниз, передвижение назад
LLEFT = A # левый стик влево, передвижение влево
LRIGHT = D # левый стик вправо, передвижение вправо
RUP = 3 # правый стик вверх, выбор предмета (гранаты)
RDOWN = B # правый стик вниз, переключение фонаря
RLEFT = 5 # правый стик влево, выбор предмета (таблетки / адреналин)
RRIGHT = 4 # правый стик вправо, выбор предмета (аптечки)
R3 = C # приседание

+ = ESC # Escape меню
- = TAB # статистика

RIGHT_STICK_DEADZONE_INNER = 0.9 # ограничение внутренней зоны активации правого стика
RIGHT_STICK_DEADZONE_OUTER = 0.9 # ограничение внешней зоны активации правого стика

Если Вы поменяли какие-то настройки, то переопределить их можно, снова переместив курсором .txt файл в программу и нажав Enter.

Если гироскоп немного “ведет” в разные стороны (или определенную сторону), опустите геймпад на стол и ничего не делайте во время калибровки, на столе также не должно быть посторонних движений, далее пропишите в программе:

RESTART_GYRO_CALIBRATION

Подождите 5 секунд и впишите команду, завершающую калибровку:

FINISH_GYRO_CALIBRATION

После этого гироскоп должен вести себя нормально.

Примечание: данный трюк можно проделать со всеми играми, которые используют SDL2 в качестве графического движка, но не все из них будут так же хорошо работать (некоторые из них просто не запустятся, что будет абсолютно нормальным).

Прилагаю материалы из данной статьи ниже (необходимо распаковать архив!):
Запуск SDL2 игр на примере Left 4 Dead 2 под Wayland + улучшение производительности + бонус.tar.gz (2,2 МБ)

3 Likes