- Dans mon application, je peins une carte des rues à l'aide de
QPainter
sur unwidget
- fait par
QPainterPaths
qui contiennent des chemins précalculés à dessiner - le site
widget
est actuellement unQWidget
et non unQGLWidget
mais cela pourrait changer.
- fait par
- J'essaie de déplacer la peinture hors de l'écran et de la diviser en plusieurs tâches.
- Je veux peindre chaque morceau sur un
QImage
et enfin dessiner toutes les images sur lewidget
-
QPainterPaths
ont déjà été découpées en morceaux, ce n'est donc pas le problème. - Le problème est que le fait de dessiner sur
QImages
Il s'agit de 5 fois plus lent que de puiser dansQWidget
- Je veux peindre chaque morceau sur un
- Quelques tests de référence que j'ai effectués
- les valeurs temporelles sont des moyennes arrondies sur plusieurs cycles.
- le morceau de test contient 100
QPainterPaths
qui ont chacune environ 150 segments de ligne linéaire - les quelque 15 000 chemins sont dessinés avec
QPainter::Antialiasing
un indice de rendu,QPen
utilise un chapeau rond et un joint rond
-
Rappelez-vous que mes sources sont
QPainterPaths
(et largeur de ligne + couleur ; certains dessiné certains rempli )- Je n'ai pas besoin de tous les autres types de dessins.
QPainter
soutient - Can
QPainterPaths
être converti en quelque chose d'autre qui peut être dessiné sur unOpenGL buffer
ce serait une bonne solution. - Je ne suis pas familier avec
OpenGL
le rendu hors écran et je sais qu'il existe différents types de tampons OpenGL, dont la plupart ne sont pas destinés au rendu d'images 2D mais aux données de vertex.
Paint Device for chunk | Rendering the chunk itself | Painting chunk on QWidget -----------------------+----------------------------+-------------------------- QImage | 2000 ms | < 10 ms QPixmap () | 250 ms | < 10 ms QGLFramebufferObj. () | 50 ms | < 10 ms QPicture | 50 ms | 400 ms -----------------------+----------------------------+-------------------------- none (directly on a QWidget in paintEvent) | 400 ms ----------------------------------------------------+--------------------------
- Je n'ai pas besoin de tous les autres types de dessins.
(*) These 2 lines have been added afterwards and are solutions to the problem!
Ce serait bien si vous pouviez me dire un solution non basée sur OpenGL car je veux compiler mon application en deux versions : OpenGL
y non-OpenGL
version.
De plus, je veux que la solution puisse être rendue dans un fichier de type Fil de discussion non-GUI .
Existe-t-il un bon moyen de dessiner efficacement les morceaux en dehors de l'écran ?
Y a-t-il une contrepartie hors écran de QGLWidget
(un OpenGL
tampon hors écran) qui peut être utilisé comme un dispositif de peinture pour QPainter
?