为什么没有适用于Linux的DirectX API?

时间:2012-06-20 13:57:49

标签: linux directx drivers

考虑到Windows系统上用于现代视频卡的DirectX API的驱动程序端实现,我想知道为什么这个实现在非Windows系统上不可用,最明显的是linux。

由于显然没有这个功能,我只能假设有一个很好的理由让我视而不见,但在我的原始理解中,我只是看到DirectX调用只不过是硬件设备上的函数入口点。而对于记录,我不是指兼容层(最值得注意的是WINE,我每天都惊讶的项目),而是一个直接硬件调用的库。

是否可以创建directx的开源版本?是否可能但是非常困难?

6 个答案:

答案 0 :(得分:14)

AFAIK,DirectX包含3个部分

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

没有驱动程序提供DX在Linux上定义的低级API,所以即使可以提供DirectX库,但如果没有合适的供应商驱动程序它将无法工作,我看不出是否有任何供应商将为他们的硬件平台创建一个。

答案 1 :(得分:6)

为什么不使用OpenGL?它支持DirectX的所有功能。您是否有特定理由使用DirectX?至于一个原因,Microsoft made DirectX,我猜他们认为没有必要允许它在Linux上运行。

您可以运行DirectX games in Linux using Wine。您可以使用MonoGame在Linux上编写XNA。但所有这些都使用OpenGL来提供硬件加速渲染。 AFAIK,在可预见的未来,OpenGL已经(并且可能将成为)Linux上的唯一选择。

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

答案 2 :(得分:1)

为DirectX创建端口的工作会产生与在WINE中遇到的问题相同的问题。它永远不会像在Windows上一样。根据该原则,您必须研究OpenGL和相关的多平台库。

在这个时刻,如果你想用你已经拥有的DirectX代码完成某些事情,WINE将是你最接近的媒介。然后,我不确定Visual Studio或普通打字会以什么方式让您更接近流畅的环境。 WINE图书馆离原生图书并不遥远,但总是存在仿真,在我的诚实观点中,某些点可以接受。

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

如果您真的想在这方面开展工作,您可以尝试在他们的论坛或邮件列表中询问WINE Devs如何仅使用他们的DirectX兼容性的实现并在您的项目中使用它。您可以在哪里调用库,而不是通过Windows模拟系统调用请求DirectX。

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

答案 3 :(得分:1)

DirectX是API的一套:

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

不推荐使用DirectX组件,但仍然支持

  • 的DirectDraw
  • DirectInput的
  • 的DirectPlay
  • DirectSound的
  • 的DirectMusic

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

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

然而,如果你提出的问题更多的是"我可以获得/写一些东西,以便能够运行使用DirectX在Linux上运行的游戏和程序吗?"在其含义中,简而言之,不是因为更有可能侵犯版权。

答案 4 :(得分:0)

DirectX是专为Microsoft目标设计的专有产品,因此实现这一目标非常不寻常

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

OpenGL提供DirectX的硬件替代方案,SDL与OpenGL协同工作,提供您期望从DirectX获得的软件支持

答案 5 :(得分:0)

您的问题在2019年是错误的。DXVK是使用Vulkan和Wine的Linux D3D11和D3D10实现