Столкнулся с такой проблемой: updateGL() по времени выполняется довольно долго (8-12мс), в то время как paintGL() менее 1мс.
В paintGL я рисую не много - вообще ничего не рисую, только буфер очищаю. В своей программе я по таймеру каждые 16мс вызываю функцию updateGL(), при этом, как я уже сказал, отрисовка происходит долго (почему так? Ощущение, как будто каждый пиксель на виджете рисуется процессором через отдельную функцию.)
Если я по таймеру вызываю paintGL(), то все нормально, рендер занимает не много времени, но на виджете ничего не отображается. Если при этом вызывать updateGL(), то отобразится все что нарисовалось при вызовах paintGL().
Как сделать так, что бы обновление виджета не занимало столько времени?
Вот код:
Widget::Widget(QGLWidget *parent): QGLWidget(QGLFormat(QGL::DoubleBuffer), parent){
}
void Widget::initializeGL(){
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
glClearColor(1, 1, 1, 1);
timer.start(16, this);
}
void Widget::timerEvent(QTimerEvent *){
time.start();
updateGL();//8-12мс
//paintGL();//<1мс
setWindowTitle(QString::number(time.elapsed()));
}
void Widget::resizeGL(int w, int h){
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w, h, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void Widget::paintGL(){
glClear(GL_COLOR_BUFFER_BIT);
}
Kubuntu 12.04
Qt 4.8.1
Кстати, если вместо updateGL вызывать просто update, то время отрисовки показывает <0мс, однако по ощущениям ничего не изменилось (может быть update вызывается асинхронно?) - если перемещать окно по рабочему столу, оно двигается рывками, так же как и при updateGL. При paintGL, окно перемещается плавно