有什么理由比OpenGL更喜欢Direct3D?


11

所以我读了这篇文章,我有点明白为什么Microsoft Windows上的游戏比任何其他OS都要多的原因。提出的主要问题是Direct3D优于OpenGL。

我不明白的是为什么任何开发人员都会牺牲兼容性?那简直是对公司的财务损失。我知道OpenGL有点混乱,但这对专家来说几乎不成问题。即使是这样,我认为人们会付出更多的努力,而不是蒙受金钱上的损失。

同样,如果我没有记错的话,那么很多跨平台应用程序都会同时使用Direct3D和OpenGL。我认为它们在API之间切换。

这很奇怪,因为他们只能使用OpenGL,为什么还要关心Direct3D?

所以问题是,OpenGL是否存在任何技术问题,或者Direct3D提供了OpenGL缺乏的任何支持?


我知道,这个问题可能因为话题太小或太宽泛而被关闭,我尽力缩小了范围。


您是否正在寻找与不同的东西?
trichoplax

2
顺便说一句,我几年前在GameDev.SE上回答了类似的问题
内森·里德

1
这是一个很好的历史课程,可以回答您的问题:programmers.stackexchange.com/questions/60544/…–
darius

1
@NathanReed “因此,有可能我们会看到向Windows上使用OpenGL的多平台开发人员的回弹。” 而现在,三年后,您能说这已经发生了吗?
Rotem

2
@Rotem我不这么认为,不。OGL(和现在的Vulkan)今天在保持与D3D的功能奇偶性方面要比以前更好,但是AFAICT,GPU供应商仍然优先考虑D3D驱动程序的错误修复和性能改进,并且大多数游戏/引擎在Windows上默认仍使用D3D。idTech引擎是一个明显的例外,它们在Windows上都使用OGL。
内森·里德

Answers:


9

关于Windows有更多游戏的事实,一些原因是

  1. Windows占据了大部分市场,过去开发跨平台游戏比现在复杂得多。
  2. DirectX附带了更好的工具来进行开发(例如调试)
  3. 大型创新通常首先在DirectX中创建/实现,然后移植到OpenGL /中实现。
  4. 对于Windows vs Linux,您必须考虑到由于市场和历史原因而制定了一个实际的标准(为此,请参阅为什么游戏开发人员更喜欢Windows?|软件工程,正如我在评论中所述)。 。

惯性很重要。如果您的团队针对DirectX进行开发,并瞄准了90%的市场(嗯...如果您在PC上玩游戏,那么您可能拥有Windows,那么... 99%的市场?),您为什么要投资OpenGL?如果您已经使用OpenGL进行开发,并且再次瞄准了99%的市场,那么您将一直坚持下去。例如,Id Software的Id Tech是使用OpenGL的出色游戏引擎(为DOOM系列提供支持)。

关于您的讨论主题,发表评论。

到目前为止,有许多API,一种常见的做法是使用对它们进行抽象的游戏引擎。例如,考虑

  • 在大多数移动平台上,您必须使用OpenGl ES。
  • 在PC上,您可以同时使用DirectX和OpenGL
  • 我认为您必须在XBOX上使用DirectX。
  • 我认为在PS上您使用自己的API。
  • 对于旧硬件,您可以使用DirectX9或OpenGL 3或OpenGL ES 2。
  • 使用最新的硬件,您可以(并且希望)使用DirectX 11,OpenGL 4,OpenGL ES 3。

最近,随着新的低开销API的出现(这是图形编程的主要转折点),出现了Windows和XBOX的DirectX 12,iOS和Windows的Linux和Linux(包括Android和Tizen)的Vulkan(新的OpenGL)的Metal )。

仍然有一些只针对Windows和XBOX的游戏,但是今天的恕我直言,这只能是市场选择。


因此,没有性能上的原因偏爱Direct3D吗?
A--B

@ritwik sinha DirectX 11对多线程渲染的支持比OpenGL 4更好,但是据我所知,这并没有带来任何性能上的差异。另一方面,将Windows与DirectX 11和Linux与OpenGL 4进行比较,获胜者是Linux与OpenGL。关于DirectX 12与Vulkan的关系,我认为现在还为时过早,但我不知道。
darius

我从未使用过Direct3D,所以我不明白您所说的多线程是什么意思。据我所知,程序员为不同的任务处理不同的线程。Direct3D是否在后台进行此操作?无论如何,好的答案。
A--B

1
@ritwik sinha在实时图形上使用多线程的一种应用是,您可以使用不同的线程在后台分配纹理资源(纹理流,顶点缓冲区),而主线程会进行绘制调用。这在OpenGL中也是可能的,但是非常棘手。在DirectX 11中,您还可以从多个线程进行绘图调用,这应该可以提高性能,但这不是常见的做法。我认为UnrealEngine4的最新版本可以做到。但是,使用DirectX 12和Vulkan进行多线程渲染将是一项真正的交易。
darius

1

可能的几个原因:

  • 从历史上看,OpenGL驱动程序的质量变化很大,但我不确定情况是否如此。
  • Xbox支持D3D,因此在其与PC之间移植游戏更加容易。
  • D3D的调试工具比OpenGL更好。幸运的是,我们现在有了RenderDoc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.