it-swarm.cn

为什么游戏开发人员更喜欢Windows?

即使OpenGL是跨平台的,DirectX是否比OpenGL更容易或更出色?为什么我们看不到像Windows那样真正的功能强大的Linux游戏?

396
M.Sameer

这里的许多答案都非常非常好。但是 OpenGLDirect3D(D3D) 问题可能应该得到解决。这需要...历史课程。

在开始之前,我对 OpenGL 的了解要远远多于对 Direct3D 的了解。我一生中从未写过任何D3D代码,而且我已经在OpenGL上编写了教程。因此,我要说的不是偏见问题。这完全是历史问题。

冲突的诞生

有一天,在90年代初的某个时候,微软向四周张望。他们看到 [〜#〜] snes [〜#〜]Sega Genesis 很棒,可以运行很多动作游戏等等。他们看到 [〜#〜] dos [〜#〜] 。开发人员编写了诸如主机游戏之类的DOS游戏的代码:直接开发。但是,与控制台不同,在控制台上,开发SNES游戏的开发人员知道用户将拥有什么硬件,而DOS开发人员则必须编写多种可能的配置。这比听起来要难得多。

微软有一个更大的问题:Windows。与DOS不同,Windows希望拥有硬件,而DOS却可以让开发人员做任何事情。为了拥有应用程序之间的协作,必须拥有硬件。合作正是游戏开发商hate的合作,因为合作会占用宝贵的硬件资源,而他们可能会使用这些资源来提高性能。

为了促进Windows上的游戏开发,Microsoft需要一个统一的API,该API是低级的,并且可以在Windows上运行且不受其影响,并且最重要的是cross-hardware。适用于所有图形,声音和输入硬件的单个API。

因此, DirectX 诞生了。

3D加速器在几个月后诞生。微软遇到了麻烦。请参阅DirectX的图形组件DirectDraw,仅处理2D图形:分配图形内存并在内存的不同分配部分之间进行位清除。

因此,Microsoft购买了一些中间件,并将其转换为Direct3D版本3。它被universally斥责了。并且有充分的理由;查看D3D v3代码就像凝视《约柜》一样。

Id Software的老约翰·卡马克(John John Carmack)看着那个垃圾,说道:“拧紧!”并决定编写另一个API:OpenGL。

瞧瞧,这头猛兽中的另一部分是Microsoft一直在忙于在Windows的OpenGL实现中与SGI一起工作。这里的想法是向开发人员推荐典型的GL应用程序:工作站应用程序。CAD工具,建模等东西。游戏是他们中最遥远的东西。这主要是Windows NT,但Microsoft决定也将其添加到Win95。

为了吸引工作站开发人员使用Windows,Microsoft决定尝试贿赂他们以使用这些新型3D图形卡。微软实现了Installable Client Driver协议:图形卡制造商可以使用基于硬件的协议来替代微软的软件OpenGL实现。如果可用,代码可以自动仅使用硬件OpenGL实现。

早期,消费者级别的视频卡虽然不支持OpenGL。这并没有阻止Carmack仅仅将Quake移植到他的SGI工作站上的OpenGL(GLQuake)。正如我们从GLQuake自述文件中看到的:

从理论上讲,glquake将在支持纹理对象扩展的任何兼容OpenGL上运行,但是除非它是非常强大的硬件来加速所需的一切,否则游戏将无法接受。如果必须通过任何软件仿真路径,则性能可能会大大低于每秒一帧。

目前(97年3月),唯一可以合理地发挥作用的标准opengl硬件是鹰图实现,这是一张非常昂贵的卡。 3dlabs一直在显着提高其性能,但是如果有可用的驱动程序,它仍然不够好玩。从全屏运行退出时,当前用于glint和permedia板的某些3dlabs驱动程序也会在NT崩溃,因此,我不建议在3dlabs硬件上运行glquake。

3dfx提供了一个opengl32.dll,它可以实现glquake所需的一切,但它不是完整的opengl实现。其他opengl应用程序不太可能与它一起使用,因此基本上将其视为“ glquake驱动程序”。

这就是miniGL驱动程序的诞生。随着硬件功能强大到足以在硬件中实现大多数OpenGL功能,这些技术最终演变为完整的OpenGL实现。 nVidia是第一个提供完整OpenGL实现的公司。许多其他供应商都在苦苦挣扎,这就是开发人员偏爱Direct3D的原因之一:它们与更广泛的硬件兼容。最终仅剩下nVidia和ATI(现在为AMD),并且都具有良好的OpenGL实现。

OpenGL崛起

这样就设置了阶段:Direct3D与OpenGL。考虑到D3D v3的糟糕程度,这真是一个了不起的故事。

OpenGL体系结构评审委员会(ARB)是负责维护OpenGL的组织。他们发布许多扩展,维护扩展存储库,并创建API的新版本。 ARB是由许多图形行业参与者以及某些OS制造商组成的委员会。 Apple并且Microsoft曾多次成为ARB的成员。

3Dfx随Voodoo2一起推出。这是第一个可以进行多重纹理处理的硬件,这是OpenGL以前无法做到的。尽管3Dfx强烈反对OpenGL,但下一代多纹理图形芯片(TNT1)的制造商NVIDIA很喜欢它。因此,ARB发布了扩展名:GL_ARB_multitexture,它将允许访问多重纹理。

同时,Direct3D v5发布了。现在,D3D已变成实际的[〜#〜] api [〜#〜],而不是猫可能会呕吐的东西。问题?没有多重纹理。

哎呀。

现在,由于人们没有过多地使用多重纹理,因此该伤害几乎不会达到应有的程度。不直接。多重纹理会严重影响性能,在许多情况下,与多重传递相比,这是不值得的。当然,游戏开发人员喜欢确保自己的游戏可以在较旧的硬件上运行,而这些硬件没有多重纹理,因此很多游戏都没有它。

因此,D3D被判缓刑。

随着时间的流逝,NVIDIA部署了GeForce 256(不是GeForce GT-250;这是第一款GeForce),在接下来的两年中,显卡的竞争几乎结束了。主要卖点是能够在硬件中执行顶点变换和照明(T&L)。不仅如此,NVIDIA非常喜欢OpenGL,以至于他们的T&L引擎有效地wasOpenGL。几乎从字面上看;据我了解,他们的一些寄存器实际上采用了OpenGL枚举器directive作为值。

Direct3D v6发布。最后是多纹理,但是没有硬件T&L。 OpenGL拥有always拥有一条T&L管道,即使在256之前是通过软件实现的。因此,对于NVIDIA而言,将其软件实现转换为硬件解决方案非常容易。直到D3D v7才最终获得硬件T&L支持。

着色器的曙光,OpenGL的黄昏

然后,GeForce 3出现了。同时发生了很多事情。

微软已经决定他们不会再迟到了。因此,他们没有看到NVIDIA在做什么,而是在事后照搬了它,而是采取了惊人的立场去与他们交谈。然后他们相爱了,在一起有了一个小小的控制台。

随后发生了混乱的离婚。但这是另外一次。

这对PC而言意味着GeForce 3与D3D v8同时发布。不难看出GeForce 3如何影响D3D 8的着色器。 Shader Model 1.0的像素着色器特定于NVIDIA的硬件extremely。从未尝试过抽象NVIDIA的硬件。 SM 1.0就是GeForce 3所做的。

当ATI开始使用Radeon 8500进入性能显卡竞赛时,出现了问题。 8500的像素处理管线比NVIDIA的强大。因此,微软发布了Shader Model 1.1,基本上就是“ 8500所做的一切”。

这听起来像D3D的失败。但是失败和成功是度的问题。并且epic失败发生在OpenGL领域。

NVIDIA喜欢OpenGL,因此当GeForce 3推出时,他们发布了一系列OpenGL扩展。专有OpenGL扩展:仅NVIDIA。自然而然地,当8500出现时,它不能使用它们中的任何一个。

至少在D3D 8平台上,您可以在ATI硬件上运行SM 1.0着色器。当然,您必须编写新的着色器才能利用8500的凉爽度,但至少需要编写代码worked

为了在OpenGL的Radeon 8500上具有any种类的着色器,ATI必须编写许多OpenGL扩展。专有OpenGL扩展:仅ATI。因此,您只需要一个NVIDIA代码路径和一个ATI代码路径就可以拥有shaders

现在,您可能会问:“ OpenGL ARB在哪里,它是使OpenGL保持最新状态的工作?”许多委员会经常结局的地方:不要傻了。

看到了,我在上面提到了ARB_multitexture,因为它是所有这些的深层因素。 ARB似乎(从局外人的角度来看)想完全避免着色器的想法。他们认为,如果将足够的可配置性放在固定功能管道上,则它们可以等同于着色器管道的功能。

因此,ARB在扩展后发布了扩展。其中每个带有“ texture_env”字样的扩展都是对这种老化设计进行修补的另一种尝试。检查注册表:在ARB和EXT扩展之间,有eight个扩展。许多已升级为OpenGL核心版本。

微软此时是ARB的一部分。他们在D3D 9命中时就离开了。因此,他们完全有可能以某种方式破坏OpenGL。我个人对此理论有怀疑,有两个原因。第一,他们将不得不从其他ARB成员那里获得帮助,因为每个成员只有一票。最重要的两个是,ARB不需要Microsoft的帮助即可解决问题。我们将进一步证明这一点。

最终,ARB可能受到ATI和NVIDIA(均为活跃成员)的威胁,最终他们的脑袋抽出了足够长的时间来提供实际的组装式着色器。

想要什至是愚蠢的东西吗?

硬件T&L。 OpenGL有first。好吧,这很有趣。为了从硬件T&L中获得最大的性能,您需要将顶点数据存储在GPU上。毕竟,实际上是GPU要使用您的顶点数据。

在D3D v7中,Microsoft引入了顶点缓冲区的概念。这些是为分配顶点数据而分配的大量GPU内存。

是否想知道OpenGL何时获得了等效的支持?噢,NVIDIA是OpenGL的全部爱好者(只要它们是专有的NVIDIA扩展),就在GeForce 256首次发布时发布了顶点阵列范围扩展。但是ARB何时决定提供类似功能?

两年后。这是after,他们批准了顶点和片段着色器(D3D语言中的像素)。这就是ARB开发跨平台解决方案以在GPU内存中存储顶点数据所花的时间。同样,硬件T&L需要才能达到最佳性能。

一种语言摧毁所有人

因此,OpenGL开发环境曾一度破裂。没有跨硬件着色器,也没有跨硬件GPU顶点存储,而D3D用户则同时享受了两者。会变得更糟吗?

你...你可以这么说。输入3D Labs

您可能会问他们是谁?他们是一家已经停业的公司,我认为它们是OpenGL的真正杀手。当然,当ARB应该拥有D3D时,它的一般能力使OpenGL变得脆弱。但是3D Labs也许是我想到OpenGL当前市场状况的最大原因。他们可能为此做了什么?

他们设计了OpenGL阴影语言。

看得出来,3D Labs是一家垂死的公司。 NVIDIA对工作站市场的压力越来越大,他们昂贵的GPU被边缘化了。与NVIDIA不同,3D Labs在主流市场上没有任何业务。如果NVIDIA赢了,他们就死了。

他们做了。

因此,为了在不想要其产品的世界中保持相关性,3D Labs参加了一个游戏开发者大会,为他们称为“ OpenGL 2.0”的东西进行演示。这将是对OpenGL API的完整,从零开始的重写。这是有道理的;当时OpenGL的API中存在lot碎片(请注意:该碎片仍然存在)。只看纹理加载和绑定是如何工作的;它是半鹿茸。

他们提议的一部分是阴影语言。自然。但是,与当前的跨平台ARB扩展不同,它们的着色语言是“高级”的(C是着色语言的高级。是的,确实如此)。

现在,Microsoft正在开发自己的高级着色语言。在Microsoft的全部集体想象中,他们将其称为...高级着色语言(HLSL)。但是它们是对语言的根本不同的方法。

3D Labs着色器语言的最大问题是它是内置的。 HLSL是Microsoft定义的一种语言。他们为此发布了一个编译器,并生成了Shader Model 2.0(或更高版本的shader模型)汇编代码,您可以将其输入D3D。在D3D v9时代,HLSL从未直接被D3D所触及。这是一个不错的抽象,但它纯粹是可选的。开发人员总是有机会落后于编译器并调整输出以实现最佳性能。

3D Labs语言只有none。您为驱动程序提供了类似C的语言,并生成了一个着色器。故事结局。不是程序集着色器,不是您要提供的其他东西。表示着色器的实际OpenGL对象。

这意味着OpenGL用户对各种各样的开发人员持开放态度,这些开发人员刚刚掌握了汇编类语言的编译方法。编译器错误在新命名的OpenGL阴影语言(GLSL)中运行rampant。更糟糕的是,如果您设法使着色器在多个平台上正确编译(绝非易事),那么您仍然会受到当天的optimizers的影响。并不是最理想的。

虽然这是GLSL中最大的缺陷,但不是唯一的缺陷。通过far

在D3D和OpenGL中较旧的Assembly语言中,您可以混合并匹配顶点和片段(像素)着色器。只要它们与同一接口通信,就可以将任何顶点着色器与任何兼容的片段着色器一起使用。他们甚至可以接受不兼容的程度。顶点着色器可以写入片段着色器未读取的输出。依此类推。

GLSL没有任何东西。顶点着色器和片段着色器融合在一起,成为3D Labs称为“程序对象”的对象。因此,如果要共享顶点和片段程序,则必须构建多个程序对象。这引起了第二大问题。

看,3D Labs认为他们很聪明。他们基于GLSL的编译模型基于C/C++。您采用.c或.cpp并将其编译为目标文件。然后,您获取一个或多个目标文件并将它们链接到程序中。这就是GLSL的编译方式:将着色器(顶点或片段)编译为着色器对象。然后,将这些着色器对象放在程序对象中,并将它们链接在一起以形成您的实际程序。

虽然这确实允许潜在的好主意,例如使“库”着色器包含主着色器可以调用的额外代码,但实际上意味着着色器已被编译twice。一次在编译阶段,一次在链接阶段。尤其是NVIDIA的编译器,因为它基本上运行两次。它没有产生某种目标代码中介。它只是编译一次并扔掉答案,然后在链接时再次编译它。

因此,即使要将顶点着色器链接到两个不同的片段着色器,也必须比D3D进行更多的编译。尤其是因为类C语言的编译都是在offline中完成的,而不是在程序执行开始时完成的。

GLSL还有其他问题。归咎于3D Labs似乎是错误的,因为ARB最终批准并合并了该语言(但“ OpenGL 2.0”计划没有其他要求)。但这是他们的想法。

这是真正令人难过的部分:3D实验室是right(主要是)。 GLSL不是HLSL当时的基于矢量的着色语言。这是因为3D Labs的硬件是标量硬件(类似于现代NVIDIA硬件),但它们最终正确地朝着许多硬件制造商使用其硬件的方向发展。

他们选择“高级”语言的在线编译模型是正确的。 D3D甚至最终切换到了那个版本。

问题在于3D Labs在错误的time上正确。为了尽早召唤未来,为了适应未来,他们放弃了present。这听起来与OpenGL始终具有T&L功能的可能性类似。除了在硬件T&L之前OpenGL的T&L管道仍然useful,而GLSL在世界赶上它之前是一个责任。

GLSL是一种很好的语言now。但是时间呢?那太差了。 OpenGL为此蒙受了痛苦。

走向神化

虽然我坚称3D Labs遭受了致命的打击,但ARB本身却是棺材上的最后一颗钉子。

这是您可能听说过的故事。到OpenGL 2.1时,OpenGL遇到了问题。它具有lot遗留的碎片。该API不再易于使用。有5种做事方式,但不知道哪一种是最快的。您可以通过简单的教程来“学习” OpenGL,但实际上并没有真正学习能够提供真正性能和图形功能的OpenGL API。

因此,ARB决定尝试重新发明OpenGL。这类似于3D Labs的“ OpenGL 2.0”,但更好,因为ARB在它后面。他们称其为“龙峰”。

花一些时间改进API有什么不好?这很糟糕,因为微软让自己容易受到攻击。看到this是Vista切换时的。

借助Vista,Microsoft决定在显示驱动程序中进行一些急需的更改。他们迫使驱动程序向操作系统提交图形内存虚拟化和其他各种东西。

尽管人们可以争论这一点的优缺点或是否确实可行,但事实仍然如此:Microsoft认为D3D 10仅适用于Vista(及更高版本)。即使您的硬件是capable的D3D 10,也无法在不运行Vista的情况下运行D3D 10应用程序。

您可能还记得Vista ...嗯,让我们说它运行不佳。因此,您有一个性能不佳的OS,仅在该OS上运行的新API,以及需要的新一代硬件,该API和OS的运行速度比上一代还要快。

但是,开发人员可以通过OpenGL访问D3D 10级功能。好吧,如果ARB不在朗斯峰(Longs Peak)上忙,他们可以。

基本上,ARB花了一年半到两年的宝贵时间来改善API。到OpenGL 3.0真正问世时,Vista的采用率开始上升,Win7即将把Vista抛在后面,大多数游戏开发人员无论如何都不在乎D3D-10类功能。毕竟,D3D 10硬件可以很好地运行D3D 9应用程序。随着PC到控制台端口的兴起(或PC开发人员跳到控制台开发。请选择),开发人员不再需要D3D 10类功能。

现在,如果开发人员可以在WinXP机器上通过OpenGL早期访问这些功能,那么OpenGL开发可能已经需要了很多帮助。但是ARB错过了他们的机会。而且您想知道最糟糕的部分吗?

尽管花了两年宝贵的时间尝试从头开始重建API,但它们still失败了,只是恢复到了现状(不赞成使用弃用机制)。

因此,ARB不仅错过了crucial机会之窗,他们甚至没有完成使他们错过机会的任务。几乎所有的史诗失败。

这就是OpenGL与Direct3D的故事。错失良机,愚蠢,任性盲目和愚蠢的故事。

1154
Nicol Bolas

当问题是“游戏开发者”而不是“游戏编辑者”时,我发现每个人都将重点放在用户群上感到奇怪。

对我来说,作为开发人员,Linux真是一团糟。版本太多,有桌面管理器,UI工具包等。。。如果我不想以开源形式分发我的作品,则用户可以在其中(尝试)进行重新编译,以使其适合其软件包,库和设置,这是噩梦

另一方面,Microsoft(大多数时候)提供了令人难以置信的向后兼容性和平台稳定性。可以使用一个封闭源安装程序来定位整个机器范围,例如运行Windows XP,Vista和7、32和64位版本,没有适当DX或VC可再发行文件的计算机,等等...

最后一件事,请大家在网上停止比较OPENGL和DIRECTX!比较Direct3D与OpenGL或不要这样做。 DirectX提供OpenGL不提供的输入支持,声音支持,电影播放等。

133
jv42

这是因为地球上的Windows用户比Linux和Mac多。事实是,人们为拥有最大市场的人做事。
手机也是如此:Android和iPhone都有很棒的游戏,但Windows Mobile和Symbian却没有...

88
Arjun Bajaj

由于Windows拥有90%以上的市场份额,而Linux(自从您特别询问Linux以来)以拥有许多不愿意为软件付费的用户而闻名。这是真的还是无关紧要的;感觉在那里,它影响着人们的决定。

50
Mason Wheeler

由于Windows由一个庞大的组织支持,所以十多年前就决定 他们希望游戏开发在其平台上进行

对于Mac,情况并非如此,现在也不是如此。甚至不是iOS。 Apple不提供用于iOS游戏开发的工具。但是,这是一个巨大的市场(那里有更多的iPhone,比1995年的PC多了),竞争也相对较少,所以人们还是这么做了。

至于Linux,甚至没有某种中央机构可以设置任何优先级。 Linux的发展方向更多地是由一群非常优秀但略显超脱的程序员决定的。

要今天创建PC游戏,您需要很多2d/3d艺术家,游戏设计师,脚本作者,演员,测试人员,而其他人则不需要。至于实际的编程,您可能只是使用实际的游戏引擎(CryEngine,虚幻引擎,Quake引擎,源引擎)。因此,您可能不需要任何实际的程序员就可以完成整个工作。

因此,由于业务的性质,程序员几乎没有选择哪个平台的发言权。通常,经理们会寻求支持(这是Microsoft声称提供的支持),并且要处理某种程度上与他们的思想模式息息相关的事情,而开源则不是。

因此,大多数商业最终用户软件开发都在Windows上完成。
我为一家公司工作,该公司创建Flash游戏,因此不受特定平台的约束。但是,我们所有人都在Windows上进行开发,因为我们使用的大多数工具不适用于Linux。

11
back2dos

正如某些人已经说过的那样,最重要的部分是用户群。 95%的PC用户使用Windows。 PC游戏玩家几乎只使用Windows。即使是那些使用Mac或Linux的用户,也经常通过某种虚拟化或仿真(很少例外)来运行Windows游戏。

但是人口统计并不是一切。我不会低估Microsoft为使平台对游戏开发人员更具吸引力所做的努力。基本上,您可以获得功能齐全的 免费工具集 ,最重要的是 XNA Game Studio 。这不仅允许针对Windows进行开发,还允许进行Xbox36。并且即使是WP7手机也具有最新版本。显然,由于它是Microsoft工具,因此它使用DirectX,而不是OpenGL。

10
vartec

Ewwww,我不知道。我几乎专门使用Linux。我双重引导到Windows以制作Windows版本,并使用Mac作为Mac版本,仅此而已。

诀窍是我们多年来开发的跨平台框架。我们的游戏建立在此之上,并且在Linux/OpenGL,Mac/OpenGL和Windows/Direct3D(以及不久在iOS/OpenGL)中表现相同。

坦率地说,我的公司没有AAA称号,因此可能不适用于这些游戏,但我们确实制作了顶级休闲游戏(请参阅 网站 -CSI:NY,Murder She Wrote和即将推出的两个2011年代就是示例)使用重要许可的书名,《福尔摩斯1和2的失落案》也相当成功)

我不会为其他任何事情放弃gedit + gcc + gdb + valgrind。

6
ggambett

工具,工具,工具。

这就是结果。在Windows上进行开发,您就可以使用地球上一些最佳的开发工具。甚至没有什么比Visual Studio的调试器更接近远程的了,DirectX调试运行时很棒,PIX很棒,并且其他平台/ API上不存在类似的等效物。当然,那里有一些好东西。我并不是说其他​​平台上的工具很糟糕,但是MS提供的工具远远领先于其他工具(尊敬的例外:Valgrind),甚至都不好笑。

最重要的是,这些工具可以为您提供帮助。它们可以帮助您完成工作,可以帮助您提高工作效率,可以帮助您专注于自己代码中的错误,而不必为从未有过文档记载的API苦苦挣扎。

4
Maximus Minimus

因此,我已经解决了所有这些答案,作为一个游戏开发人员,他拥有沃尔玛上架的主机游戏代码,所以我有一个非常不同的答案。

分配。

看,如果您想在Nintendo主机上使用,则必须先获得Nintendo的许可,从Nintendo的工厂购买产品,支付Nintendo的间接费用,与沃尔玛进行谈判,进行仓储,您需要预先支付制造,印刷盒,运输的费用。 ,做所有的保险等等。

如果您想使用XBox,请确保有XBLA,但是您仍然需要Microsoft的祝福,您必须排队等候,仅发布补丁程序就得花费数万美元,等等。

在iOS上,您仍然需要Apple的同意,他们可以(也可以)反复无常地拉您。

在Steam上,您仍然需要Valve的许可或绿灯,并且需要很多钱。

在Windows上?您设置了一个网站和一个下载按钮。

我并不是说其他​​平台没有价值。但是,当您尝试开发游戏时,会发生so *很多*令人毛骨悚然的事情,对我来说,这就是希望能够在站点上拍一个二进制文件并专注于工作-至少开始使用-确实降低了许多潜在的故障壁垒。

“如果情况稳定,我们可以稍后再进行XBLA移植”。

并在较小程度上确保这对Linux也适用,如果有七个客户,则可以从那里开始。

但是Windows具有三个巨大的优势:真正的开放式开发,真正的开放式部署,以及对古怪的东西感兴趣的庞大,活跃的客户群。

很难想象我还要从哪里开始。

4
John Haugeland

答案是显而易见的。编写游戏的目的是赚钱。更多的最终用户使用Windows,因此有一个更大的市场,并且您期望Windows游戏比Linux游戏赚更多的钱。就这么简单。

如果您曾经问​​自己“为什么有人做...”这个问题,请记住,金钱使世界运转。

4
Russell Horwood
  1. 惯性。如果您过去曾经使用过Windows,那么切换到其他东西会很麻烦。如果您使用的是Windows,则DirectX比OpenGL更容易且更可能很好地工作。
  2. 市场份额。 Windows在台式机上的市场份额大于OS X,后者又比Linux更大。有钱能使鬼推磨。
  3. 牌。 DirectX比诸如SDL之类的东西更为人所知(SDL是复制OpenGL以外的DirectX某些功能所需要的东西)。
  4. 减少混乱。用户的Linux是否仅支持OpenGL 1.4或OpenGL 2+?您是否可以使用OpenGL 2.0教程 现代OpenGL入门。第1章:图形管线 在您的Linux版本上?

如今,在游戏开发方面,Linux更像是一个老古董,大多数开发者最好在Linux版本之前在财务上优先选择OS X端口版本(参见Steam之类的东西)。即使那样,游戏机市场的价值还不止这两个游戏平台的总和。

如果要单声道平台,DirectX很好。如果您想成为跨平台平台,则很有可能必须至少在其他一些平台上使用OpenGL。

4
Anon

我认为您应该阅读有关 DirectX本文 的历史的更多信息。

我认为MS选择DX而非openGL是因为他们喜欢锁定人们使用自己的OS。

3
Mahmoud Hossam

与政治和控制有很多关系。在90年代后期,SGI和MS实际上同意共同努力:

http://en.wikipedia.org/wiki/Fahrenheit_graphics_API

SGI在该项目上投入了大量资金,MS没有。 SGI比MS需要SGI更需要MS。剩下的就是历史了。

D3D和OpenGL是两个非常不同的API,开发人员可以选择最适合您需要的API。

1
quellish

仅仅是因为Linux作为台式机系统严重失败。正如之前有人指出的那样,Linux对开发人员来说是一团糟(不同的库,ui工具包等)

另一个问题是freetardism和缺乏对专有软件的支持。 Nvidia始终为Linux提供优质的(专有)驱动程序,但是Ubuntu和其他发行版均未提供。与Windows一样,Linux也没有二进制驱动程序接口。 (有一个名为binaryApiNonsense.txt的文本文件或Kernel源代码中的某个文件)话虽如此,但Linux仅正确支持Nvidia硬件。您可以在Linux下使用Nvidia硬件玩大多数ID软件游戏。

下一件事开发工具。 MSFT提供了出色的C++支持,就C++而言,Visual Studio调试器优于gdb。最后但并非最不重要的是,缺少其他工具,例如Photoshop。 .net还允许您快速创建GUI工具。许多游戏工作室使用.net框架编写其工具供内部使用。

我几乎忘记了:图形系统是可怕的,在他们刚刚移植X11的日子里,因为它是最简单的方法。他们未能正确设计和实现OSx和Win拥有的现代图形系统。

0
Nils