在Windows上,OpenGL与DirectX有什么不同?

我没有任何graphics编程的经验。 在阅读graphics编程时,我有这个疑问。

据我所知,因为Windows没有像直接硬件访问那样提供DOS,所以创build了DirectX。 这意味着DirectX是实现直接(ish)硬件访问的唯一可靠方法。 我错了吗?

如果我没有错,那么OpenGL必须使用DirectX本身或在DirectX之上实现。

那么这是不是说在Windows上OpenGL真的是DirectX?

请注意,我的疑问仅限于标题所说的内容,而我并不感兴趣,为什么比其他人更好?

Solutions Collecting From Web of "在Windows上,OpenGL与DirectX有什么不同?"

据我所知,由于Windows没有像直接硬件访问那样提供DOS,所以创建了Direct X.

你说得对,Windows没有像直接硬件访问那样提供DOS。 实际上没有带有内存保护的操作系统。

是的,DirectX的创建是为了提供一个 API来加速访问某些类型的硬件。 DirectX是一个用于加速硬件访问 API,而不是(唯一的)一个。

这意味着Direct X是实现直接(ish)硬件访问的唯一可靠方法。 我错了吗?

你错了,因为没有人和没有人阻止你实现另一个加速硬件访问的轨道。 负责通道访问硬件的软件被称为驱动程序。 驱动程序以特权模式运行,这意味着地址空间保护不适用于它们。 也就是说,因为驱动程序必须能够与硬件通信。

驱动程序通过API与常规程序进行通信,即所谓的用户空间 。 API可能被标准化,然后可能被严格规定,或者他们可能完全是propritary。

DirectX是一个指定的API,规范被微软写下来。

OpenGL以类似的方式是一个API,但不是由一个单一的实体指定,而是通过几个贡献者的协作以某种形式标准化。

合适的API的一个例子是3Dfx的Glide,它在很大程度上受到了OpenGL的启发。 实际上,有一个名为“minigl”的兼容包装器,实现半条命1引擎所需的OpenGL子集,以在3Dfx / Glide系统上工作。

GPU供应商的驱动程序开发人员遵循API的规范,为DirectX,OpenGL或某些专有接口编写驱动程序。 这些API中的每一个都可以访问驱动程序,从而访问硬件。 对于单个资源可能有多个API。 驱动程序可以实现DirectX 3D,OpenGL和其他任何并行处理,并将它们全部提供给用户空间。

所以不,OpenGL不是建立在DirectX之上的,如果使用GPU驱动程序的话。 Windows Vista及更高版本带有在DirectX之上构建的OpenGL-1.4仿真,但不支持着色器,顶点缓冲对象以及所有其他的哨子和铃铛。 只要安装了支持OpenGL的GPU驱动程序,就可以用实际的低级实现来完全替代OpenGL-1.4仿真。

DirectX是一个使用显卡硬件功能的层。 从Windows Vista开始,默认的OpenGL实现(由Microsoft提供)使用DirectX,因此OpenGL非常慢。 然而,显卡厂商直接使用显卡为OpenGL提供驱动,而不是直接通过directX,所以性能应该是一样的。 如果你有一个驱动不好的集成显卡,OpenGL可能会使用DirectX。

问题更多的是硬件直接访问,没有方便的抽象层。 软件供应商不希望花时间为每张新卡写支持,所以他们推动微软实施抽象。

选择OpenGL还是发明了一个新的层面,各种原因导致后者。

Vista +可以将OpenGL转换为DirectX,相反,Wine可以将DirectX转换为OpenGL。

不,两种语言都通过卡制造商编写的驱动程序直接与显卡硬件通信,因此两者都提供相同级别的硬件访问。

Windows直接支持DirectX,它是显示效果所需的操作系统的一部分 – 它们对OpenGL的支持是非常有限的,它们只支持v1.1(我们现在在版本4上),所以为了做一些有用的事情,你需要使用一些额外的扩展(如glew)或显卡制造商的OpenGL SDK。

在能力方面。 DirectX由MSFT精心控制 – 所有的DirectX系统都应该具有相同的行为。 OpenGL允许显卡制造商添加自己的扩展,从而通过向硬件添加特定功能(至少在理论上)可以产生更高的性能。 OpenGL也是跨平台的,所以你的Windows OpenGL代码将运行在任何地方(理论上)

实际上,Windows上唯一不完全无用的OpenGL驱动程序是NVidia – 所以Windows上的高性能OpenGl应用程序非常需要NVidia卡。 这意味着在Windows上编程OpenGL非常简单,只需要使用NVidias文档即可。