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

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

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

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

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


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

评论

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

顺便说一句,我几年前在GameDev.SE上回答了类似的问题。

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

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

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

#1 楼

关于Windows游戏数量更多这一事实,有一些原因是Windows占据了大部分市场,过去开发跨平台游戏比今天要复杂得多。
DirectX带有更好的工具来进行开发(例如调试)。
通常首先在DirectX中创建/实现大型创新,然后在OpenGL中将其移植/实现。
对于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 ES2。
对于较新的硬件,您可以(并且希望)使用DirectX 11,OpenGL 4,OpenGL ES3。

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

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

评论


$ \ begingroup $
因此,没有性能上的原因喜欢Direct3D吗?
$ \ endgroup $
– A --- B
16年6月30日在10:07

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



$ \ begingroup $
我从未使用过Direct3D,所以我不明白多线程的含义。据我所知,程序员为不同的任务处理不同的线程。 Direct3D是否在后台进行此操作?无论如何,好的答案。
$ \ endgroup $
– A --- B
16年6月30日在21:09

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

#2 楼

可能的原因有两个:


从历史上看,OpenGL驱动程序的质量变化很大,但我不确定情况是否如此。
Xbox支持D3D,因此移植它与PC之间的游戏更容易。
D3D的调试工具比OpenGL更好。幸运的是,我们现在有了RenderDoc