将glew与Qt 5.4 QOpenGLWidget一起使用

Using glew with Qt 5.4 QOpenGLWidget

本文关键字:QOpenGLWidget 一起 glew Qt      更新时间:2023-10-16

我正在尝试将GLEW与新的QOpenGLWidget(出现在Qt 5.4中)一起使用。虽然我可以很容易地与旧的QGLWidget一起使用,但新的QOpenGLWidget/QOpenGLContext类似乎与GLEW协作不好(我别无选择,我正在使用一个使用GLEW的外部库)。我有以下问题:

  1. 有一个编译时警告(在qopenglfunctions.h中触发当定义GLEW_H时),并且我无法避免包括qopenglfunctions.h,因为它包含在QOpenGLContext中
  2. (不确定是否相关)在我的应用程序中,我得到了OpenGL堆栈下溢
  3. (不确定它是否相关)在我的应用程序中,当我尝试将OpenGL上下文设为当前上下文时,它会导致整个应用程序的黑色窗口应用程序(我在应用程序中有几个QOpenGLWidget需要更改上下文,因为我正在使用OpenGL颜色剪裁)

我想去掉警告来确定是否2。和3。与GLEW/QOpenGLWidget不兼容有关。

注意:关于Stackoverflow上的Qt5/GLEW,已经有几个问题了,但它们都与(旧的)QGLWidget有关,后者的行为非常不同(使用相同代码/应用程序的这个问题没有问题)。

代码库位于此处:https://gforge.inria.fr/frs/?group_id=1465(太大了,不能包括在这里,而且由于长度的原因,我不能让你看一看,以防你想知道)

我能够解决以下所有问题(是的!):

  1. 带有makeCurrent()的黑窗口:我正试图使用QOpenGLContext::makeCurrent(Surface*),它将Surface*作为论点,我没有正确的。现在我正在使用QOpenGLWidget::makeCurrent()(将右侧的Surface*传递给上下文)
  2. OpenGL堆栈矩阵下溢错误:这一个更棘手,因为在我的OpenGL渲染功能中,我第一次在QTextEdit小部件中显示一些文本,这导致了类似于OpenGL上下文开关重置堆栈矩阵的情况。通过对文本进行更新并在OpenGL渲染功能之外进行处理来修复它
  3. 由于Qt/glew.h:这个更容易,因为我不再使用QOpenGLContext(我正在使用QOpenGLWidget进行上下文切换),我不再需要包括QtOpenGL标头,也不再有任何冲突