Premium
[Press Space to continue]

[Press Space to continue]

Par hairaz Blog créé le 07/12/10 Mis à jour le 31/07/12 à 18h21

Dev' blog d'un petit jeu pour le concours Innov'game : Space (à la gloire de la barre espace, et du jeu vidéo par la même occasion).

Ajouter aux favoris
Signaler
Post technique

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,

. 

Ajouter à mes favoris Commenter (1)

Commentaires

hardkey
Signaler
hardkey
De un, j'adore le style, de deux, je dis respect d'avoir réussi à faire un post entier sur le double buffering, parce que c'est un truc plutôt simple ;)

Édito

Bon ! Il est temps de lancer ce blog.

Space, c'est l'histoire d'un mec. Un mec que vous contrôlez à la barre espace.

Ce blog, c'est l'histoire d'un jeu. Un jeu avec un concept tellement bizarre qu'il faut bien que je m'explique un peu.

Et je suis sur Twitter : @hairazTweet

Archives

Favoris