什么是Direct3D?这是一个API,不是吗?它是由Windows实现的还是由显卡实现的?
如果显卡实现了Direct3D应用编程接口,为什么其他操作系统不能使用显卡中的Direct3D资源?
如果Direct3D是由Windows实现的,它必须使用图形卡资源,如OpenGL或OpenCL。如果Direct3D调用不是直接针对显卡的,那么由于中间调用,它将变得更慢。
请帮我理解一下Direct3D是什么。
发布于 2011-04-11 08:43:56
什么是Direct3D?这是一个API,不是吗?它是由Windows实现的还是由显卡实现的?
是的,Direct3D是一个接口。它(主要)由Windows本身实现。然而,Windows将把相当一部分的实际工作转移给显卡的驱动程序,并最终转移到gfx卡本身,因此也可以说gfx卡“实现”了D3D。
如果显卡实现了Direct3D应用编程接口,为什么其他操作系统不能使用显卡中的Direct3D资源?
它们可以,而且它们确实做到了,但只有相对较小(但通常是关键部分)的D3D功能是由卡的硬件直接实现的,因此实现D3D需要更多的软件工作。
如果Direct3D是由Windows实现的,它必须使用图形卡资源,如OpenGL或OpenCL。
不,那是个误会。OpenGL和OpenCL也是API,只是部分由gfx硬件实现(就像D3D一样)。gfx硬件通常有一个(专有的)“本机”API,这是gfx驱动程序(用于D3D和OpenGL)所使用的。
如果Direct3D调用不是直接针对显卡的,则由于中间调用,速度会较慢。
不一定有任何“中间调用”--如上所述,D3D驱动程序使用卡的本机应用程序接口。
发布于 2011-04-11 08:35:18
Direct 3D是Microsoft创建的图形API。它在功能上类似于opengl。OpenGL是一个竞争对手的3D图形应用编程接口,是作为一个开放标准创建的。D3D不需要OpenGL就能正常工作。
卡制造商决定他们想要实现哪些API;大多数总是包括DirectX (包括Direct3D),可能还包括OpenGL。
有间接性,因为它不直接转到卡,卡D3D反过来调用驱动程序,但这通常是微不足道的。
发布于 2011-04-11 08:38:52
Direct3D是微软开发的一种应用编程接口,旨在帮助开发人员渲染3D图形。OpenGL和Direct3D是两个独立的API,但它们都必须使用视频卡制造商开发的驱动程序连接到视频卡。两个API (Direct3D和OpenGL)都必须通过驱动程序才能访问视频卡,它们的速度取决于它们的设计和在视频卡驱动程序中的实现。
OpenCL则有所不同--它的设计目的是帮助开发人员编写在图形处理器上执行通用计算的程序(不仅仅是图形计算)。OpenCL与CUDA相当,但后者仅在NVIDIA卡上受支持。使用CUDA而不是OpenCL可能会有一些优势,这取决于您的目标系统,因为NVIDIA可以在新特性被OpenCL API接受之前使其可用于CUDA API。然而,即使是OpenCL和CUDA也必须连接到驱动程序,才能在GPU上完成任何工作。
正如你已经知道的,Direct3D只能在微软和Wine上运行(在很大程度上),但它的结构与OpenGL有很大的不同。Direct3D使用了结构,并在其API中包含了更多的OOP元素,而OpenGL则充当状态机,缺乏任何结构或OOP特性。在声称在其应用程序接口中正式支持的功能方面,Direct3D通常可以比OpenGL进展得更快,因为它的设计不是为了与广泛的设备最大限度地兼容;另一方面,OpenGL在采用新功能时通常表现出更多的惰性,因为在向其API添加新功能方面存在固有的困难( Khronos Group受到CAD行业以及许多其他行业的严重影响,因此它必须迎合广泛的需求)。Khronos Group最终在OpenGL中采用异步API调用所花费的时间证明了这一事实,并导致许多人对OpenGL失去了信心。
然而,OpenGL是跨平台的,得到了苹果的认可,它可以在所有实现它的操作系统上工作。您可以轻松地将其与许多流行的窗口工具包(Qt、SDL、FreeGLUT、JogAmp、gtk等)一起使用。如果您编写得当,请相信您的应用程序将在其他操作系统上编译。与Direct3D不同,OpenGL应用编程接口是一种开源的行业标准。
就性能而言,哪一个更快仍然是有争议的:根据你的程序结构或批处理调用的方式,这种情况可能会改变。但是,除非您已经测试了应用程序,并且有证据表明API的选择是造成瓶颈的原因,否则性能不应该是您使用的API的真正考虑因素。
https://stackoverflow.com/questions/5615698
复制相似问题