我正在使用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);
}
答案 0 :(得分:0)
您可以创建自己的两个信号
void startPaint()
和void endPaint()
比捕捉他们somwhere(可能是MainWindow)和void startPaint()
将启动计时器,void endPaint()
将停止计时器并在某处存储值。 Qt班QElapsedTimer
应该完成这项工作。