Je suis en train de développer un jeu 2D basé sur les sprites pour les plates-formes mobiles et j'utilise OpenGL (enfin, en fait Irrlicht) pour rendre les graphiques. J'ai d'abord implémenté le rendu de sprite de manière simple: chaque objet de jeu est rendu sous forme de quadruple avec son propre appel de dessin GPU, ce qui signifie que si j'avais 200 objets de jeu, je faisais 200 appels de dessin par image. Bien sûr, ce n'était pas un bon choix et mon jeu était complètement lié au processeur car il y a un petit supplément de processeur associé à chaque appel de GPU. Le GPU est resté inactif la plupart du temps.
Maintenant, je pensais pouvoir améliorer les performances en collectant des objets en grands lots et en rendant ces lots avec seulement quelques appels de dessin. J'ai implémenté le traitement par lots (pour que chaque objet de jeu partageant la même texture soit rendu dans le même lot) et j'ai pensé que mes problèmes avaient disparu ... seulement pour découvrir que ma fréquence d'images était encore plus basse qu'auparavant.
Pourquoi? Eh bien, j'ai 200 (ou plus) objets de jeu, et ils sont mis à jour 60 fois par seconde. Chaque image, je dois recalculer une nouvelle position (translation et rotation) pour les sommets du CPU (le GPU sur les plates-formes mobiles ne prend pas en charge l'instanciation donc je ne peux pas le faire là-bas), et faire ce calcul 48000 par seconde (200 * 60 * 4 depuis chaque sprite a 4 sommets) semble tout simplement trop lent.
Que puis-je faire pour améliorer les performances? Tous les objets du jeu se déplacent / tournent (presque) à chaque image, donc je dois vraiment recalculer les positions des sommets. La seule optimisation à laquelle je pouvais penser est une table de correspondance pour les rotations afin de ne pas avoir à les calculer. Les sprites ponctuels seraient-ils utiles? Des hacks méchants? Rien d'autre?
Merci.