等待QGLWidget完成呈现



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

我从MainWindow调用类GLWidget(继承自公共QGLWidget和受保护的QGLFunctions),我希望等待渲染完成并获得存储所经过时间的变量的值。问题是我没有找到一个合适的信号/方法来等待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);
}

您可以创建自己的两个信号void startPaint()void endPaint()然后在某个地方捕获它们(可能是主窗口),void startPaint()将启动计时器,void endPaint()将停止计时器并在某个地方存储值。Qt类QElapsedTimer应该做这项工作。

相关内容

  • 没有找到相关文章

最新更新