2010-11-19 72 views
4

我想在Windows下使用GLEW和Qt(如果有的話,7)。如何在Qt中使用GLEW?

我所做的是去GLEW網站,下載windows的包,然後把glew.dll放到System32文件夾中。在我的pro文件中,我引用了.lib文件,其中LIBS += .../path_to_the_libs/glew32.libglew32s.lib相同(不確定後者是什麼)。在我的QGLWidget子類中,我確保在<QGLWidget>之前包含glew.h,因此在gl.hglu.h之前包含glew.h。在main()函數中,我所做的第一件事是撥打glewInit並致電glGetError,但我的應用程序退出時出現了一些奇怪的代碼,例如非常大的負數。 (我對Qt和OpenGL比較新,對GLEW也是全新的),但是我也懷疑其中一個主要的錯誤是libs,我想,使用MSVC構建,因此無法與MinGW鏈接...無論如何,任何人都可以提供一步一步的指導如何安裝GLEW與Qt並使用它?我非常感謝。謝謝你在前進

編輯: 傢伙,也許是我要求太高了,但我真的很喜歡一步一步的指示:)

+0

是不是glew32s.lib靜態版本?你需要一個lib,而不是兩個。 – alxx 2010-11-19 13:49:05

+0

如果編譯器真的不同,你必須自己編譯GLEW。 – alxx 2010-11-19 13:50:10

+0

通過MSVC編譯的GLEW應該在MinGW上工作。 – Kos 2010-11-19 13:51:47

回答

7

你不應該在準備好OpenGL上下文之前,請致電glewInit()。在您的第一個gl*呼叫之前打電話,而不是在main的開頭。這應該夠了吧。

另外,不要使用glew32.libglew32s.lib同時 - 前者是與DLL文件一起使用,後者是靜態的(您的.exe變大了,但你不必與.dll文件分發應用程序)。決定並使用。

+0

謝謝!我馬上試試 – 2010-11-19 13:55:30

+2

這對我有幫助!對於QGLWidget的reimplementers:調用'glewInit()'的最佳位置是在'initializeGL()'函數的頂部。這將導致爲你創建的每個GL小部件調用'glewInit()',但是這似乎並不妨礙任何事情。 – 2012-03-03 19:24:50

0

Qt 4.7可以創建任何OpenGL上下文。使用QGLFormat.setProfile()和QGLFormat.setVersion()

唯一的缺點是你還沒有OpenGL 3+綁定。

一步一步的解決方案:

  1. 讓QGLWindget的新的子類。
  2. 在新類的構造函數中設置具有適當OpenGL編號的新QGLContext。
  3. 調用glewInit()。
  4. 將上下文傳遞給構造函數QGLWidnet。

如果我沒記錯的話應該這樣做! GLEW dll應該放在正確的系統文件夾中,並附上編譯器選項,但它們與沒有QT的GLEW相同。

+0

如何在不使用GLEW的情況下訪問Opengl 3相關的API調用? – 2011-08-29 03:46:34

+0

現在,這是不同的問題! – 2011-08-29 09:19:52