Как сместить вниз уже отрисованное в QGLWidget



  • Ситуация! Есть класс QGLWidget. В него приходят массивы байтов. Я их сохраняю в контейнере. Если число элементов в контейнере превысило некое число, то последний элемент удаляется. И потом для каждого массива из контейнера я расчитываю и вершины и цвета:
    Передаю данные в виджет этой функцией
    [code]
    void glwindow::sendSignal(QByteArray &bd) {
    sonoL.prepend(bD); //Поместить пакет в начало контейнера
    updateGL();
    }

    void glwindow::paintGL() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    int j = 50;
    foreach (QByteArray i, sonoL)
    {
    getVertexSono(i, j);
    getColorSono(i);
    drawSono(); //Функция рисования линии сонограммы
    ++j;
    }
    if (sonoL.count() > this->height()-50)
    sonoL.removeLast(); //Удалять последний
    }

    void glwindow::getVertexSono(QByteArray &bd, int y)
    {
    for (int i=0; i<bd.size(); i++)
    {
    VertexSono[i][0] = i;
    VertexSono[i][1] = y;
    }
    }

    void glwindow::getColorSono(QByteArray &bd)
    {
    for (int i=0; i<bd.size(); i++)
    {
    ColorSono[i][0] = bd.at(i);
    ColorSono[i][1] = bd.at(i);
    ColorSono[i][2] = bd.at(i);
    }
    }
    //Функция рисования
    void glwindow::drawSono() {
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_INT, 0, &VertexSono);
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(3, GL_UNSIGNED_BYTE, 0, &ColorSono);
    glDrawArrays(GL_LINE_STRIP_ADJACENCY, 0, len_view);
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    }
    [/code]
    Т.е. получается некий рисунок - нарисовалась линия, ушла на 1 пиксель вниз, на ее освободившемся месте нарисовалсь новая линия, потом эти две сместились вниз и по новой.
    Каждый раз, как что-то приходит - я расчитываю все координаты вершин и цвета по новой. Дело в том что массивы которые уже отрисовались мне по-хорошему не нужно было-бы перерасчитывать, но нужно сместить уже отрисованные линии по Y вниз. А потом рассчитать новую линию и поместить ее в верх виджета. Как бы мне избавиться от перерасчета для прошлых, уже отрисованных линий? QGLBuffer для этого подойдет?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.