2013-08-17 25 views
0

我們都知道windows提供了一個通用的OpenGL驅動程序。但一些顯卡供應商提供特定的OpenGL驅動程序。我想知道如何選擇使用哪個驅動程序的操作系統?OpenGL如何知道使用特定於硬件的驅動程序?

+2

與其他任何驅動程序的工作方式相同:通過掛接到操作系統並告訴它「每當需要訪問此硬件時,給我打電話」。供應商提供這些OpenGL驅動程序作爲通用GPU驅動程序的一部分 – jalf

+0

@jalf:我不確定術語* hooking *在此適用。我寧願說它向操作系統註冊。 –

+0

是的,我想你是對的。讓我們假裝我說,而不是:) – jalf

回答

1

有WGL函數可以獲取指向新OpenGL相應函數的指針。 Windows在創建上下文時任意選擇GPU。因此,例如,當你要求一個4.3核心上下文時,它會查看驅動程序列表,並說它將處理這個特定的上下文,然後調用所有的wgl調用,以便它們從特定的驅動程序的DLL。

+1

你的意思是魔術發生在wglCreateContext函數調用? –

1

解釋這是如何工作的最簡單的平臺是Microsoft Windows。他們有一個「Installable Client Driver」(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不支持某些功能,則不會失去功能,只需提供性能的LOT即可。這與Windows的巨大反差,其中現代OpenGL的有軟件後備。

相關問題