2012-02-12 110 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