2013-07-23 119 views
22

好吧,所以我已經知道爲什麼我需要GLEW,但只能達到一個點。GLEW是做什麼的,爲什麼我需要它?

如果我使用現代OpenGL的東西,可能從3.0版本開始,和/或使用核心配置文件,那麼GLEW是必需的,因爲沒有編譯產生的錯誤,如glGenVertexArrays沒有聲明。

所以GLEW確實有點後臺工作,包括我們想用,可能是現代的OpenGL函數。

除此之外,它做什麼嗎?另外,它是如何工作的。

作爲一個例子,它提高跨平臺編譯? (例如,如果從Linux遷移到Windows或OS X,需要對代碼進行較少的修改?

它是否也改進了圖形硬件的「跨平臺性」?例如,假設我們有兩臺相同的計算機,包括OS。在一個系統上使用OpenGL 4.3命令編譯程序,如果另一個系統具有僅支持OpenGL 3.3的圖形卡或驅動程序,GLEW是否可以提供幫助(編譯舊版OpenGL的着色器,或許?)

所以,你很可能會看到我真的不知道GLEW做什麼或它是怎麼做的

最後一點;?沒有人知道如何使用GLEW與GLFW我會張貼作爲一個單獨的疑問句實際上。

回答

11

GLEW不是「必要」,因爲你把它。你可以使用glcorearb.h頭文件或類似的東西。但是,如果您使用某種功能進行鏈接 - 它必須存在於目標平臺上,否則您的程序將無法啓動。 GLEW和其他人正好處理這個問題 - 你不直接與GL函數鏈接,而是在初始化階段後獲取函數指針。它允許您在運行時檢查哪些擴展存在以及可以使用哪些功能。

它的便攜性越來越函數指針幫助的唯一的事情 - 這可能是wglGetProcAddress/glxGetProcAddress,它是模擬蘋果操作系統。所以不,這不是一個案例。但是,可用的GL擴展的種類是。

GLEW無需接觸點與你的首選GL初始化庫 - 只需撥打glewInit創建GL上下文後。

+0

如果我創建一個窗口,然後調用glewInit()我得到一個segfault錯誤? – user3728501

+0

@EdwardBird:您是否在該窗口上創建了OpenGL上下文?調用glewInit時OpenGL上下文是否處於活動狀態? – datenwolf

+0

是的,我做了,但我已經解決了這個問題 - 無論如何(: – user3728501

5

要正確初始化GLEW OpenGL上下文必須創建wglMakeCurrent()必須調用調用glewInit();

我就要把它放到keltar的答案的評論之前,但我看不出如何。

+0

謝謝你的加入 - upvoted – user3728501

相關問題