2012-03-04 40 views
1

我正在使用Windows 7和Visual Studio 2010 express。什麼是頭文件和庫的最低限度,我需要包含在OpenGL項目中,以便能夠在沒有任何錯誤的情況下進行編譯。我談論最低限度,沒有任何額外的庫,如GLUT或GLFW或GLEW等我需要在VC2010中包含什麼才能成功編譯OpenGL項目?

我認爲我需要做的就是添加opengl32.lib在額外的依賴項,但它看起來像不工作,因爲VC無法識別一些像「glGenBuffers()」這樣的openGL語法。

回答

0

在windows系統上的<GL/GL.h>中聲明的函數原型僅適用於1.1版本(現在約20年)的OpenGL版本。擴展名或版本高於此的每個函數(如glGenBuffers(帶有1.5))必須使用wglGetProcAddress動態加載以檢索函數指針(當然,如果您的硬件和驅動程序支持該版本/擴展) 。

由於這可能是單調乏味的工作,因此有自動擴展管理的庫,例如GLEW,它們爲您完成所有這些工作,並向您提供相應變量中所需的函數指針,以便您可以直接使用glGenBuffers之類的作爲普通功能,但它們在<GL/GL.h>中沒有任何聲明。

因此,不需要任何東西,除了鏈接與opengl32.lib成功編譯VS2010中的OpenGL項目,但您需要自己管理擴展,只要您需要比版本1.1更高的功能或使用第三方庫爲你做,就像GLEW一樣。

+0

感謝您的詳細答案,我現在看到:)我希望我可以避免該GLEW,每當我包括它,我從Visual Studio中得到一些奇怪的內存錯誤:(但它看起來像我必須看到是什麼原因造成的...... – IanDess 2012-03-04 15:49:24

+0

@IdeDess這將是一個好主意,因爲自己處理擴展可能是一個痛苦,但它不是那麼艱難或複雜的任務,但它真的有一些優點,如果你只需要調用' glewInit'並且可以立即使用你喜歡的每一個函數,而現在只使用1.1的功能並不是一種選擇,對於你的錯誤,也許你忘了在創建GL上下文後調用'glewInit'?在這種情況下,'glGe nBuffers'及其朋友沒有有效的值,並且在嘗試使用它時會遇到訪問衝突(或類似的內存錯誤)。 – 2012-03-04 15:56:28

+0

OMG哥們你救了我...非常感謝!我剛剛在幾天前開始使用openGL,所以我迷失在所有圖書館的海洋中,所以忽略像glewInit這樣簡單的事情發生了很多:(是的,這是問題!再次感謝! – IanDess 2012-03-04 16:13:56

0

glGenBuffer自OpenGL 1.5以來是可用的。 Windows實現是1.1。 所以基本上你需要GLEW :)。

但是對於OpenGL 1.1,您只需要按照您的要求鏈接opengl32.lib

+0

感謝您的回答,我現在看到:)我希望我可以避免GLEW,只要我包括它我從Visual Studio中得到一些奇怪的內存錯誤:(但它看起來像我必須看到是什麼造成的那... – IanDess 2012-03-04 15:50:00

相關問題