2015-11-07 169 views
0

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

  1. 有一个编译时警告(在qopenglfunctions.h触发 GLEW_H定义时),由于它是由QOpenGLContext
  2. 包括我不能避免包括 qopenglfunctions.h (不知道它是相关的)在我的应用程序中,当我尝试使OpenGL上下文成为当前时,它导致整个 的黑色窗口出现
  3. (不确定它是相关的)应用程序(我在应用程序中有几个QOpenGLWidgets,并且 需要更改上下文,因为我是使用OpenGL颜色剪裁)

我想摆脱警告,以确定2.和3.是否与GLEW/QOpenGLWidget不兼容有关。

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

代码库位于:https://gforge.inria.fr/frs/?group_id=1465(太大,包括在这里,并且由于长的,我不能让你看看吧,万一你想知道)

+0

我会感兴趣的评论,通常与-1 :-) – BrunoLevy

回答

0

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

  1. 与makeCurrent()黑色窗口:我试图用 QOpenGLContext :: makeCurrent(表面*),它需要一个表面*作为 的说法,我没有正确的。现在我正在使用 QOpenGLWidget :: makeCurrent()(将右边的Surface *传递给 上下文);
  2. OpenGL的堆栈矩阵溢错误:这一次是更棘手的,这是因为我的OpenGL渲染功能时,我被显示在一个QTextEdit一些文本组件的第一次,这是造成类似OpenGL上下文切换,这是重置堆栈矩阵。通过对文本的更新进行排队并在OpenGL渲染函数之外处理它们来修复它;
  3. 警告由于QT/glew.h:这个是比较容易的,因为我不再使用QOpenGLContext(我做的使用QOpenGLWidget上下文切换),我不再需要包括QtOpenGL头,并有不再冲突。