2011-12-06 14 views
3

我期待在OpenGL的wiki頁面,和我很好奇下面一行:獲得OpenGL的API函數

對於最終都是這裏的問題無關的原因,您必須手動 通過加載功能平臺特定的API調用。這個樣板文件 的工作是用各種OpenGL加載庫完成的;這些使得這個過程平穩。強烈建議您使用一個。 - OpenGL Wiki

直覺上,你會認爲他們只是提供一個標題供你加入。那麼,這是什麼歷史原因呢?

編輯:
感謝您的答案,我現在看到的是OpenGL的支持其功能的多種實現,所以沒有一個單一的DLL/SO,每個人都鏈接到。我還發現,這些報價有所幫助:

  • The OpenGL library supports multiple implementations of its functions.From MSDN

  • To accommodate this variety, we specify ideal behavior instead of actual behavior for certain GL operations.From GL Spec

  • When you run your program, opengl32.dll gets loaded and it checks in the Windows registry if there is a true GL driver. If there is, it will load it. For example, ATI's GL driver name starts with atioglxx.dll and NVIDIA's GL driver is nvoglv32.dll. The actual names change from release versionsGL FAQ

我還發現,英特爾不提供了,TO-最新的OpenGL實現,所以e儘管我有一個i7-2500,我只有OpenGL 3.0 :(。

+0

我不確定,但我懷疑它來自嘗試以向前和向後兼容的方式處理許多不同的OpenGL版本。 –

回答

2

其中一個主要原因是擴展:在每個平臺上,OpenGL一直支持平臺特定的擴展。這些不能成爲官方頭文件的一部分,因爲它們通常由廠商在規範更新之間添加。另外,這些供應商特定的擴展可能存在於完全怪異的DLL/SO中,例如,深入驅動程序內部。也不能保證驅動程序DLL將它們導出爲「規範」名稱,所以OpenGL很早就依靠特定於平臺的內容來加載函數指針。這使整個擴展的事情變得可行。

在所有平臺上,你通常得到一些OpenGL圖像不使用擴展(OpenGL的1.4左右),但由於擴展方法很成功,很容易實現,每個人都使用它現在(針對OpenCL相似!)

+0

謝謝,我最喜歡這個答案。然而,必須處理所有這些實現和擴展看起來像是一件非常頭疼的事情,我想這就是我們有圖書館的原因。 –

+0

是的,這就是GLEW和GLee以及其他原因。另一種方法是要求你等待一個新的OpenGL版本,這個版本並不是最好的(參見DirectX),併購買新的硬件。使用當前的模型,每個供應商都可以儘可能快地添加功能,因爲他可以編寫擴展;) – Anteru

3

它與歷史無關。就是這樣。總的來說,OpenGL實現來自某種形式的共享庫(DLL/SO)。但是,這很複雜,因爲您不需要OpenGL「庫」;它是您的代碼運行於任何平臺的系統基礎架構的一部分。所以你甚至不知道你可能在別人的電腦上使用了什麼特定的DLL。

因此,爲了獲得OpenGL函數指針,您必須使用現有的基礎結構來加載它們。

1

在Mac上,您不需要加載函數指針,只需要在OpenGL框架中包含一個頭文件和鏈接。

+0

請注意,Mac還會將OpenGL版本修復爲特定的數字。大多數Mac GPU都可以運行GL 4.2,但是直到Apple *允許*它們才能運行。 –