我正在为使用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
应该做这项工作。