使用Glew和Qt 5.4 QOpenGLWidget

时间:2015-11-07 14:52:41

标签: c++ opengl glew qt5.4

我正在尝试将GLEW用于新的QOpenGLWidget(出现在Qt 5.4中)。虽然我可以使用较旧的QGLWidget轻松地做到这一点,但似乎新的QOpenGLWidget / QOpenGLContext类与GLEW没有很好的协作(我没有选择,我使用的是使用GLEW的外部库)。我有以下问题:

  1. 有一个编译时警告(在qopenglfunctions.h中触发 当定义GLEW_H时,我无法避免包含 qopenglfunctions.h,因为它包含在QOpenGLContext
  2. (不确定它是否相关)在我的应用程序中,我得到了一个OpenGL堆栈下溢
  3. (不确定它是否相关)在我的应用程序中,当我尝试使OpenGL上下文当前时,它会导致整个黑色窗口 应用程序(我在应用程序中有几个QOpenGLWidgets,和 需要更改上下文,因为我正在使用OpenGL颜色剪辑)
  4. 我想摆脱警告,以确定2.和3.是否与GLEW / QOpenGLWidget不兼容有关。

    注意:Stackoverflow上已有几个关于Qt5 / GLEW的问题,但它们都与(较旧的)QGLWidget相关,其行为完全不同(具有相同代码/应用程序的这个没问题)。

    代码库位于此处:https://gforge.inria.fr/frs/?group_id=1465(太大了,不能包含在这里,因为长度,我不能要求你看看它,以防你想知道)

1 个答案:

答案 0 :(得分:0)

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

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