codemoe : une boucle en SDL optimisée
Pour ceux qui commence à faire du sdl si vous avez fait comme moi vous obtenez en général un boucle comme ci-dessous:
while (isRunning) { //Je gère mon affichage SDL_Flip( fenetre ); while( ([chronometre tempsPasse] < (1000 / FRAMES_PER_SECOND)) ) { //On attend... } }
En général on a une boucle infinie qui gère l'affichage et les saisies et en fin de boucle on attends un petit peu que ça ce passe.
Le gros inconvénient de cette boucle c'est qu'elle tourne très vite et rapidement le ventilateur de votre machine s'emballe vous signifiant que le CPU est à fond (et tout ça pour rien faire :-p )
Lorsque je me suis intéressé au sujet (j'aime pas entendre mon ventilo souffler pour rien) j'ai fait pas mal de recherches et de tests pour finalement arriver à ce résultat:
while (isRunning) { //Je gère mon affichage SDL_Flip( fenetre ); if ( [chronometre tempsPasse] < (1000 / FRAMES_PER_SECOND) ) { SDL_Delay((1000 / FRAMES_PER_SECOND)-[chronometre tempsPasse]); } }
L'idée ici est non plus de tourner sans arrêt jusqu'à écoulement du temps mais d'utiliser une fonctionnalité qui endors l'application laissant à votre machine le temps de faire autre chose.
A noter le test avant qui permet de ne pas appliquer un délai négatif :-p
Tous ceux qui ont creusé un peu dans SDL trouveront ça basique mais quand on débute sur SDL la plupart des tutoriaux ne vous donnent que la première boucle dans leurs exemples ce qui est un peu dommage.