Malt QPainter auf QGLWidgets mit OpenGL Befehlen?

Orbit

Erfahrenes Mitglied
Hallo,

ich bin grad leicht verwirrt von der Qt-Doku:

In der Klassenbeschreibung von QGLWidget steht;
you have the choice between using QPainter and standard OpenGL rendering commands.

Im Overpaintingbeispiel steht:
Since QPainter itself uses OpenGL calls when used on a QGLWidget subclass, we need to preserve the state of various OpenGL stacks when we perform our own calls, using the following approach....

Was heißt das jetzt im Klartext? ist es für die Effizienz egal, ob ich ein QGLWidget mit QPainter oder OpenGL-Befehlen bemale? Wird also alles in gleiche Befehle an die Graka umgewandelt?

Ist es eine gute Idee, eine sehr aufwendige Zeichnung auf ein QGLWidget zu zeichnen (dazu den Befehl "renderPixmap()" als Puffergrafik zu verwenden) und dabei nur über QPainter zu gehen?

Ich finde das sehr schwammig formuliert, besonders weil es in der Klassenebschreibung von QGLWidget / QPainter nie erwähnt wird, dass es die gleichen Auswirkungen haben soll (also gleiche Effizienz) und nur in diesem Beispiel als kleiner Hinweis steht,,,, ist ja nun doch nicht ganz unwichtig wie es nun umgewandelt wird.

LG,
Orbit
 
Was heißt das jetzt im Klartext?
Man kann auf einem QGLWidget entweder mit einem QPainter zeichnen oder mit OpenGL-Anweisungen. Der QPainter nutzt in diesem Fall intern aber auch OpenGL-Anweisungen.

ist es für die Effizienz egal, ob ich ein QGLWidget mit QPainter oder OpenGL-Befehlen bemale? Wird also alles in gleiche Befehle an die Graka umgewandelt?
Na ja, das kommt natürlich darauf an, welche OpenGL-Befehle du verwendest. Wenn du genau dieselben verwendest wie der QPainter, dann bekommt die Grafikkarte natürlich dieselben Anweisungen. Ansonsten eben nicht.

Ist es eine gute Idee, eine sehr aufwendige Zeichnung auf ein QGLWidget zu zeichnen (dazu den Befehl "renderPixmap()" als Puffergrafik zu verwenden) und dabei nur über QPainter zu gehen?
Kommt auf die Zeichnung an. Am besten ausprobieren, was schneller ist. Wenn man alles selbst in OpenGL implementiert hat man halt mehr Freiheiten, u.a. auch für Optimierungen.

Ich finde das sehr schwammig formuliert, besonders weil es in der Klassenebschreibung von QGLWidget / QPainter nie erwähnt wird, dass es die gleichen Auswirkungen haben soll (also gleiche Effizienz) und nur in diesem Beispiel als kleiner Hinweis steht,,,, ist ja nun doch nicht ganz unwichtig wie es nun umgewandelt wird.
Dass man mit einem QPainter auf ein QGLWidget malen kann, steht in den Dokumentation zu QGLWidget. Dass man auf ein QGLWidget nur mit OpenGL-Anweisungen zeichnen kann, liegt in der Natur der Sache. Der Schluss, dass ein QPainter auf einem QGLWidget mit OpenGL-Anweisungen zeichnet, ist dann auch nicht mehr schwer.

Grüße,
Matthias
 
Zurück