我见过许多主要支持OpenGL的图形应用程序。我还注意到其中许多应用程序都有一个-d3d
标志,这将迫使他们使用DirectX API。
单个图形应用程序如何使用两个不同的API但呈现完全相同的结果?当然,他们需要为两个API添加代码,这既费时又浪费一点?
答案 0 :(得分:3)
OpenGL与DirectX的主题对很多人来说很敏感,所以让我首先说我的意图不会激怒" API战争的任何一方&#34 ; 强>
如果您正在谈论像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是不现实的 - 除非你碰巧遇到了#34;必须拥有的&#34 34;市场上的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都是昂贵的。