2015-04-12 56 views
0

我见过很多主要支持OpenGL的图形应用程序。我也注意到许多这些应用程序有一个-d3d标志,这将强制他们使用DirectX API。应用程序如何支持多个图形API?

单个图形应用程序如何使用两个不同的API但呈现完全相同的结果?当然,他们需要为这两种API添加代码,这既费时又浪费?

+4

“计算机科学中的每个问题都可以通过另一层抽象来解决。”我怀疑这适用于此。 –

+2

处理渲染API的实际代码通常只是整个应用程序的一小部分。拥有不同的渲染后端并不是_hard_hard。通常你有一些部分管理你的图形对象和“场景”(这当然很大程度上取决于应用程序的类型)。在过去,游戏甚至有自己的软件光栅扫描仪,后来可以选择支持不同的3D加速API。如今,许多游戏和图形应用程序都使用常见的3D工具,它们支持不同的渲染API,主要用于支持不同的平台。 – derhass

+0

@JonathonReinhart我认为像使用包装的东西只会调用正确的功能? –

回答

3

的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美元以上的显卡玩游戏通常更容易,更强大,这是不切实际的,除非您碰巧遇到了市面上的“必备”OpenGL游戏,等级'司机实际上很好地工作。

使用DirectX,特别是Windows 7+上的DirectX 11,对于来自不同供应商的各种设备中的大多数系统,“开箱即用”效果很好。一些软件开发人员发现,它们在不同设备上的一致性更高,并在提供OpenGL和DirectX时将其用作默认设置。这就是为什么许多PC游戏只能在Windows上使用DirectX的原因。但是,如果他们已经在抽象支持OpenGL for MAC,那么他们可能会将其作为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而使用两次来做

相关问题