2015-07-03 91 views
1

我知道有必要通過使用基於opengl函數名稱的函數定位指針來爲opengl「加載」函數。我從來沒有見過類似於此之前做過的事情,我想知道這是如何工作的。功能在哪裏?他們如何檢索?爲什麼這樣做?OpenGL函數如何加載?

+0

我真的不知道答案其實,但你可以閱讀這個項目:https://github.com/cginternals/glbinding – eroween

回答

2

哪裏的功能實際上在什麼位置?

這是實現相關。我敢打賭,他們被存儲在函數名稱的哈希表中以便函數指針。他們仍然在共享庫中,但通常沒有暴露他們的符號。

他們是如何獲取?

glXGetProcAddresswglGetProcAddress,取決於平臺。大多數創建OpenGL窗口的庫(GLFW,SDL)都具有自己的跨平臺功能,可以使用上述功能。

爲什麼做這樣?

我能想到的幾個原因:實現可以改變什麼擴展可在不破壞ABI兼容性,什麼功能,您可以訪問可能依賴於你請求上下文的類型或版本(梅薩前,發佈OpenGL 3.1擴展僅在3.1+的上下文中可用,而不是任何更低的)。

+0

你可以制定一個更的「共享庫」。這與gpu的驅動程序有什麼關係? – Thomas

+0

@Ragdoll取決於平臺的'.dll'或'.so',與'-l'鏈接。去谷歌上查詢 –