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 扩展,用于调试在
    英伟达显卡上运行的游戏。
  • 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》视频。

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 的驱动程序性能有什么区别?
    答: 英伟达专有驱动程序可与 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。