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