[std::sort & std::vector] Quelle est la manière la plus rapide pour effectuer un tri ?
Bonsoir à tous ! :-]
Dans le projet que je confectionne actuellement avec la SFML, j'ai constaté une chute significative de FPS au fur & à mesure que j'affiche des sprites, au début je me suis dit " ben m**rde alors, ça bouffe tant de CPU que ça les sprites ? ", mais Que Nenni ! Je me suis finalement rendu compte que ce qui ralentissait mon programme au fur & à mesure que le nombre de sprite augmentait.. c'était ma fonction de tri !
J'ai conçu cette mini-fonction toute simple en utilisant une fonction lambda :
Code:
1 2 3 4 5 6
| void Camera::sortFunction()
{
///ON TRI LES SPRITES LES PLUS LOINS AUX PLUS PROCHES///
std::sort(m_vecSprites.begin(), m_vecSprites.end(),
[](Sprite& s1, Sprite& s2) -> bool { return s1.getDistance() > s2.getDistance(); });
} |
Le but étant de trier les sprites les plus loin jusqu'aux plus près de la caméra, je suis obligé de procéder à un tri dans mon cas de figure, mais quand je passe à 6,7 / 10,11 voir 15 sprites, mon programme rame énormément, comme si j'avais un vieux pentium 133mHz :mouarf:
Lorsque je retire cette fonction, mon programme redevient parfaitement fluide, j'ai mes 60 FPS, mais évidemment, mes sprites n'apparaissent pas le bon ordre car non triés...
Donc selon vous, comment pourrais-je essayer de procéder afin de pouvoir gérer un tri de manière rapide & optimisée ?
J'ai essayé d'appeler ma fonction dans un thread séparé, ça n'a rien changé au problème, hélas :-/
Merci à vous ! :mrgreen: