L'évènement onPaint

 

Cet évènement, nous l'avons vu, devra prendre en charge le positionnement de la caméra, mais aussi l'affichage des objets. C'est donc ici que l'on devra mettre les glBegin et glEnd pour dessiner nos vertice, et autres fonctions de bases OpenGL.

Par défaut, j'affiche un cube juste devans la caméra.

 

Mais comment fonctionne cet évènement ?

Comme vous l'aurez imaginé, cet évènement est déclenché sous Windows lors de la réception du message WM_PAINT pour forcer un affichage.

Dans le cas de X Window ou GLUT, il est lancé par un expose ou la procédure GLUT associée pour gérer l'affichage.

Par défaut, onPaint est surtout lancée lorsqu'il n'y a plus de messages:

La méthode readMsgTrtGLW() traite les messages de notre fenêtre (elle est déclenchée via la méthode trtMsgGLW(bool bBcl) (pour Windows, X Window ou GLUT que nous avons vu sous le paragraphe boucle de traitement).

S'il n'y a plus de messages à traiter, alors elle lance systématiquement la méthode onIdleGLW() qui par défaut lance un rePaintGLW() afin de forcer un affichage qui exécutera donc notre méthode onPaint.

Mais cette solution n'est pas forcement la meilleure car elle va demander systématiquement au système de redessiner alors qu'il n'y a peut-être rien de spécial à faire ! D'où une grosse consommation CPU. Il est donc possible de la désactiver car la fonction onIdleGLW est évidemment virtuelle.

 

Mais dans ce dernier cas, ce sera à vous de déclencher l'évènement onPaint en utilisant la méthode rePaintGLW().

On peut ainsi imaginer que vous appeliez la méthode trtMsgGLW(bool bBcl) en lui passant false comme paramètre. Dans ce cas vous pourriez gérer l'affichage directement après (ou avant) l'appel à cette méthode.

Image non trouvée !Comme expliqué dans le chapitre concernant la procédure de gestion des messages pour Windows, gestion des messages pour X Window ou gestion des messages pour GLUT, celle-ci s'occupait de repositionner OpenGL sur le device context et render context de notre instance glWindows. En sortant onPaint de la procédure de gestion des messages, cette tâche n'est évidemment plus assurée !