OpenGL和Direct3D:从程序员的角度来看,它们各自处于什么位置?

4

我对图形编程非常陌生,正试图理解“图形编程如何工作”。从我到目前为止所读的内容来看,我仍然不清楚像OpenGL和Direct3D这样的API处于什么位置,实际上是谁在实现它们?

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

我可以理解基于OpenGL/Direct3D编写的游戏引擎等,但无法确定这些API在程序员的角度上确切的位置。


请查看我的答案:https://dev59.com/MGw15IYBdhLWcg3wxuvL#6401607 - datenwolf
1
我非常尊重地不同意 - 虽然您的回复非常详细,但它并没有涵盖Direct3D。 - Alexander Gessler
1个回答

6

Direct3D本身完全由Microsoft实现。但是,它指定了一个更低级别的API(DXGI DDIDirect3D DDI),然后由Nvidia/AMD作为设备驱动程序的一部分实现。因此,D3D基本上是应用程序代码和驱动程序代码之间的桥梁。图形架构的最新进展导致D3D提供的中间层变得越来越薄,以减少CPU开销。

在Windows下,OpenGL的实现方式类似:Microsoft提供面向应用程序的OpenGL API实现,但将其转发到设备驱动程序实现OpenGL可安装客户端驱动程序

在Windows下,OpenGL的实现质量因供应商而异。因此,Firefox和Chrome都通过ANGLE执行WebGL,将OpenGL API调用转换为Direct3D API调用,从而采用更稳定的代码路径。

那真的很有启发性,但是关于OpenGL呢?在最后一句话中,你是说DXGI DDI正在变得更薄了对吧? - Sreekar
@Sreekar:我认为他指的是微软特定的部分,Direct3D,位于驱动程序和应用程序之间。趋势是尽可能地减少应用程序和硬件之间的抽象层,也可以参考AMD Mantle或Apple Metal。 - Antoine
修改过。其他人将不得不填写Linux的详细信息。 - Alexander Gessler
@Antoine和Alexander,谢谢你们...现在我对这些事情非常清楚 :) - Sreekar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接