OpenGL 与 DirectX 的话题对很多人来说都很敏感,所以让我首先说我的意图是不要激怒“API 战争”的任何一方。
如果您谈论的是 CAD 等通用图形软件,它们往往有大量跨平台目标要支持。在这些情况下,他们将 OpenGL 用于 MAC 和 *NIX 以及 Windows 等系统。
虽然开发人员可以在 Windows 上使用 OpenGL,但 Windows 上对 OpenGL 的“默认”支持非常少——仅限 OpenGL v1.x 软件。如果要使用功能更全面的 OpenGL,则需要让用户安装 OpenGL ICD。这些 OpenGL ICD 的质量在很大程度上取决于每个硬件供应商是否符合标准,并且在过去,Windows 的 OpenGL ICD 已经针对特定应用程序的非常特定的调用模式进行了调整(阅读“Doom”)。如果您的应用程序与这些模式不匹配,您有时会遇到奇怪的性能问题或遇到其他错误。
视频硬件行业也有一种趋势,即“消费者级”硬件上的 Windows 上的 OpenGL 支持对于一些游戏来说是相当少的工作,而“工作站级”硬件则获得了大量的开发人员资源,专注于编写一个高质量的 OpenGL ICD。在这种情况下,针对工作站(再次,读取 CAD)的软件倾向于提供这两种 API,以满足用户在更便宜和更昂贵的系统上的需求。相反,对于游戏来说,需要 2000 美元以上的显卡才能玩是不现实的,使用 DirectX 通常更容易、更健壮——除非你碰巧遇到了市场上一个“必须拥有”的 OpenGL 游戏,“消费者”等级的驱动程序实际上很好用。
使用 DirectX,特别是 Windows 7+ 上的 DirectX 11,对于来自不同供应商的各种设备的大多数系统来说,“开箱即用”效果很好。一些软件开发人员发现它在不同设备上更加一致,并在他们同时提供 OpenGL 和 DirectX 时将其用作默认设置。这就是为什么许多 PC 游戏只能在 Windows 上使用 DirectX。但是,如果他们已经在进行抽象以支持 MAC 的 OpenGL,那么他们很可能也将其作为 Windows 用户的一个选项。
对于游戏,抽象在渲染引擎中是典型的。为了在 AAA 游戏中获得良好的性能并在对他们重要的所有不同平台上运行,他们通常必须以任何方式实现其渲染器的多个版本(Windows Vista+ 的 Direct3D 11,Windows XP 的 Direct3D 9 尤其是新兴市场,一个变体适用于 Xbox 360 的 Direct3D 9、适用于 Xbox One 的 Direct3D 11 的变体、适用于 MAC 的 OpenGL、适用于 PlayStation 3 和/或 4 的特定渲染器,以及适用于手机游戏的 OpenGL ES)。这通常是通过一个抽象层来实现的,然后是每个平台的专用编码器来整理游戏,以利用对他们来说重要的硬件特定功能。这不是一个廉价的解决方案,
对于独立开发者和小型开发者来说,尝试同时支持 OpenGL 和 DirectX 可能是一个相当大的挑战。他们通常最好专注于在单一平台上使用单一的、受良好支持的 API 为该平台制作出色的游戏。然后,如果他们成功了,他们可以通过执行实现多个渲染 API 所需的工作将其移植到更多平台 - 并创建自定义内容处理以针对每个平台进行定制。也就是说,独立游戏通常不关注图形差异化,因此使用抽象层的功能和性能权衡问题不大。然而,在许多不同的设备上测试您的游戏并进行两次以涵盖 OpenGL 和 DirectX 的成本很高。