QPainter und OpenMP

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

QPainter und OpenMP

Beitrag von slash-ex »

Ich wollte nur mal wissen, ob man das Zeichnen durch überladen der paintEvent-Funktion durch OpenMP etwas beschleunigen könnte.
QWidget benutzt soweit ich weiß lediglich die CPU für derartige Operationen. Allerdings bin ich mir nicht sicher welche Abh. beim Aufruf des painters auftreten.
Andererseits wären gerade Zeichenoperationen prädestiniert für OpenMP.

Code: Alles auswählen

for(int k = 0; k < iNeurPerLayer; k++) {
                    float fPosDX = fOffsetX + iCounterD*this->geometry().width()/iNeurPerLine;
                    float   fPosDY = iLineD*fOffsetY + (i+1)*this->geometry().height()/iNrOfLayers + m_fSize+m_fSize/6 + m_fSize/2;;
                    QPointF ptEnd( fPosDX + fSize/2,
                                   fPosDY + fSize/2);

                    float fAngle = QLineF(ptBeg, ptEnd).angle();

                    QLineF lineArwBotR(ptBeg, ptEnd);
                    lineArwBotR.setAngle(90+fAngle);
                    lineArwBotR.setLength(fSize/16);
                    lineArwBotR.translate(0, 0);
                    QLineF lineArwHead(lineArwBotR.p2(), ptEnd);
                    QLineF lineArwBotL(ptBeg, ptEnd);
                    lineArwBotL.setAngle(270+fAngle);
                    lineArwBotL.setLength(fSize/16);
                    lineArwBotL.translate(0, 0);

                    QPainterPath path;
                    path.moveTo(lineArwBotR.p2() );
                    path.lineTo(lineArwBotL.p2() );
                    path.lineTo(ptEnd);
                    path.lineTo(lineArwBotR.p2() );

                    QLinearGradient grad(ptBeg, ptEnd);
                    grad.setColorAt(0, Qt::gray);
                    grad.setColorAt(1, QColor(64,64,64));
                    QBrush brush(grad);
                    pen.setColor(Qt::black);
                    painter.setPen(pen);
                    painter.setBrush(brush);

                    painter.drawPath(path);
}
Ich habe bereits den Hintergrund in eine QPixmap gepuffert. Leider stoße ich beim zeichnen von bereits > 250 paths an die Grenzen meiner CPU, wenn ich die Kanten noch zusätzlich glätten möchte. Theoretisch wäre jedoch der theoretische Performanceanstieg linear wenn man alle Prozessoren auslasten könnte. Hat einer mal Qt mit OpenMP ausprobiert, oder muss ich gleich CUDA/OpenGL zum zeichnen benutzen?
Antworten