2012-05-12 24 views
1

好吧,我知道網上有幾百萬個關於OpenGL的答案,但我試圖弄清楚它是什麼在我的電腦上的文件。我研究並發現,OpenGL可以作爲不同計算機圖形卡的多平臺翻譯器。那麼,這是一個DLL嗎?
我想知道,如果它是一個DLL,那麼我不能下載任何版本的DLL(最好是最新的),然後使用它,知道它有什麼?什麼是OpenGL作爲計算機文件

編輯:好了,如果它是一個Windows DLL,和我做一個使用後期的版本,如果它不使用早期版本支持別人的電腦上的一個OpenGL遊戲?我是否允許將dll與我的遊戲一起使用,以便在其他Windows計算機上支持該dll?或者,dll是否設置爲嚴格在特定計算機上與圖形卡進行通信?

OpenGL不斷更新(不管它是什麼)。如果它所做的全部工作都是在一系列不同的計算機上與圖形卡進行通信,那麼這些計算機內置的圖形卡永遠不會被更新,這怎麼能做到呢?

回答

4

有兩個「部分」 OpenGL的 - 這是由Khronos Group每隔幾個月更新一次的規範,而這由你的顯卡製造商的書面專爲您的顯卡型號的驅動程序。

OpenGL規範基本上詳細說明了OpenGL API的一切應該如何工作 - 什麼是預期的行爲應該是什麼時候,什麼時候被認爲是意外的行爲,什麼時候拋出哪些錯誤等等。該規範讓驅動程序作者準確地知道他們是什麼需要做的事情,讓應用程序編寫者知道對驅動程序的期望。這就是OpenGL真正的「所在」 - 將應用程序和驅動程序結合在一起的粘合劑。 You can read all the specifications for each version here.

然後是實現了OpenGL API,被認爲符合規範的驅動程序。驅動程序完全按照您期望的方式執行 - 將數據複製到圖形卡的內存中,將數據寫入圖形卡寄存器,跟蹤狀態,處理頂點,編譯着色器,指示數百個流處理器同時轉換頂點並填充像素等。如果沒有OpenGL,每個圖形卡模型都會有一個單獨的,稍微快一點的API,因爲它的結構方式,它只適用於那一塊圖形卡。使用OpenGL時,驅動程序都是針對相同的API編寫的,應用程序的代碼將在所有圖形卡上運行。

驅動程序更新不會改變對OpenGL規範的遵從性。大多數驅動程序更新將修復小錯誤或進行一些內部優化。

我知道在一個點上出現了一個小錯誤與ATI的驅動程序,你不得不打電話glEnable(GL_TEXTURE_2D);之前,你可以儘管GL_TEXTURE_2D被廢棄爲glEnable()的可能值產生的貼圖OpenGL的3路(glGenerateMipMaps())。我不確定它現在是否已經修復,但它肯定是駕駛員作家容易忽視的邊緣情況。

至於優化,有很多優化。也許還有另一種方法來優化着色器在編譯時,也許有更高效的方式在流處理器之間分配工作,我不知道。

+0

小心如何使用「驅動程序」一詞。就操作系統而言,你實際上是在談論圖書館。司機是一個完全不同的野獸。 – Polynomial

+0

OpenGL的當前版本現在是4.2。現在,據我所知,你不能期望版本2.1或3.0代碼在4.2版本中編譯,因爲4.2有一套完全不同的函數(對吧?)。那麼,基本上,這些功能被添加和更改爲比早期版本更高效地運行? – Codesmith

+0

@AUTO你可以*期待2.1或3.0代碼在4.2版本中編譯,因爲規範是建立在從頭開始向前兼容的基礎上的。 –

3

OpenGL是一個用於圖形編程的跨平臺API。就編譯代碼而言,它將作爲特定於操作系統的庫 - 例如Windows中的DLL(opengl32.dll),或者Linux中的SO。

您可以從OpenGL.org

獲得SDK和二進制再分發取決於你使用的語言,有可能是OpenGL的包裝可用。這些是專門針對您的語言設計的類或API庫。例如,C#/ VB.NET開發人員可以使用.NET OpenGL封裝器。快速谷歌搜索這個問題應該給你一些結果。

1

OpenGL API偶爾會發布新版本,但這些更新本質上是向後兼容的。此外,通常會將新功能添加爲擴展名,並且可以檢測哪些擴展名存在,並僅使用那些本地可用並支持的擴展名。因此,您可以構建軟件以在可用時利用新功能,但當他們不在時仍然能夠運行。

的API無關與個別司機 - 司機可以在不改變API更新,所以實際上驅動程序不斷更新與您的軟件兼容性的目的並不重要。在這個賬戶上,您可以選擇一個API版本進行開發,只要您的目標操作系統附帶了與該API兼容的OpenGL庫版本,則無需擔心驅動程序更新會影響您的軟件的與本地可用的庫進行動態鏈接。

+0

因此,不斷變化的OpenGL部分是'驅動程序'部分?和API部分是不變的?那麼,這個「司機」部分呢? – Codesmith

+2

OpenGL沒有驅動程序部分 - 他正在談論OpenGL庫與之對話的圖形卡驅動程序。所有的圖形卡驅動程序都實現了特定的標準,因此不同的圖形API(例如DirectX,OpenGL)可以與他們交談,操作系統也知道如何與他們交談。 – Polynomial

相關問題