2014-09-02 61 views
4

我很新的图形编程,并试图了解“图形编程如何工作”。从目前为止我读到的内容,我还不清楚OpenGL和Direct3D等API在哪里以及谁实际实现了它们?OpenGL和Direct3D:从程序员的角度来看,他们站在哪里?

驱动程序直接与硬件对话。所以NVIDIA/AMD等编写驱动程序,其他人需要在这些API之上实现这些API?但是我在Nvidia网站上看到了“OpenGL驱动程序”,这意味着OpenGL实际上是一个直接与图形硬件对话的驱动程序级API?那么Nvidia/AMD是否实现了这些API?

我可以理解在OpenGL/Direct3D之上编写的游戏引擎等,但无法弄清楚这些API从程序员的角度出发。

+0

看到我的答案在这里:http://stackoverflow.com/a/6401607/524368 – datenwolf 2014-09-02 22:31:09

+1

我恭敬地不同意 - 虽然你的回答非常详细,但它不包括Direct3D。 – 2014-09-03 02:57:52

回答

6

Direct3D本身完全由微软实施。但是,它指定了一个更低级别的API(DXGI DDIDirect3D DDI),然后由Nvidia/AMD作为设备驱动程序的一部分来实现。所以基本上D3D是应用程序代码和驱动程序代码之间的一个垫脚。最近图形体系结构的进步使D3D提供的中间层变得更薄更薄,以减少CPU开销。

Windows下的OpenGL实现方式类似:Microsoft提供了OpenGL API的面向应用程序的实现,但将其转发给设备驱动程序实现the OpenGL Installable Client Driver

在Windows下OpenGL实现的质量已知因供应商而异。出于这个原因,Firefox和Chrome都通过ANGLE执行WebGL,将OpenGL API调用转换为Direct3D API调用,从而获得更稳定的代码路径。

+0

这真的很丰富,但是关于openGL呢?在最后一句话中,你说DXGI DDI正在变得越来越薄? – Sreekar 2014-09-02 20:03:07

+0

@Sreekar:我认为他的意思是微软的特定部分,Direct3D,是驱动程序和应用程序之间的部分。趋势是让应用程序在应用程序和硬件之间尽可能的简化抽象,另请参阅AMD Mantle或Apple Metal。 – Antoine 2014-09-02 20:51:01

+0

修正。其他人将不得不填写Linux的细节。 – 2014-09-02 20:59:14

相关问题