我們都知道windows提供了一個通用的OpenGL驅動程序。但一些顯卡供應商提供特定的OpenGL驅動程序。我想知道如何選擇使用哪個驅動程序的操作系統?OpenGL如何知道使用特定於硬件的驅動程序?
回答
有WGL函數可以獲取指向新OpenGL相應函數的指針。 Windows在創建上下文時任意選擇GPU。因此,例如,當你要求一個4.3核心上下文時,它會查看驅動程序列表,並說它將處理這個特定的上下文,然後調用所有的wgl
調用,以便它們從特定的驅動程序的DLL。
你的意思是魔術發生在wglCreateContext函數調用? –
解釋這是如何工作的最簡單的平臺是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的無有軟件後備。
- 1. PoolingDataSource - 如何使用特定於驅動程序的PreparedStatement實現
- 2. 如何使用特定的圖形驅動程序創建OpenGL上下文?
- 3. 我如何知道哪個dsn驅動程序正在使用?
- 4. 如何在Win32上使用C++安裝硬件驅動程序?
- 5. 如何使我的Informix JDBC驅動程序知道leiningen
- 6. Web驅動程序:如何知道當前幀的活動性?
- 7. 如何知道硬件/軟件的編碼對特定應用是否有用?
- 8. 用於BizTalk綁定的特定版本的Oracle驅動程序?
- 9. 如何知道MySQLnd是否爲主動驅動程序?
- 10. Windows驅動程序硬件ID
- 11. 如何在Windows上引用特定的硬盤驅動器?
- 12. 如何使用DMA從Linux設備驅動程序寫入硬盤驅動器
- 13. 我如何知道哪個版本的mysql odbc驅動程序正在使用
- 14. 如何開發不接觸硬件的Windows驅動程序?
- 15. 如何安裝新的硬件驅動程序,以便在第一次插入時,Windows會知道自動找到驅動程序
- 16. 如何知道你面對的iPhone應用程序特定CLLocation
- 17. 如何在grails控制器中知道驅動程序連接
- 18. 關於硬件驅動程序在保護模式下
- 19. 如何知道Java Mongo驅動程序是否與給定的Mongo Server兼容?
- 20. 如何獲得python中的硬盤驅動程序序列號
- 21. 如何重寫一個硬件linux驅動程序爲android使用
- 22. 知道硬盤驅動器在Delphi中的速度有多快
- 23. 自動IT腳本知道特定應用程序的內存使用情況
- 24. Linux調度程序是否知道硬件中斷(調度程序抖動)
- 25. 如何修改特定(任何)NIC的驅動程序?
- 26. OpenGL驅動程序的實現
- 27. Linux內核如何知道在哪裏查找驅動程序固件?
- 28. 如何禁用特定的驅動器
- 29. 如何使用WiX的部署基於INF-USB驅動程序
- 30. Bundler如何知道如何使用特定的寶石版本?
與其他任何驅動程序的工作方式相同:通過掛接到操作系統並告訴它「每當需要訪問此硬件時,給我打電話」。供應商提供這些OpenGL驅動程序作爲通用GPU驅動程序的一部分 – jalf
@jalf:我不確定術語* hooking *在此適用。我寧願說它向操作系統註冊。 –
是的,我想你是對的。讓我們假裝我說,而不是:) – jalf