2012-02-12 44 views
1

我試圖從GLee轉移到glew,因爲GLee在VC2010下無法工作,並且在一段時間內沒有更新。我在頭文件中遇到了問題,因爲這兩個庫都希望首先定義它們的頭文件。 glew不喜歡首先定義gl.h(在QtOpenGL中定義),QtOpenGL特別聲明glew應該在QtOpenGL之後定義。Qt4和GLew似乎互不兼容

搜索顯示許多使用glew和Qt的人很好。至少,我想要一個關於兼容性的明確答案。我已經將.h和.c文件添加到我的項目中,因爲將來我不必擔心安裝.lib和.dll文件。

下面是QtOpenGL的代碼,如果GLEW被首次列入被調用:

#ifdef __GLEW_H__ 
#warning qglfunctions.h is not compatible with GLEW, GLEW defines will be undefined 
#warning To use GLEW with Qt, do not include <QtOpenGL> or <QGLFunctions> after glew.h 
#endif 

這裏就是所謂的代碼,如果QtOpenGL首先包括:

#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) 
#error gl.h included before glew.h 
#endif 

回答

2

GLEW和qtfunctions所有定義相同的的東西。你不能一起使用它們,你不應該這麼想。你所使用的所有Qt都是爲了初始化OpenGL上下文。所以不要包含qtfunctions。嘗試只包含QGLWidget和類需要的東西。

+0

我想使用未在QtOpenGL中定義的着色器程序和緩衝區對象(但需要創建OGL渲染窗口)。如果沒有GLEW,我會在Microsoft的頭文件中使用古老版本的OpenGL。 – usm 2012-02-12 19:07:42

+0

@usm:我解釋瞭如何做到這一點:停止包含qtfunctions。首先包含GLEW,然後只包含創建QGLWidget實例所需的最少量東西。哦,沒有人強迫你使用Qt;如果你不喜歡它,還有許多其他跨平臺的方法來創建OpenGL窗口。 – 2012-02-12 19:53:36

+0

我的歉意。在我的沮喪之中,我錯誤地解釋了你的答案意味着qtfunctions也被用於訪問指向新的GL函數的指針,就像GLEW一樣。另外,我不知道QtOpenGL實際上是其他幾個頭文件的組合,所以你的建議已經過去了。我休息了一會兒,清醒的頭腦又有了另一個。在vc2010的Qt預編譯版本中遺漏了Qt dll的問題,但是通過一些工作(手動編譯Qt),我終於得到了它的工作。感謝你的幫助! – usm 2012-02-12 22:00:45

相關問題