Я пытаюсь сделать 2D-сюжет в реальном времени. Я попытался изменить пример осциллографа qwt, попытался использовать QGraphicsView и QPainter для достижения высокой частоты кадров. Я использую 8 каналов для построения данных, поступающих с порта rs232. Я беру образец каждые 10 мс. Возможно, я неправильно использовал QPainter, но я не мог рисовать очень быстро. В примере с qwt, в котором не обновляется весь экран, скорость отрисовки была хорошей, особенно в X11 с Qt::WA_PaintOutsidePaintEvent и Qt::WA_PaintOnScreen.
Теперь я подклассифицирую QGLWidget и достиг приемлемой скорости. Но мне интересно, могу ли я улучшить его.
Каждый раз, когда я получал новую точку, я сохранял ее, а вызов updateGL(); В этом случае я получил только координату y, но я собираюсь получить всю пару.
void Plot::addPoint(int y)
{
points[t].x=t;
points[t].y=y;
t++;
updateGL();
}
В DrawGL() я проверяю, достигает ли линия конца экрана, если это правда, я стираю экран, если нет, я рисую только новую часть линии.
glBegin(GL_LINES);
glVertex2i( points[t-1].x, points[t-1].y);
glVertex2i( points[t-2].x, points[t-2].y);
glEnd();
Я отключил дизеринг и мультисэмплинг и использую плоские оттенки. я использую ортографическую проекцию.
есть ли способ рисовать быстрее? может быть, используя opengl для рисования вне экрана и показа соответствующего растрового изображения? проект похож на этот?