Bonjour,
(Je détaille mon soucis en début de topic, la problématique principale viens à la fin pour ceux souhaitant aller vite).
J'ai créé un programme, d'abord avec la SDL, avant de passer à GTK+ dont la puissance me semblait beaucoup plus intéressante pour la suite de mon développement.
Cependant, dans mon programme je dois générer un grand nombre de dessin de rectangles (une grille) pouvant soit être blancs ou bleu. Quand je dis un grand nombre, cela se base sur une matrice de 100*100 minimum, 300*300 souhaité, et plus si possible (ce serait à l'utilisateur de choisir) avec une vitesse de 250ms souhaitée entre chaque rafraichissement de la grille entière.
Bien sûr je ne veux pas aller à l'infini, mais au moins jusqu'à 300*300, cela me semble possible. Avec la SDL, ce but a été atteint. J'ai ensuite voulu reproduire cela avec GTK+ (avant de poursuivre le développement) et j'ai été amené à certaines difficultés de rafraichissement déjà pour une matrice de 100*100, que j'ai pu surmonter notamment grâce à l'aide de gérald (actif aussi sur ce forum) sur le forum GTK+.
J'arrive ainsi aujourd'hui à assurer des deux côtés ma matrice de 100*100 (mon minimum en terme de performances), en utilisant la bibliothèque Cairo avec GTK+, recommandée pour le dessin.
Cependant, je n'arrive pas à arriver à des performances très élevées et le 300*300 génère automatiquement un segmentation fault. Pour comprendre le problème j'ai ainsi fait un mini benchmark pour une même portion de code (réalisant les mêmes choses) pour une fenêtre de 500*400 sur un PC équipé d'un processeur dual core AMD Turion 64*2.
Pour une matrice de 100*100 (en moyenne) :
SDL : 0.040 - 0.050 s
Cairo + GTK+ : 0.120 - 0.130 s
Pour du 300*300 :
SDL : 0.150 - 0.160 s
Cairo + GTK+ : segmentation fault (arrive près des 250ms pour du 150*150)
A cela s'ajoute que Cairo, sur une base de 100*100, prend facilement 20 à 30% de ressources CPU quand la SDL flirte avec le 0. Cette ressource, après quelques tests, est de plus quasiment entièrement demandée par le dessin avec Cairo (dessin qui se fait d'abord en mémoire avant d'être affiché) (et non pas par la fenêtre GTK+).
Alors mon problème est le suivant : peut-on améliorer les performances de mon dessin avec Cairo ? C'est à dire, est-ce Cairo qui est vraiment très lent en comparaison avec la SDL ? Est-ce une erreur de code (si vous le souhaitez je peux vous donner les sources du programme fait avec la SDL et avec GTK+) de ma part ?
Cairo semble être utilisé de plus en plus avec GTK+ et de grands logiciels comme Mozilla Firefox se serve de cette librairie, c'est pourquoi je m'interroge sur les performances de cette librairie.
Je vous remercie d'avance,
Cordialement,
Partager