【问题标题】:Why does Direct3D work only on Windows?为什么 Direct3D 只能在 Windows 上运行?
【发布时间】:2011-08-02 17:01:08
【问题描述】:

什么是 Direct3D?它是一个 API,不是吗?是Windows实现的还是显卡实现的?

如果显卡实现了 Direct3D API,为什么其他操作系统不能使用显卡的 Direct3D 资源?

如果 Direct3D 是由 Windows 实现的,它必须使用显卡资源,例如 OpenGL 或 OpenCL。如果 Direct3D 调用不直接到显卡,由于中间调用,它会更慢。

请帮助我了解 Direct3D 是什么。

【问题讨论】:

  • 如果我将此作为答案,它将被“fanbois”粗暴地否决,但这是直接的答案:Direct3D 仅适用于 Windows,因为这就是 MS 保留对游戏的独占访问权限的方式。这是一种营销限制,而不是技术限制。它可以扩展为在其他系统上运行,但这不是 Microsoft 的业务目标。
  • @SpliFF 幸运的是我不是粉丝,我同意,但也不同意你的观点。 Direct3D 使用各种 Windows 专有模块。移植它,虽然我怀疑可能,但往往不是一个坏主意。
  • 我完全同意上面的 SpliFF,这很明显。如今,游戏开发人员几乎只使用 DirectX API(尽管这可能正在慢慢改变)。有关更多信息,请参阅下面的我的回复。然而,移植它并非易事,但 Wine 似乎做得很好。最重要的因素是游戏开发者是选择使用 OpenGL 还是 DirectX。

标签: windows graphics direct3d gpu


【解决方案1】:

什么是 Direct3D?它是一个 API,是 不是?是否由 Windows 实现 还是显卡?

是的,Direct3D 是一种 API。它(主要)由 Windows 本身实现。但是,Windows 会将相当一部分的实际工作交给显卡的驱动程序,最终交给 gfx 卡本身,因此也可以说 gfx 卡“实现”了 D3D。

如果显卡实现 Direct3D API,为什么不能其他 操作系统使用 Direct3D 显卡资源?

他们可以,而且他们确实做到了,但只有相对较小(但通常是关键部分)的 D3D 功能是由卡的硬件直接实现的,因此需要在软件方面做更多的工作来实现 D3D。

如果 Direct3D 由 Windows 实现, 它必须使用显卡资源, 例如 OpenGL 或 OpenCL。

不,这是个误会。 OpenGL 和 OpenCL 也是 API,仅部分由 gfx 硬件实现(就像 D3D 一样)。 gfx 硬件通常具有(专有)“本机”API,这是 gfx 驱动程序(用于 D3D 和 OpenGL)使用的。

如果 Direct3D 调用不是直接 显卡,会比较慢 由于中间调用。

不一定有任何“中间调用” - D3D 驱动程序使用卡片本机 API,如上所述。

【讨论】:

    【解决方案2】:

    Direct 3D 是 Microsoft 创建的图形 API。它的功能类似于opengl。 OpenGL 是作为开放标准创建的竞争 3D 图形 API。 D3D 不需要 OpenGL 即可运行。

    卡制造商决定他们想要实现哪些 API;大多数总是包括 DirectX(包括 Direct3D)和可能的 OpenGL。

    存在间接性,因为它不直接访问卡,卡 D3D 依次调用驱动程序,但这通常无关紧要。

    【讨论】:

      【解决方案3】:

      Direct3D 是由 Microsoft 开发的 API,旨在帮助开发人员渲染 3D 图形。 OpenGL 和 Direct3D 是两个独立的 API,但它们都必须使用制造视频卡的公司开发的驱动程序连接到视频卡。两种 API(Direct3D 和 OpenGL)都必须通过驱动程序才能访问显卡,它们的速度取决于它们的设计和在显卡驱动程序中的实现。

      OpenCL 与众不同——它旨在帮助开发人员编写在 GPU 上执行通用计算的程序(不仅仅是用于图形)。 OpenCL 可与 CUDA 相媲美,但后者仅在 NVIDIA 卡上受支持。使用 CUDA 代替 OpenCL 可能有一些优势,具体取决于您的目标系统,因为 NVIDIA 可以在 CUDA API 接受新功能之前将其提供给 OpenCL API。然而,即使是 OpenCL 和 CUDA 也必须与驱动程序接口才能在 GPU 上完成任何操作。

      如您所知,Direct3D 仅适用于 Microsoft 和 Wine(大部分情况下),但其作为 API 的结构与 OpenGL 的结构大不相同。 Direct3D 使用结构并在其 API 中包含更多 OOP 元素,而 OpenGL 充当状态机,缺乏任何结构或 OOP 功能。 Direct3D 在其 API 中声称正式支持的功能方面通常可以比 OpenGL 快一点,因为它的设计不是为了与各种设备实现最大兼容性;另一方面,OpenGL 在采用新功能时通常表现出更大的惯性,因为在其 API 中添加新功能固有的困难(Khronos Group 深受 CAD 行业以及许多其他行业的影响,因此它必须满足广泛的需求)。 Khronos Group 最终在 OpenGL 中采用异步 API 调用的时间证明了这一事实,也让很多人对 OpenGL 失去了信心。

      但是,OpenGL 是跨平台的,得到 Apple 的认可,并且可以在所有实现它的操作系统上运行。您可以轻松地将它与许多流行的窗口工具包(Qt、SDL、FreeGLUT、JogAmp、gtk 等)一起使用,并且如果您编写得当,您可以确信您的应用程序可以在其他操作系统上编译。与 Direct3D 不同,OpenGL API 是一种开源行业标准。

      就性能而言,哪个更快仍然存在争议:取决于您如何构建程序或批处理调用,这可能会发生变化。但是,性能不应该是您使用哪种 API 的真正考虑因素,除非您已经测试过您的应用程序并且有证据表明 API 的选择是您的瓶颈的原因。

      【讨论】:

        【解决方案4】:

        来自Wikipedia

        Direct3D 是 Microsoft DirectX API 子系统组件。目标是 Direct3D 是抽象的 图形之间的通信 应用程序和图形硬件 司机。它像薄薄的一样呈现 具有可比性的抽象层 到 GDI(见附图)。 Direct3D 包含许多功能 GDI 所缺乏的。

        Direct3D 是即时模式图形 API。它提供了一个低级接口 到每个显卡的 3D 功能 (变换、剪裁、照明、 材质、纹理、深度缓冲 等等)。它也有更高的水平 保留模式组件,即现在 已正式停产。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多