如何在Qt中使用GLEW?

4
我想在Windows下(如果有影响,是Windows 7)使用GLEW和Qt。我的做法是去GLEW网站下载Windows的包,然后把glew.dll放到System32文件夹中。在我的pro文件中,我用LIBS += .../path_to_the_libs/glew32.lib引用了.lib文件,对于glew32s.lib也是同样的做法(不确定后者的作用)。在我的QGLWidget子类中,我确保在<QGLWidget>之前,也就是在gl.hglu.h之前,包含了glew.h。在main()函数中,我首先调用glewInit并调用glGetError,但我的应用程序以一些奇怪的代码退出,比如一个非常大的负数。
我怀疑我做错了很多事情(我对Qt和OpenGL相对较新,对GLEW完全陌生),但我也怀疑其中一个主要错误是库,我认为,这些库是用MSVC构建的,因此不能与MinGW链接... 无论如何,有人能否提供一个逐步说明如何安装GLEW与Qt并使用它?我将非常感激。谢谢您的帮助。
编辑:各位,也许我要求太多了,但我真的非常想要一个逐步说明 :)

glew32s.lib不是静态版本吗?你只需要一个库,而不是两个。 - alxx
如果编译器确实不同,您必须自行编译 GLEW。 - alxx
通过 MSVC 编译的 GLEW 应该可以在 MinGW 上工作。 - Kos
MinGW具有一定的能力,可以链接由MSVC编译的C库(不包括C++)。我以前遇到过一些问题,但我可以确认glew32s.lib只需在链接器命令中使用-lglew32s即可链接和工作,无需任何技巧。 - Kos
2个回答

7

在准备好OpenGL上下文之前,不应该调用glewInit()。请在您的第一个gl*调用之前调用它,而不是在main的开头调用。这样应该就可以解决问题了。

另外,请不要同时使用glew32.libglew32s.lib - 前者与DLL文件一起使用,后者是静态的(您的.exe文件会变大,但您不必将应用程序与.dll文件一起分发)。请决定并选择其中之一使用。


2
这非常有帮助!对于重新实现QGLWidget的人来说:将调用glewInit()的位置放在initializeGL()函数的顶部是最好的选择。这将导致每次创建GL小部件时都会调用glewInit(),但似乎不会影响任何事情。 - Xavier Holt

0

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

唯一的缺点是您仍然没有 OpenGL 3+ 绑定。

步骤解决方案:

  1. 创建 QGLWindget 的新子类。
  2. 在新类的构造函数中,使用适当的 OpenGL 数字设置新的 QGLContext。
  3. 调用 glewInit()。
  4. 将上下文传递给 QGLWidnet 构造函数。

如果我记得正确,它应该可以!GLEW dll 应放置在适当的系统文件夹中,并附加编译器选项,但与不带 QT 的 GLEW 相同。


如何在没有GLEW的情况下访问OpenGL 3相关的API调用? - Ashika Umanga Umagiliya
现在,那是一个不同的问题! - przemo_li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接