OpenGL如何知道使用硬件特定的驱动程序?

时间:2013-08-17 12:37:03

标签: opengl

我们都知道windows提供了一个通用的OpenGL驱动程序。但一些显卡供应商提供特定的openGL驱动程序。我想知道OS如何选择使用哪个驱动程序?

2 个答案:

答案 0 :(得分:1)

有一些WGL函数可以获取指向较新OpenGL的适当函数的指针。在创建上下文时,Windows会任意选择GPU。

因此,例如,当您请求4.3核心上下文时,它会查看驱动程序列表,表示将处理此特定上下文,然后进行所有wgl调用以便它们加载适当的来自特定驱动程序的DLL的函数。

答案 1 :(得分:1)

解释其工作原理的最简单平台是Microsoft Windows。它们具有“可安装的客户端驱动程序”(ICD)模型,其中Windows SDK提供最低限度的OpenGL功能(OpenGL 1.1)和可扩展的窗口系统接口(WGL)。

使用Microsoft Windows中的WGL API创建上下文时,可以枚举特定设备的所有像素格式。一些像素格式将是硬件加速的,一些将使用回退软件OpenGL 1.1参考实现。如果你得到硬件加速格式,所有的OpenGL命令都将由显卡驱动程序处理,你将拥有一组GL和WGL的扩展,这些扩展在参考(1.1)实现中是不可用的。

这就是为什么现代OpenGL必须通过Microsoft Windows上的扩展加载来处理的原因,在最低级别你只能获得OpenGL 1.1,而对于任何比这更新的东西,你必须向驱动程序询问函数的地址你想用。

许多平台在硬件/软件共存方面具有类似的系统。 Mac OS X甚至比较棘手,因为您可以从硬件加速的OpenGL实现开始,但调用错误的功能(在安装的GPU上无法在硬件中实现),它会让您脱离“快速路径”并回退到软件

然而,关于Mac OS X的好处是,这个回退仅适用于管道的各个阶段。只要一切都可以在硬件中实现,它将回到下一阶段的硬件加速。美妙的是,在OS X中,OpenGL的软件实现是完整的(例如3.2上下文将支持整个OpenGL 3.2功能集,即使这样做需要部分/完全软件实现)。如果GPU不支持某些功能,只有很多的性能,您不会失去功能。这与Windows形成鲜明对比,现代OpenGL的 none 具有软件回退。