Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Performances draw(sf::VertexArray)  (Lu 2344 fois)

0 Membres et 1 Invité sur ce sujet

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Performances draw(sf::VertexArray)
« le: Décembre 22, 2015, 06:52:17 pm »
Bonjour,

Je sais que le sujet des performances a déjà été abordé ici. La solution, pour dessiner des choses à l'écran sans trop perdre en images par seconde, c'est d'utiliser un nombre minimum de sf::VertexArray plutôt que d'afficher plein de sprites. Je cite : "les performances sont directement proportionnelles au nombre d'appels à draw..." J'avais déjà pu tester que d'afficher un sprite par tile dans une tilemap réduisait drastiquement les performances.

Aujourd'hui j'ai fais un petit test en affichant une image en deux tableaux de vertices. Elle représente le terrain, ou la map, c'est un simple dessin sous paint. Le premier tableau représente le sol, le deuxième ce qui pourra être affiché par-dessus le personnage. Entre les deux je dessine le sprite, donc.
Je voudrais savoir s'il est normal que chaque appel à draw pour un VertexArray divise mon fps par environ deux ?
Pour le coup j'ai fait un autre test en rajoutant une dizaine de sprites et ça a moins d'impact que l'ajout d'un seul VertexArray.

Loin de moi l'envie de dénigrer la SFML, c'est une bibliothèque que j'aime beaucoup, mais je voudrais savoir, n'étant pas du tout professionnel ni très expérimenté, si ce comportement est comparable avec celui des technologies utilisées dans les jeux 2d commerciaux, si les développeurs professionnels doivent composer avec les mêmes contraintes ? Outch la phrase à rallonge. Donc voilà, j'ai mis des petites images pour étayer mes propos et vous montrer mes talents de dessinateur Mspaint approved.

Merci d'avance à ceux qui pourront me répondre.

Voici mes tests (j'utilise une carte graphique récente avec accélération 3d) :


Ici je dessine tout. J'ai un FPS de 108ms.


J'enlève un VertexArray


J'enlève les deux.

Voici ce que contiennent les VertexArray, et comment je les rempli, au cas où ça puisse avoir un impact sur les perfs :






Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Performances draw(sf::VertexArray)
« Réponse #1 le: Décembre 22, 2015, 10:42:45 pm »
Les conseils des tutoriels c'est bien, mais il ne faut pas en oublier le bon sens pour autant... Si un vertex array contient un million de points, c'est un seul appel à draw() mais qui va tout de même coûter bonbon. Et vu comment tu remplis les tiens, je pense qu'ils sont assez chargés.
Laurent Gomila - SFML developer

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Re : Performances draw(sf::VertexArray)
« Réponse #2 le: Décembre 23, 2015, 01:37:30 am »
Ah bah oui, tout à fait! Ma fenêtre et ma map sont en 800x600. Le 2ème array ne contient que la baraque, donc le 1er qui affiche le reste est chargé de pas mal de points oui. Bon, même 800x600 ça fait pas des millions. Je me disais que peut-être un quad texturé coutait autant que son équivalent en points.

La bonne stratégie serait donc d'utiliser un autre type de primitive, c'est ça ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Performances draw(sf::VertexArray)
« Réponse #3 le: Décembre 23, 2015, 07:53:34 am »
Citer
Bon, même 800x600 ça fait pas des millions
Ca en fait tout de même un demi (480000) ;)

Citer
Je me disais que peut-être un quad texturé coutait autant que son équivalent en points.
Compare par toi-même :
- 480000 points à transformer, 480000 pixels à colorer
vs
- 4 points à transformer, 480000 pixels à colorer

Si on prend la très grossière approximation que chaque étape prend autant de temps, une solution est 2x moins performante que l'autre.

Citer
La bonne stratégie serait donc d'utiliser un autre type de primitive, c'est ça ?
Difficile de te conseiller sans savoir réellement ce que tu comptes faire. Parce qu'un vertex array composé de points représentant chacun un pixel... j'espère que c'est pour faire des tests, et que ce n'est pas ce que tu vas faire dans ton appli finale ;)

Je ne peux que te conseiller de chercher des articles expliquant le pipeline de rendu graphique (ce qui se passe à l'intérieur de la carte graphique), ça te permettra de mieux appréhender les questions d'optimisation.
Laurent Gomila - SFML developer

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Re : Performances draw(sf::VertexArray)
« Réponse #4 le: Décembre 23, 2015, 05:23:43 pm »
Oui tout à fait, je ne fais que m'exercer pour le moment. Effectivement vu comme ça il est plus raisonnable d'utiliser un quad. J'avais pas percuté le concept de transformation appliqué à chaque élément du tableau.

 

anything