Le cube tournant en OpenGL
Par Xavier Michelon


 
 

Le double tampon :

Si vous compilez et exécutez le programme tel que nous l'avons modifié jusqu'à présent, vous vous rendrez compte qu'un problème subsiste. On peut voir les polygones se dessiner les un après les autres. Evidemment, moins votre configuration sera puissante, plus l'effet sera marqué. Pour remédier à cet effet désagréable, nous allons mettre en place un système de double tampon d'image (double-buffering). Pour comprendre ce système, raisonnons par analogie : imaginons une personne en train de faire un exposé en utilisant comme support un rétroprojecteur. Si la personne n'a qu'un transparent, elle va dessiner sur le celui-ci alors qu'il est posé sur le rétroprojecteur éclairé. Le public va voir sur l'écran le crayon effectuer le tracé. Si en revanche l'orateur dispose de deux transparents, il peut projeter un transparent, dessiner le transparent suivant sur une table, échanger les deux transparents, effacer celui qu'il vient d'ôter du rétroprojecteur puis dessiner le prochain transparent, et ainsi de suite. De cette manière, le public a en permanence sous les yeux un transparent complet. La technique du double tampon consiste à dessiner une image dans un tampon mémoire pendant que la précédente est affichée à l'écran, puis à 'échanger' les deux images.

Glut permet de gérer un double tampon de façon extrêmement simple. Tout d'abord, comme pour le tampon de profondeur, il faut indiquer au système que l'on souhaite utiliser un double tampon d'image. Nous modifions donc à nouveau l'appel à glutInitDisplayMode() :

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

Il ne reste plus qu'à indiquer à glut le moment opportun pour l'échange des buffers : la fin du dessin de la scène. On place à cet effet un appel à glutSwapBuffers() à la fin de notre fonction d'affichage. Il est difficile de faire plus simple, n'est-ce pas ?.