我们都知道windows提供了一个通用的OpenGL驱动程序。但一些显卡供应商提供特定的openGL驱动程序。我想知道OS如何选择使用哪个驱动程序?
答案 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上无法在硬件中实现),它会让您脱离“快速路径”并回退到软件