Документация Steamworks
Разработка на SteamOS и Linux

Введение

Steam для Linux доступен для всех пользователей Steam. Учитывая тот факт, что каталог поддерживаемых на Linux игр растёт, а группа сообщества Steam для Linux очень активна, настало время портировать вашу игру на Linux.

Разработка игры на Linux может вызвать определенные трудности у разработчиков, хорошо знакомых с разработкой на Windows или macOS. Следующая информация поможет вам успешно портировать вашу игру в Steam для Linux.

Подготовка к работе

Сборка игры на Linux требует:

  • Компьютер для разработки с последней версией Linux со всеми обновлениями. Это может быть машина с двумя ОС, выделенный на Linux компьютер и даже виртуальная машина, на которой запущен Linux. Кроме того, разработка поддерживается как на 32-, так и на 64-битных дистрибутивах Linux. Рекомендуемым дистрибутивом Linux является последняя версия Ubuntu LTS, так как Valve и сообщество Linux тестируют её больше всего. Загрузить Ubuntu можно здесь.
  • Клиент Steam для Linux.
  • Базовый набор инструментов для разработки на Linux (к примеру, g++, gcc и утилита make), содержащийся в пакете build-essential. Установите этот пакет с помощью Ubuntu Software Center или в окне терминала Ubuntu при помощи утилиты управления пакетами apt-get: sudo apt-get install build-essential.
  • Последняя версия Steam Linux Runtime, которая включает в себя инструменты и полный набор библиотек, необходимый для отправки игр на Linux в Steam. Инструкции об использовании Steam Linux Runtime содержатся в файле README.md, включенном в репозиторий.

Если у вас есть общие вопросы о Linux в Steamworks или вы хотите сообщить о проблемах с Steam Linux Runtime, пожалуйста, присоединитесь к группе разработчиков Steamworks и задайте вопрос в разделе форума о Linux.

Инструменты Linux

Число инструментов разработки на Linux огромно, начиная от разнообразных интерфейсов командной строки и заканчивая интегрированными средами разработки с графическими интерфейсами. Следующая информация основана на опыте команды разработчиков на Linux, работающих в Valve.

Для тех, кто знаком со средствами разработки на Windows, простейшим решением будет использовать Visual Studio на Windows вместе с WinGDB — расширением Visual C++, которое позволяет выполнять отладку удаленных процессов Linux с помощью интерфейса отладки Visual Studio.

Для разработки на Linux команда Valve использовала следующие инструменты:
  • QtCreator: отладчик и интегрированная среда разработки со знакомыми по Visual Studio сочетаниями клавиш.
  • SlickEdit: редактор кода с базовым и настраиваемым графическим интерфейсом, где пользователь может задать сочетания клавиш.
  • gdb: популярный отладчик командной строки.
  • cgdb: оболочка gdb, которая позволяет разделить экран и видеть текущее место в исходном коде во время выполнения.
  • Eclipse: ещё одна интегрированная среда разработки, которую можно настроить для разработки на Linux. Доступна на Windows, macOS и Linux.

  • vim: базовый текстовый редактор командной строки.

Команда Valve использовала следующие инструменты отладки и трассировки:
  • QtCreator: см. выше.
  • Symbol Servers
  • PerfStudio: полноценный фреймовый отладчик с поддержкой трассировки API для игр, которые запускаются на видеокартах AMD.
    Доступен на Windows.
  • Telemetry: полноценный профилировщик для игр, запущенных на видеокартах. Доступен на Windows, macOS и Linux.

  • gDEBugger: отладчик, используемый для отладки, профилирования и анализа кода OpenGL. Активная разработка переключилась на CodeXL.

  • perf: инструмент для командной строки с различными функциями производительности. Доступен на Linux.
  • NVIDIA Nsight: расширение для Visual Studio для отладки игр, которые запускаются на видеокартах Nvidia.

  • lTTng: инструмент трассировки для Linux.
  • Проект apitrace: набор инструментов для трассировки и воспроизведения вызовов OpenGL и OpenGL ES из игры.
  • Zoom: профайлер центрального процессора с мощным и удобным пользовательским интерфейсом.

API для Linux

Vulkan — предпочтительная библиотека для высокопроизводительной графической визуализации. Это открытый аналог DirectX12 и Metal.

OpenGL является устаревшим стандартом графической визуализации. Большинство игр напрямую вызывают OpenGL, но есть и другие игры, которые используют метод перевода, который заключается в том, что устаревший код визуализации переводится в вызовы OpenGL. Этот подход использовался для таких старых игр на движке Source, как Team Fortress 2 и Counter-Strike: Source. Если для вашей игры вы выберете OpenGL, рекомендуем использовать основные функции OpenGL 3.0.

Simple DirectMedia Layer (SDL) 2.0 помимо прочего предоставляет низкоуровневый доступ к работе с аудио и окнами. Поддержка 3D-визуализации осуществляется с помощью OpenGL. Инструкции по установке можно найти здесь. Документация и подробная информация представлены на wiki-странице проекта. Valve использует SDL в Steam и большинстве наших игр для работы с окнами. SDL также предоставляет серверную поддержку для API ввода Steam.

Перечисленные далее библиотеки предоставляют поддержку для других аспектов разработки игр:
  • FreeType: визуализация как векторных, так и растровых шрифтов на Linux.
  • Fontconfig: регулировка и пользовательская настройка доступа к шрифтам.
  • Miles Sound System: аудиодвижок промежуточного уровня для разработки на Linux.
  • Bink Video: видеокодек для разработчиков игр.
  • WebM: формат открытого медиафайла, используется для записи видео в Team Fortress 2 вместо QuickTime.

Репозитории GitHub

Следующие репозитории являются общедоступными и используются для проектов, связанных со Steam для Linux:
  • steam-for-linux: содержит контент для клиента Steam на Linux и баг-трекер для клиента Steam на Linux.
  • steam-runtime: содержит проект Steam Linux Runtime. Его задача — предоставить стабильную среду выполнения для разработки игр Steam на Linux.

    Частые вопросы

    В. Моя игра на Linux зависит от многих внешних библиотек. Как решить эту проблему?
    О. Многие популярные библиотеки, такие как SDL, OpenAL, FreeType и Fontconfig для вашего удобства включены в Steam Linux Runtime. Если ваша игра зависит от других библиотек, которых нет в Runtime, но они распространяются свободно, пожалуйста, сообщите о них в разделе обсуждений разработчиков Steamworks по Linux и SteamOS.

    В. Поддерживается ли Steam DRM на Linux?
    О. Да! Новый инструмент DRM drmtoolp поддерживает Linux. Дополнительная информация доступна в разделе Средства защиты авторских прав в Steam.

    В. Чем отличается производительность драйверов для Ubuntu и для Windows?
    О. Если говорить о стабильности, производительности и наборе характеристик, проприетарные драйверы Nvidia сравнимы с версией для Windows. Проприетарные драйверы как AMD, так и Intel также доступны, но их текущие показатели стабильности и производительности ниже, чем аналоги для Windows.

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

    В. Оверлей Steam не работает при запуске за пределами Steam.
    О. В Linux вы должны установить переменную среды LD_PRELOAD, чтобы она загружала gameoverlayrenderer.so.

    Это будет выглядеть примерно так:
    export LD_PRELOAD=~/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so;~/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so

    В. Какую среду выполнения необходимо использовать для тестирования сборки Linux?
    О. Рекомендуемым дистрибутивом Linux является последняя версия Ubuntu LTS, так как Valve и сообщество Linux тестируют её больше всего. Загрузить Ubuntu можно здесь.