如何在 Qt 中使用 GLEW?
Posted
技术标签:
【中文标题】如何在 Qt 中使用 GLEW?【英文标题】:How to use GLEW with Qt? 【发布时间】:2010-11-19 13:44:20 【问题描述】:我想在 Windows 下将 GLEW 与 Qt 一起使用(如果需要,请使用 7)。
我所做的是去 GLEW 网站,下载 windows 包,然后将 glew.dll 放在 System32 文件夹中。在我的 pro 文件中,我使用 LIBS += .../path_to_the_libs/glew32.lib
引用了 .lib 文件,glew32s.lib
也是如此(不确定后者的用途)。在我的 QGLWidget 子类中,我确保 glew.h
包含在 <QGLWidget>
之前,因此在 gl.h
和 glu.h
之前。在main()
函数中,我做的第一件事是调用glewInit
并调用glGetError
,但我的应用程序以一些奇怪的代码退出,比如一个非常大的负数。
我怀疑我做错了很多事情(我对 Qt 和 OpenGL 相对较新,对 GLEW 完全陌生),但我也怀疑主要错误之一是库,我假设,是用 MSVC 构建的,因此不能与 MinGW 链接......无论如何,任何人都可以提供如何使用 Qt 安装 GLEW 并使用它的分步说明吗?我将不胜感激。提前谢谢你
编辑: 伙计们,也许我要求太多了,但我真的很想要一步一步的指导:)
【问题讨论】:
不是glew32s.lib静态版本吗?你需要一个库,而不是两个。 如果编译器真的不同,你必须自己编译 GLEW。 通过 MSVC 编译的 GLEW 应该可以在 MinGW 上运行。 MinGW 具有某种与 MSVC 编译的 C 库链接的能力(虽然不是 C++)。我之前遇到过一些问题,但我可以确认glew32s.lib
链接并仅与链接器命令上的 -lglew32s
一起使用,不需要黑客攻击。
【参考方案1】:
在您准备好 OpenGL 上下文之前,您不应该调用 glewInit()
。在您第一次调用gl*
之前调用它,而不是在main
的开头。这应该可以解决问题。
另外,不要同时使用glew32.lib
和glew32s.lib
- 前者与 DLL 文件一起使用,后者是静态的(您的 .exe 变得更大,但您不必分发您的应用程序.dll)。决定并使用任何一个。
【讨论】:
这帮助很大!对于 QGLWidget 的重新实现者:调用glewInit()
的最佳位置是在 initializeGL()
函数的顶部。这将导致glewInit()
为您创建的每个 GL 小部件调用,但这似乎不会打扰任何事情。【参考方案2】:
Qt 4.7 可以创建任何 OpenGL 上下文。使用 QGLFormat.setProfile() 和 QGLFormat.setVersion()
唯一的缺点是您仍然没有 OpenGL 3+ 绑定。
逐步解决方案:
-
创建 QGLWindget 的新子类。
在新类的构造函数中使用正确的 OpenGL 编号设置新的 QGLContext。
调用 glewInit()。
将上下文传递给构造函数 QGLWidnet。
如果我没记错的话应该可以! GLEW dll 应放置在适当的系统文件夹中,并附加编译器选项,但它们与没有 QT 的 GLEW 相同。
【讨论】:
如何在没有 GLEW 的情况下访问 Opengl 3 相关的 API 调用? 现在,这是不同的问题!以上是关于如何在 Qt 中使用 GLEW?的主要内容,如果未能解决你的问题,请参考以下文章