Si vous savez à peu près ce qu'est la mémoire tampon ou buffer, vous pouvez passer les précisions préliminaires. Si ca ne vous intéresse pas, vous pouvez sauter l'introduction. Et d'ailleurs, si vous savez ce qu'est le double buffering (vu que je commence par une technique assez connue), vous pouvez passer tout le post.

Bonjour à tous,

Comme vous avez sûrement pu le remarquer, ce n'est pas Moi qui ai écrit le
précédent post sur l'avancement de Mon jeu. En effet, j'ai laissé l'ancien
tenancier de ce blog devenir mon nègre (en l'échange de quelques menues
génuflexions, il avait de toute façon grand besoin de maigrir), pour les
articles qui n'inspiraient pas Ma personne, n'ayant aucune envie de laisser
paraître celle-ci à ses heures plus sombres.

Aujourd'hui, pour ce premier post technique, je daignerais abaisser mon savoir à votre bas niveau
intellectuel, pour vous exposer les joies du double buffering. Après relecture,
je me rends compte que j'y suis si bien parvenu, que j'ai la douce impression
de redéfinir le mot vulgarisation, étant donné que je me paraîs à moi-même
vulgaire. Pour vous dire à quel point, j'ai 
failli m'écrier à plusieurs reprises « OMS ! » (Oh Myself !)

Quelques précisions préliminaires

Tout d'abord, qu'est-ce que j'appelle (et le reste du monde m'imite) le
buffer ? En français, c'est la mémoire tampon : l'une des zones de la
mémoire vive. Celle-ci est utilisée pour stocker des informations, exactement
comme le disque dur. Seulement, l'ordinateur y accèdera plus vite qu'aux informations
contenues par le disque dur. D'un autre côté, la mémoire vive est effacée à
chaque extinction de l'ordinateur et elle est beaucoup plus chère à produire
(et donc à acheter) qu'un disque dur.

On utilise donc la mémoire vive pour stocker des informations dont on aura
besoin rapidement mais que l'on n'a pas besoin de conserver. Par exemple, quand
vous regardez une vidéos sur internet, certains lecteurs (bien peu élégants)
vous précisent : « mise en mémoire tampon » ou « buffering » :
ils sont en train de télécharger la vidéo dans la mémoire tampon.

Le vif du sujet

Quel est le problème ? Prenons n'importe quel jeu (disons le mien). Vous
le savez déjà, pour que l'on ait une impression d'animation, plusieurs images
se succèdent très rapidement. A chaque nouvelle image, l'ordinateur crée l'image
bout à bout : il affiche le fond blanc, colle par-dessus le décor, puis
enfin colle par-dessus tout mon petit personnage. Seulement, le temps que l'ordinateur
retrouve le décor, le place au bon endroit, charge la bonne image du personnage
et le place au bon endroit, il s'écoule quelques millisecondes où l'écran reste
blanc. Ca paraît minuscule, mais ça produit tout de même chez le joueur un
léger effet de scintillement.

La solution, je* l'ai trouvée : au lieu d'afficher l'image petit à
petit, je* prépare entièrement mon image en la stockant dans la mémoire tampon,
puis une fois toute prête, je* l'échange avec celle qui est affichée à l'écran.
Ainsi, pas de scintillement pour le joueur puisque l'image apparaît seulement
quand elle est prête.

(*) : à l'aide de la SDL

Enfin, qu'est-ce que ça change dans mon code pour pouvoir utiliser le double
buffering ? Rien : en fait, j*'ai tout programmé de sorte qu'il
suffise que j'ajoute au début de mon code, quand je demande à toutes les
fonctions de mon ordinateur de se réveiller (enfin, quand j'initialise la SDL,
pour être précis), il suffit que j'ajoute un petit mot pour que le double
buffering pour qu'il s'active : SDL_DOUBLEBUF.

Pourquoi c'est aussi simple ? En fait, dans les outils de programmation
que j'utilise (dans la SDL pour être précis), on programme toujours comme si on
utilisait le double buffering. Seulement, s'il est activé, l'image se préparera
en mémoire au fur et à mesure qu'on lui dit de se préparer, alors que s'il ne l'est
pas, toute la préparation de l'image se fera petit à petit au moment où je lui
dis de s'afficher, comme je vous l'ai décrit un peu plus haut.

Pourquoi le double buffering n'est-il pas activé dès le début ? Parce
que cette technique prend 2 fois plus de place en mémoire : d'habitude, on
stocke uniquement l'image que l'on affiche, mais quand on l'utilise, on stocke
l'image affichée et l'image que l'on prépare. Seulement, en ces temps où l'on
utilise un int pour stocker un booléen, cette technique est presque toujours
activée par défaut (j'ai même entendu parler de buffering multiple : on
stocke les deux, voire les trois prochaines images à afficher ...

Je* vous salue,

.