bonjour,
en fait , j'aimerais avoir à quoi sert la fonction glutMainloop dans une fonction main, j'ai glutdisplayfunc avant et glutreshapefunc avant, je ne sais pas comment ça marche vous pourriez m'expliquer?
Version imprimable
bonjour,
en fait , j'aimerais avoir à quoi sert la fonction glutMainloop dans une fonction main, j'ai glutdisplayfunc avant et glutreshapefunc avant, je ne sais pas comment ça marche vous pourriez m'expliquer?
En cherchant tu trouve :
En gros lorsque tu mets cette fonction, ton programme rentre dans une boucle qui traite les évènements GLUT => comme par exemple les touches de clavier ou alors la souris et ton programme ne sortira pas de cette boucle tant que tu ne quittera pas le programme.Citation:
glutMainLoop enters the GLUT event processing loop. This routine should be called at most once in a GLUT program. Once called, this routine will never return. It will call as necessary any callbacks that have been registered.
Exactement ce qui a été dit.
La fonction glutMainLoop démarre la boucle d'évènement de GLUT. Étrangement dans GLUT ( je conseille toujours freeGLUT ) il n'y a pas de vrai moyen manuel de sortir del a boucle ... donc il est facile de faire une fuite de mémoire. freeGLUT améliore les choses.
Maintenant ... comment ça marche. Donc nous avons toute une série de fonction qui finisse par le mot 'func' et qui prenne des pointeurs sur fonction tel que glutdisplayfunc. C'est fonction permettent d'enregistrer une fonction dans un événement précis de la boucle d'évènements ( glutMailLoop ).
Ainsi , si la fenêtre est redimensionné, un évènement va avertir GLUT que la fenêtre est redimensionné et GLUT, dans la glutMainLoop va executer la fonction que vous avez enregistrer avec: glutReshapeFunc().
Il faut savoir que s'il n'y a eu aucun évènement, c'est la fonction enregistrer avec glutIdleFunc() qui est executé :).
Si on lit la documentation de freeglut, on trouve :
Donc il existe maintenant deux fonctions une qui permet d'exécuter une sous-boucle et une autre pour nettoyer et quitter proprement (glutLeaveMainLoop).Citation:
One of the commonest complaints about the GLUT library was that once an application called glutMainLoop, it never got control back. There was no way for an application to loop in GLUT for a while, possibly as a subloop while a specific window was open, and then return to the calling function. A new function, glutMainLoopEvent, has been added to allow this functionality. Another function, glutLeaveMainLoop, has also been added to allow the application to tell freeglut to clean up and close down.
Encore une fois AuraHxC a tout dit :ccool:
C'est une des grandes raisons du pourquoi je conseille freeGLUT.
question subsidiaire, pourquoi freeGlut plutôt qu'OpenGlut ?
Parce que je viens d'apprendre qu'OpenGLUT existe à l'instant même :aie:
Euh ... pour l'instant je n'ai pas trouvé de chose qui me pousserai à utiliser OpenGLUT plutot que freeGLUT.
Le developpement de OpenGLUT est aussi stoppé ( 2005 d'après source forge ).
De plus l'ajout de nouvel fonctionnalité ... c'est sur ça peut être bien ... mais là cela ne me semble pas super. ( Ok ça c'est plus du troll )
Le documentation qui n'est pas comme celle de GLUT / freeGLUT.
C'est quoi la game loop ?
Et puis ... y a tout de même quelque ajout sympa ... mais qui sont plus de l'ordre du tool ( notamment le "glutReportErrors()" )
Après ... c'est un choix ... OpenGLUT ne me semble pas trop mauvaise ... loin de là ( c'est toujours mieux que GLUT ). Donc maintenant je conseillerai les deux, depuis que je sais que les deux existe ( je déconseille toujours GLUT :p )
Disons que Freeglut m'a l'air plus "mature" après c'est que mon avis. Mais je peux constater que lorsque j'installe tout ce que j'ai besoin pour faire de l'openGL, c'est FreeGLUT qui est installé, de plus OpenGLUT n'est même pas dans les dépôts => je suis ArchLinux.
Je sais, cela n'empêche pas de prendre les sources de Open et de les compiler bien sur ;)
Donc je conseillerais FreeGLUT par principe mais OpenGLUT peut être une bonne alternative a GLUT comme l'a si bien dit Little.