为什么Direct3D仅适用于Windows?

时间:2011-04-11 00:29:55

标签: windows graphics direct3d gpu

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

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

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

请帮助我理解Direct3D是什么。

4 个答案:

答案 0 :(得分:1)

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

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

存在间接性,因为它没有直接进入卡,卡D3D反过来调用驱动程序,但这通常是无关紧要的。

答案 1 :(得分:1)

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。

答案 2 :(得分:0)

来自Wikipedia

  

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

     

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

答案 3 :(得分:0)

  

什么是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,如上所述。