21

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

由于明显缺乏此功能,我只能假设有一个我不知道的充分理由,但在我的原始理解中,我只是将 DirectX 调用视为硬件设备上的函数入口点。为了记录,我指的不是兼容层(最值得注意的是 WINE,一个我每天都为之惊叹的项目),而是一个直接进行硬件调用的库。

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

4

6 回答 6

18

AFAIK,DirectX 包含 3 个部分

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

linux上没有提供DX定义的低级API的驱动,所以即使提供DirectX库也是可以的,但是如果没有合适的厂商驱动就不行,我也看不到有没有厂商在为他们的硬件平台创建一个。

于 2012-06-20T14:14:46.933 回答
8

为什么不直接使用 OpenGL?它支持 DirectX 的所有功能。您有使用 DirectX 的特定理由吗?至于一个原因,微软制造了 DirectX,我猜他们认为没有必要让它在 Linux 上运行。

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

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

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

于 2012-06-20T14:10:06.210 回答
3

DirectX 是一套 API:

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

DirectX 组件已弃用,但仍受支持

  • 直接绘图
  • 直接输入
  • 直接播放
  • 直接声音
  • 直接音乐

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

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

但是,如果您的问题更多的是“我可以获取/编写一些东西来运行使用 DirectX 制作的游戏和程序以在 Linux 上运行吗?” 就其含义而言,总之没有,因为更有可能侵犯版权。

于 2014-12-29T09:02:35.853 回答
2

为 DirectX 创建端口的工作会产生与您在 WINE 中遇到的相同的问题。它永远不会与 Windows 相同。源自该原则,您将不得不研究 OpenGL 和相关的多平台库。

此时此刻,如果您想使用已有的 DirectX 代码完成某事,WINE 将是您最接近的媒介。再说一次,我不确定 Visual Studio 或普通打字会以何种方式让您更接近流利的环境。WINE 库与原生库相距不远,但始终存在仿真,在我诚实的观点中,在某种程度上是可以接受的。

如果我看看《最终幻想 XIV》在我的 iMac(2011 年)的完整设置上运行得多么出色,我认为依靠 WINE 的实现并没有那么糟糕。该游戏与我的 iMac 上的 Bootcamp (Windows) 完全一样。

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

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

于 2012-06-20T15:20:51.070 回答
2

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

mesa 也有原生 Direct3D 9 实现,但据我所知,除了 wine 没有人使用它

于 2019-01-28T13:30:41.890 回答
0

DirectX 是专为 Microsoft 目标设计的专有产品,因此发生这种情况将是非常不寻常的

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

OpenGL 提供 DirectX 的硬件替代方案,SDL 与 OpenGL 一起提供您期望 DirectX 提供的软件支持

于 2017-04-23T17:23:53.750 回答