Ускорение 2D рисования - PullRequest
3 голосов
/ 12 ноября 2009

Я пытаюсь сделать 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 () я проверяю, достигла ли линия конец экрана, если True, то яСотрите экран, если нет, я рисую только новую часть линии.

  glBegin(GL_LINES);
    glVertex2i( points[t-1].x, points[t-1].y);
    glVertex2i( points[t-2].x, points[t-2].y);
 glEnd();

Я отключил Дизеринг и мультисэмплинг, и я использую плоские оттенки.Я использую ортографическую проекцию.

Есть ли способ рисовать быстрее?может быть, использовать opengl для закадрового рисования и отображения соответствующего растрового изображения?проект похож на этот?

1 Ответ

1 голос
/ 12 ноября 2009

Объекты буфера вершин (и, возможно, списки отображения) помогут в этом. По сути, вам нужен способ сократить количество звонков GL, которые вы делаете, и это станет быстрым.

...