为什么没有Linux的DirectX API?

考虑到现代video卡的Windows系统上的DirectX API的驱动程序端实现,我想知道为什么这个实现在非Windows系统,特别是Linux上不可用。

由于这个function显然不存在,我只能假定我有一个很好的理由,但是在我原始的理解中,我只是将DirectX调用看作硬件设备上的函数入口点。 而对于logging来说,我并不是指兼容性层(最值得注意的是WINE,一个我每天都为之惊叹的项目),而是一个直接硬件调用的库。

是否有可能创build一个开放源代码版本的DirectX? 这是可能的,但是很难实现吗?

AFAIK,DirectX包含3个部分

  • 供应商驱动程序(提供由DX定义的低级API)
  • DirectX库(使用DX定义的低级API访问硬件,提供DirectX API)
  • 软件(使用DirectX API,例如游戏)

在linux上没有提供由DX定义的低级API的驱动程序,所以即使可以提供DirectX库也是如此,但是如果没有适当的供应商驱动程序,它也不能工作,而且我也看不到有什么供应商会去为他们的硬件平台创建一个。

为什么不使用OpenGL? 它支持DirectX所具有的所有功能。 你有使用DirectX的具体原因吗? 出于某种原因, 微软制造了DirectX ,我想他们没有看到任何需要让它在Linux上运行。

您可以使用Wine在Linux中运行DirectX游戏 。 您可以使用MonoGame在Linux上编写 XNA。 但是所有这些都使用OpenGL来提供硬件加速渲染。 AFAIK,在可预见的未来,OpenGL已经(也可能是)Linux上唯一的选择。

是否有可能编写自己的DirectX实现? 当然 – 但它涉及到写驱动程序,专有知识和可能太多的成本让任何人真正从中受益。

为DirectX创建端口的工作会产生与您在WINE中遇到的相同的问题。 它永远不会像在Windows上一样。 从这个原则衍生出来,你将不得不考虑OpenGL和相关的多平台库。

在这个时候,如果你想用你已经拥有的DirectX代码完成一些事情,WINE将会是你最接近的媒介。 然后再次,我不确定Visual Studio或简单的打字会使你更接近流畅的环境。 WINE图书馆距离本土并不遥远,但总是存在一些仿效,在我诚恳的意见中,某个特定点是可以接受的。

如果我看看“最终幻想XIV”在我的iMac(2011)上的完整设置有多么出色,我认为依靠WINE的实现并不是那么糟糕。 游戏完全呈现在我的iMac的Bootcamp(Windows)上。

如果你真的想在这个方面工作,你可以尝试在论坛或邮件列表中询问WINE Devs如何使用DirectX兼容性的实现,并在你的项目中使用它。 你也许可以调用库,而不是通过Windows仿真的系统调用请求DirectX。

编辑:我完全同意user956030的答案。

DirectX是一套API的:

  • Direct3D (绘制3D图形)
  • DirectX Graphics Infrastructure (枚举适配器和监视器并管理交换链)
  • Direct2D (绘制2D图形)
  • DirectWrite (字体)
  • DirectCompute (GPU计算)
  • DirectSound3D (播放3D声音)
  • DirectX媒体 (用于2D / 3D网络动画的DirectAnimation,用于多媒体播放和流媒体的DirectShow,用于网络交互的DirectX变换以及用于更高级3D图形的Direct3D保留模式)
  • DirectX诊断 (用于诊断和生成与DirectX相关组件的报告的工具,例如音频,视频和输入驱动程序)
  • DirectX媒体对象 (支持流媒体对象,如编码器,解码器和效果)
  • DirectSetup (安装DirectX组件,以及检测当前的DirectX版本)

DirectX组件已弃用,但仍支持

  • DirectDraw的
  • 直接输入
  • DirectPlay的
  • DirectSound的
  • 的DirectMusic

正如你所看到的,API的许多部分都需要用针对Linux编写的驱动程序的功能重写。 DirectX套装的某些部分可能会调用Windows操作系统,并且代码将不得不为Linux机器重写,而不会侵犯DirectX或Windows操作系统的复制部分。

是的,你可以编写一个开源的API套装,它与DirectX for Linux有同样的功能,但是如果没有Linux制造商的声音和图形驱动程序/支持,那么这将是一个非常艰巨的任务。

但是,如果你的问题更多的是“我可以得到/写一些能够运行DirectX的游戏和程序在Linux上运行吗? 在这个意义上,总之没有因版权侵权而更有可能。

DirectX是专为Microsoft目标设计的专有产品,因此,这种情况将非常罕见

还有另外两个软件,SDL和OpenGL

OpenGL提供了DirectX的硬件替代品,而SDL与OpenGL一起提供了您期望从DirectX获得的软件支持