考虑到Windows系统上用于现代视频卡的DirectX API的驱动程序端实现,我想知道为什么这个实现在非Windows系统上不可用,最明显的是linux。
由于显然没有这个功能,我只能假设有一个很好的理由让我视而不见,但在我的原始理解中,我只是看到DirectX调用只不过是硬件设备上的函数入口点。而对于记录,我不是指兼容层(最值得注意的是WINE,我每天都惊讶的项目),而是一个直接硬件调用的库。
是否可以创建directx的开源版本?是否可能但是非常困难?
答案 0 :(得分:14)
AFAIK,DirectX包含3个部分
没有驱动程序提供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的一套:
不推荐使用DirectX组件,但仍然支持
正如您所看到的,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实现