QGLWidget ignores glClear
我很沮丧 我在QT 4.6应用程序的主窗口中有一个小部件,该小部件已配置为openGL小部件。 它绘制得很好,除非我无法清除各帧之间的背景。 当他的窗口打开时,我得到一个黑色背景,此后再也看不到,所以随着时间的流逝,我得到了混乱的渲染对象。 我还必须在paintGL()函数的末尾调用swapBuffers()才能使小部件显示最新的帧,这让我感到困惑,因为我印象中自动调用swapBuffers()。 我设置为双缓冲,并且不共享小部件。 以下是相关代码:
1 2 3 4 5 6 7 8 9 10 11 | void GLWidget::paintGL ( ) { m_Input.Draw(); QGLWidget::swapBuffers(); } void GLWidget::initializeGL ( ) { qglClearColor(QColor(0,0,255,128)); glClear(GL_COLOR_BUFFER_BIT); } |
似乎双重缓冲有些不对劲。 将屏幕清除为背景色是非常基本的。 但这让我发疯了,为什么它不起作用。 绘图代码的其余部分工作正常。 有任何想法吗? (这是在Linux系统上。)
更新资料
paintGL方法应如下所示:
1 2 3 4 5 6 7 8 9 10 11 | void GLWidget::paintGL() { qglClearColor(QColor(0,0,255,128)); glClear(GL_COLOR_BUFFER_BIT); // you probably also want to clear the depth and stencil buffers // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_Input.Draw(); QGLWidget::swapBuffers(); } |
当然,您必须确保