Boucle de gestion des messages
Depuis toujours (du moins je pense), les systèmes fenêtrées utilisent une file de messages.
Cette file de messages stocke l'ensemble des évènements qui peuvent se produire sur les objets d'une fenêtre, ...
Ces fenêtres doivent donc lire ces messages les concernant pour par exemple:
- Afficher/positionner une fenêtre
- Réafficher les parties de l'images abimées par la superposition d'une autre fenêtre
- La fenêtre gagne le focus (et donc le curseur).
- ...
GLUT qui est une couche qui s'ajoute par dessus ces systèmes n'echappe donc pas à la règle !
Mais là aussi, cette gestion des messages est fortement simplifiée (comme nous le verrons par la suite).
Au vu des explications
données ici, vous comprennez (du moins si vous découvrez la programmation
des fenêtres...) pourquoi le positionnement, retaillage, création
de fenêtres ne se déclenchent pas tant que cette fonction n'est
pas lancée. Les messages de demandes de modifications s'accumulant dans
la liste de messages, mais aucun traitement n'étant encore lancé
pour les lire.
La fonction de lecture de ces messages est glutMainLoop()
void glutMainLoop ( void )
Cette fonction permet d'entrer dans la boucle de GLUT de traitement des événements.
Certains évènements pourront être interceptés pour déclencher nos propres fonctions.
Ces fonctions seront donc déclenchées par glutMainLoop.
Cette fonction
est bloquante. Elle ne rendra la main que lorsque vous aurez détruit
votre fenêtre !
La destruction
d'une fenêtre via la fonction glutDestroyWindow() ne met pas fin à
cette fonction bloquante qui va continuer de gérer des messages alors
qu'il n'y a plus de fenêtres à gérer !!! Le seul moyen d'en
sortir sera l'utilisation de la fonction exit !!!