Bonjour,
Je suis débutant dans le SDL et je me heurte à un problème en manipulant des images.. En fait, j'obtient un résultat différent sur 2 ordinateurs différents, avec le même code... Et après cherché plusieurs heures sur Internet, je pense à un problème de "double buffering".
Je vous explique. Je m'entraine à manipuler les images. Je veux faire apparaître des images (de 220px de large) 1 par 1, l'une à côté de l'autre, tout en gardant les images précendent affichées. Comme je veux voir les images apparaître 1 par 1, je fais un SDL_Delay() entre chaque affichage, juste après le SDL_RenderPresent().
Voici l'algorithme:
<1.a J'ajoute ma 1ère image dans le renderer dans le coin supérieur gauche (0,0)>
<1.b J'affiche l'écran : SDL_RenderPresent()>
<1.c Je fais une pause de quelques ms : SDL_Delay()>
<2.a. J'ajoute ma 2ème image, 220px plus loin, dans le renderer>
<2.b. J'affiche l'écran : SDL_RenderPresent()>
<2.c. Je fais une pause de quelques ms : SDL_Delay()>
<3.a. J'ajoute ma 2ème image, 220px plus loin, dans le renderer>
<3.b. J'affiche l'écran : SDL_RenderPresent()>
<3.c. Je fais une pause de quelques ms : SDL_Delay()>
<etc.>
Ce code fonctionne sans problème sur un ordinateur. Et lorsque je le porte sur un autre, c'est là que je rencontre le problème, ça me fait ceci:
- affichage de la 1ère image
- affichage de la 2ème image uniquement
- affichage de la 1ère et de la 3ème image uniquement
- affichage de la 2ème et de la 4ème image uniquement
- affichage de la 1ère, de la 3ème et de la 5ème image uniquement
- affichage de la 2ème, de la 4ème et de la 6ème image uniquement
Ca me fait penser à un problème de double-buffering. J'ai alors placé la fonction "SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0);" juste après le "SDL_Init(SDL_INIT_VIDEO)" ... et voila que j'obtiens un écran tout blanc sans aucun affichage d'image. Là, je commence à en avoir un peu marre de chercher sur le net, alors je viens chercher de l'aide :-) "SDL_GL_SetAttribute()", c'est pour l'OpenGL, non? Alors, ça ne m'est pas utile pour ce que je fais je suppose? Comment désactiver le double-buffering dans mon cas?
A noter que, si je modifie l'algorithme comme ceci, le problème est réglé, mais ce n'est pas très "propre" de faire plusieurs "SDL_RenderPresent()":
<1.a. J'ajoute ma 1ère image dans le renderer>
<1.b. J'affiche l'écran : SDL_RenderPresent()>
<1.c. Je fais une pause de quelques ms : SDL_Delay()>
<1.d. J'affiche l'écran une fois en plus : SDL_RenderPresent()>
<2.a. J'ajoute ma 2ème image, 220px plus loin, dans le renderer>
<2.b. J'affiche l'écran : SDL_RenderPresent()>
<2.c. Je fais une pause de quelques ms : SDL_Delay()>
<2.d J'affiche l'écran une fois en plus : SDL_RenderPresent()>
<3.a. J'ajoute ma 2ème image, 220px plus loin, dans le renderer>
<3.b. J'affiche l'écran : SDL_RenderPresent()>
<3.c. Je fais une pause de quelques ms : SDL_Delay()>
<4.d. J'affiche l'écran une fois en plus : SDL_RenderPresent()>
<etc.>
Comment puis-je régler le problème "proprement" sur le 2ème ordinateur? Désolé d'avoir été long, mais j'ai essayé d'être clair :-)
Merci d'avance pour votre aide.
Partager