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).

Image non trouvée !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.

 

Image non trouvée !Cette fonction est bloquante. Elle ne rendra la main que lorsque vous aurez détruit votre fenêtre !

Image non trouvée !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 !!!