Exemple OpenGL MSDN, boucle des msg

Exemple OpenGL MSDN, boucle des msg - C++ - Programmation

Marsh Posté le 18-01-2003 à 12:12:10    

Voila un copier coller d'une partie de WinMain de l'exemple OpenGL pour win32 de msdn. Je ne comprends pas pourquoi le programme une fois compilé et éxécuté me fait appel à drawScene() en boucle. Pour moi il devrai être appelé qu'une seule fois et après l'animation vient par l'appui des flèches... (code complet: http://msdn.microsoft.com/library/ [...] t_17jm.asp )
 

Code :
  1. /* animation loop */
  2.     while (1) {
  3.         /*  
  4.          *  Process all pending messages  
  5.          */
  6.         while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)
  7.         {
  8.             if (GetMessage(&msg, NULL, 0, 0) )
  9.             {
  10.                 TranslateMessage(&msg);
  11.                 DispatchMessage(&msg);
  12.             } else {
  13.                 return TRUE;
  14.             }
  15.         }
  16.         drawScene();
  17.     }

Reply

Marsh Posté le 18-01-2003 à 12:12:10   

Reply

Marsh Posté le 18-01-2003 à 12:35:09    

ANTSite a écrit :

Voila un copier coller d'une partie de WinMain de l'exemple OpenGL pour win32 de msdn. Je ne comprends pas pourquoi le programme une fois compilé et éxécuté me fait appel à drawScene() en boucle. Pour moi il devrai être appelé qu'une seule fois et après l'animation vient par l'appui des flèches... (code complet: http://msdn.microsoft.com/library/ [...] t_17jm.asp )
 

Code :
  1. /* animation loop */
  2.     while (1) {
  3.         /*  
  4.          *  Process all pending messages  
  5.          */
  6.         while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)
  7.         {
  8.             if (GetMessage(&msg, NULL, 0, 0) )
  9.             {
  10.                 TranslateMessage(&msg);
  11.                 DispatchMessage(&msg);
  12.             } else {
  13.                 return TRUE;
  14.             }
  15.         }
  16.         drawScene();
  17.     }




Moi, j'ai toujours fait comme ça. Si un objet quelconque doit bouger sans que tu touches aux flèches, il faut bien l'afficher quand même!


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 18-01-2003 à 22:17:22    

tout depend si tu veux que ton appli prenne toutes les ressources qu'elle peut ou alors reste idle la plupart du temps.
 
Tu peux aussi rajouter un booleen isActive qui devient faux
quand ton application est minimisee: ca sert a rien de tracer en arriere plan. Dans ce cas tu peux remplacer ton peek par un Getmessage qui devient bloquant jusqu'au prochain message.
 
En general dans un jeu video (par exemple) l'ecran est rafraichi en permanence parce qu'il y a toujours un element qui bouge a l'ecran meme s'il n'y a pas d'action du joueur.
Et si tu n'as pas besoin de 100% du CPU, ton appli peut se mettre en attente d'une notification d'evenement comme la fin du balayage vertical (pour ne pas tracer plus d'une fois par frame).
 
LeGreg

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed