Steamworks 文献库
基于 SteamOS 和 Linux 的开发

Linux 概览

Linux 版 Steam 现在对所有 Steam 用户开放。 Linux 所支持的游戏与日俱增,Linux 版 Steam 的社区也十分活跃,因此现在正是把您的游戏移植到 Linux 上的好时候。

为 Steam 开发 Linux 游戏对于原来为 Windows 或 macOS 进行开发的开发者来说富有挑战性。 以下信息将有助于您成功地把游戏移植到 Linux 版 Steam 上。

入门指南

在 Linux 上制作游戏需要以下条件:

  • 一台已更新至 Linux 最新版本的电脑。 可以是安装了双系统的电脑、Linux 单系统电脑,甚至是运行 Linux 的虚拟机。 此外,32 位和 64 位 Linux 发行版都支持游戏开发。 我们推荐使用的 Linux 发行版为最新发布的 Ubuntu LTS,原因在于 Valve 和 Linux 社区对其进行的测试最多。 点击此处安装 Ubuntu。
  • Linux 版 Steam 客户端。
  • Linux 开发基础工具集(如 g++、gcc 以及 make 工具),包含在 build-essential 程序包中。 可通过 Ubuntu 软件中心或任一开放的终端窗口运行 apt-get 命令“sudo apt-get install build-essential”来安装该程序包。
  • 最新版本的 Steam Linux Runtime,包括 Steam 上发行 Linux 游戏所必需的工具及完整库集合。 运行时的使用说明位于存储库内的 README.md 文件中。

如果您对 Linux Steamworks 有疑问或需要报告运行时的问题,请加入 Steamworks 开发组并在 Linux 讨论区发帖。

Linux 工具

Linux 开发工具数量众多,既有命令行界面也有图形化的开发者 IDE。 以下信息来自于 Valve Linux 团队的经验。

对于具有 Windows 开发工具使用经验的开发者,改用 Linux 进行开发最容易的方法是使用 Windows 的 Visual Studio 以及 WinGDB—— 一个 Visual C++ 扩展,允许利用 Visual Studio 调试界面进行远程 Linux 进程的调试。

Valve 的 Linux 团队使用以下工具在 Linux 上进行开发:
  • QtCreator:带有常见的 Visual Studio 按键设置的调试器和 IDE。
  • SlickEdit:提供可配置的基础 GUI,用户可自定义快捷键设置。
  • gdb:这是一个热门的命令行调试程序。
  • cgdb:这是一个 gdb 包装器,在执行过程中提供源代码中当前位置的分屏视图。
  • Eclipse:另一个经配置可用于 Linux 开发的 IDE。 适用于 Windows、macOS 及 Linux。
  • vim:这是一个基础的命令行文本编辑器。

Valve 的 Linux 团队已经使用过以下调试及跟踪工具:
  • QtCreator:如上。
  • Symbol Servers
  • PerfStudio:这是一个功能完备、基于帧的调试程序,支持对在 AMD 显卡上运行的游戏进行 API 跟踪。 适用于 Windows。
  • Telemetry:这是一个功能完备的探查器,用于在显卡上运行的游戏。 适用于 Linux、Windows 及 macOS。
  • gDEBugger:这是一个调试、探查及分析 OpenGL 代码的调试程序。 其持续开发已转至 CodeXL。
  • perf:这是一个具有各种性能特点的命令行工具。 适用于 Linux。
  • NVIDIA Nsight:这是一个 Visual Studio 扩展,用于调试在 NVIDIA 显卡上运行的游戏。
  • lTTng:这是一个 Linux 跟踪工具。
  • apitrace 项目:这是一个跟踪并回放您游戏的 OpenGL 和 OpenGL ES 调用的工具集。
  • Zoom:这是一个 CPU 探查器,具有强大且友好的用户界面。

Linux API

Vulkan 是实现高性能图形渲染的首选库。 它是一个等同于 DirectX12 和 Metal 的开放库。

OpenGL 是图形渲染的较早标准。 大部分游戏直接调用 OpenGL,但也有其他游戏采用转换方法,将旧的渲染代码转换成 OpenGL 调用。 早先的 Valve Source 游戏如《军团要塞 2》和《反恐精英:起源》都使用这种方法。 如果您选择使用 OpenGL,那么我们推荐在游戏中使用 OpenGL 3.0 版的核心功能。

Simple DirectMedia Layer(SDL)2.0 版提供对音频、窗口化操作及其他内容的底层访问。 使用 OpenGL 时,支持进行 3D 渲染。 安装说明见此处。 如需更多信息与文件,请见 SDL wiki。 Valve 在 Steam 和大部分自有游戏中使用 SDL 处理窗口化,SDL 也提供后端,用以驱动 Steam 输入 API。

以下的库对游戏开发的其他方面提供支持:
  • FreeType:在 Linux 上渲染字体(矢量字体及位图字体均支持)。
  • Fontconfig:对字体访问进行配置和自定义。
  • Miles Sound System:这是一个用于 Linux 开发的中间件声音引擎。
  • Bink Video:这是一个为游戏开发者设计的视频编解码器。
  • WebM:这是一种开放的媒体文件格式,曾取代 QuickTime 用来录制《军团要塞2》视频。

Linux 运行时

原生支持 Linux 的游戏可以选择特定版本的 Steam Linux 运行时来执行, 并且可以针对每个分支进行设置。 请注意,您选择的运行时必须与用于编译可执行文件的 Linux 版 Steam SDK 匹配。 更多详情请参阅 Steam 运行时指南。

要使用此功能,您的应用必须首先设置一个支持 Linux 的启动选项。 设置完成后,您可以前往“安装”>“Linux 运行时”菜单项进行配置。

GitHub 存储库

以下公共存储库用于与 Linux 版 Steam 相关的项目:
  • steam-for-linux:包含 Linux 版 Steam 客户端的内容以及 Linux Steam 客户端的错误追踪。
  • steam-runtime:包含 Steam Linux runtime 项目。 其目的是为 Steam 上的 Linux 游戏开发提供稳定的运行时环境。

    常见问题

    问:我的 Linux 游戏有许多外部库依赖项。 该如何解决这个问题?
    答: 许多热门库如 SDL、OpenAL、FreeType 和 Fontconfig 都包含在 Steam Linux Runtime 中,方便您使用。 如您有其他非运行时外部库依赖项且可自由再发行,请在 Linux & SteamOS Steamworks 开发讨论区中提出。

    问:有针对 Linux 的 Steam DRM 吗?
    答: 有! 新的 drmtoolp DRM 工具支持 Linux。 参见 Steam DRM,了解更多信息。

    问:Ubuntu 和 Windows 的驱动程序性能有什么区别?
    答: NVIDIA 专有驱动程序可与 Windows 驱动程序在稳定性、性能及功能方面媲美。 AMD 和英特尔也有专有驱动程序,但目前的性能和稳定性还比不上同类的 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。