我正在使用Qt 5.3.2将我的应用程序从QGLWidget升级到使用QT 5.6.0的QOpenGLWidget。该应用程序已升级并运行良好。但是,我试图保留我的调试工具。我的开发环境是Visual Studio 2013,即使最终的应用程序使用双缓冲图形,出于调试目的,我已经编写了一些方法,我可以从调试器交互调用,绘制到前缓冲区并查看屏幕上的输出。这些函数不再起作用,因为QOpenGLWidget绘制到帧缓冲区。此外,甚至在我调用glDrawBuffer(GL_FRONT)时尝试绘制之前,它会生成glError到1280(枚举无效)。额外的数据 - glGetIntegerv(GL_DRAW_BUFFER,& my_val)返回0x8ce0,它是GL_COLOR_ATTACHMENT0,即使我的意图是将GL功能限制为仅2.0,也会对GL 3.0有意义。
答案 0 :(得分:1)
该解决方案的功劳归于@peppe。他的建议结果并不太难实现,让我实现了我想要的目标。从QOpenGLWidget切换到QOpenGLWindows和它的QWidget容器的组合使我能够实现我想要的。
我从QOpenGLWindow派生了我的类,让它记住了一个指向通过QWidget :: createWindowContainer(my_class_pointer)获得的QWidget的指针;然后,每当我习惯利用QOpenGLWidget中不存在的QGLWidget方法时,我将这些调用重定向到容器。
QOpenGLWindow似乎完全满足于我的调试工具直接绘制到前端缓冲区。