等待QGLWidget完成渲染

时间:2014-08-06 16:20:05

标签: qt opengl benchmarking wait

我正在使用VBO而不是glBegin / glEnd为Qt应用程序开发OpenGL基准测试。

我从MainWindow调用类GLWidget(继承自公共QGLWidget和受保护的QGLFunctions),我想等待渲染完成并获取存储时间的变量值。问题是我找不到合适的SIGNAL /方法来等待QGLWidget的结束,所以即使我在渲染结束时使用glFinish(),我也会从MainWindow得到错误的变量值。

void GLWidget::initializeGL() {
  // VBO, glGenBuffers, glBindBuffer, glBufferData stuff
}

void GLWidget::paintGL()
{
    QGLFunctions::glEnableVertexAttribArray(0);
    QGLFunctions::glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    QGLFunctions::glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,(void*)0);

    // Start Time
    startTime = clock();
    glDrawArrays(GL_TRIANGLES, 0, numVertices); 
    // Wait for the rendering
    glFinish();
    // Finish Time
    finishTime = clock();
    relativeTime = finishTime - startTime;
    totalTime = (float) relativeTime / CLOCKS_PER_SEC;
    QGLFunctions::glDisableVertexAttribArray(0);
}

1 个答案:

答案 0 :(得分:0)

您可以创建自己的两个信号         void startPaint()void endPaint() 比捕捉他们somwhere(可能是MainWindow)和void startPaint()将启动计时器,void endPaint()将停止计时器并在某处存储值。 Qt班QElapsedTimer应该完成这项工作。