2010-11-19 103 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