为什么Linux没有DirectX API?

为什么Linux没有DirectX API?,linux,directx,drivers,Linux,Directx,Drivers,在考虑现代视频卡的windows系统上DirectX API的驱动程序端实现时,我想知道为什么在非windows系统(尤其是linux)上不提供此实现 由于明显缺少此功能,我只能假设有一个我不知道的好理由,但在我的原始理解中,我只是将DirectX调用视为硬件设备上的函数入口点。作为记录,我指的不是兼容层(最著名的是WINE,我每天都对这个项目感到惊讶),而是一个直接调用硬件的库 可以创建directx的开源版本吗?这可能吗,但非常困难?为什么不直接使用OpenGL呢?它支持DirectX的所有

在考虑现代视频卡的windows系统上DirectX API的驱动程序端实现时,我想知道为什么在非windows系统(尤其是linux)上不提供此实现

由于明显缺少此功能,我只能假设有一个我不知道的好理由,但在我的原始理解中,我只是将DirectX调用视为硬件设备上的函数入口点。作为记录,我指的不是兼容层(最著名的是WINE,我每天都对这个项目感到惊讶),而是一个直接调用硬件的库


可以创建directx的开源版本吗?这可能吗,但非常困难?

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

你可以跑。您可以使用在Linux上编程XNA。但所有这些都使用OpenGL提供硬件加速渲染。好吧,在可预见的未来,OpenGL已经(并且可能会)成为Linux上的唯一选项

是否可以编写自己的DirectX实现?当然,但这涉及到编写驱动程序、专有知识,而且可能会花费太多的成本,任何人都无法从中真正获益


编辑:现在,这是在Linux上运行DirectX应用程序的一种非常真实和高效的方式。

好的,DirectX包含3个部分

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

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

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

此时此刻,如果您想用已有的DirectX代码完成某些事情,葡萄酒将是最接近您的媒介。再说一次,我不确定Visual Studio或普通打字会以何种方式让您更接近一个流畅的环境。葡萄酒库离本土并不远,但总会有模仿,这在我诚实的观点中是可以接受的

如果我看看Final Fantasy XIV在iMac(2011)上的完整设置下运行得多么出色,我认为依赖WINE的实现并没有那么糟糕。游戏的渲染方式与我的iMac上的Bootcamp(Windows)完全相同

如果你真的想在这方面有所作为,你可以试着在WINE开发者的论坛或邮件列表上询问他们,你如何可能只使用DirectX兼容性的实现,并在你的项目中使用。您可以在其中调用库,而不是通过Windows模拟系统调用请求DirectX


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

DirectX是一套API:

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

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic
正如您所看到的,DirectX API套件的许多部分需要使用为Linux编写的驱动程序的功能进行重写。此外,DirectX诉讼的某些部分可能会调用Windows操作系统,这些代码必须在不侵犯DirectX或Windows操作系统的副本编写部分的情况下为Linux机器重写

是的,您可以编写一套开放源代码API套装,它可以完成与DirectX for Linux相同的工作,但是如果没有他们的制造商对Linux的声音和图形驱动程序/支持的深入了解,这将是一项非常困难的任务


然而,如果你的问题更多的是“我可以得到/写一些东西来运行用DirectX制作的游戏和程序在Linux上运行吗?”这意味着,简言之,不可能是因为更可能的版权侵权。

DirectX是专为Microsoft targets设计的适当产品,因此发生这种情况是非常不寻常的

我想到了另外两种软件,SDL和OpenGL


OpenGL提供了DirectX的硬件替代方案,SDL与OpenGL合作,提供您期望从DirectX获得的软件支持。您的问题在2019年是错误的。是使用Vulkan和Wine的Linux D3D11和D3D10实现的一个实现

此外,mesa还有本机Direct3D 9实现,但以我所知