IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GLUT Discussion :

Sortir de glutMainLoop() et traitements


Sujet :

GLUT

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut Sortir de glutMainLoop() et traitements
    Bonjour à vous.

    Je travaille sur un programme OpenGL générant une animation à durée limitée dans le temps (mais variables en fonction des arguments d'entrée).

    Je m'inspire de codes sources récupérées sur ce site pour la partie 3D, et le main contient notamment le grand classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    //on initialise glut
    glutInit(&argc, argv);   
     
    //on spécifie l'emploi du modèle chromatique et du double tampon
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
     
    //on spécifie la taille de la fenêtre
    glutInitWindowSize(256, 256);
     
    //on spécifie la position de la fenêtre
    glutInitWindowPosition(250, 250);
     
    //on crée une fenêtre
    glutCreateWindow(argv[0]);
     
    //on initialise
    init();
     
    //on fait une fonction d'affichage 
    glutDisplayFunc(display);
     
    //on fait une fonction de redimensionnement
    glutReshapeFunc(reshape);
     
    //on fait une fonction pour la souris
    glutMouseFunc(mouse);
     
    //on se met en boucle infinie
    glutMainLoop();
    Je ne trouve pas de fontion glut officiel me permettant de mettre fin à la boucle glutMainLoop()... Actuellement, le programme se termine si je ferme manuellement la fenêtre, mais j'aimerais automatiser la chose pour que le programme se lance, effectue les traitements en fonction de l'animation, puis se termine après avoir enregistrer les résultats dans un fichier.

    J'ai vu qu'on pouvait finir le programme en appelant un exit() mais je crains du coup de ne pas pouvoir faire mes traitements post-glutmainloop()...

    Pensez-vous que je doive donc me passer de glutMainLoop() et gérer une boucle moi-même ? Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while(AnimationNonFinie) {
    	// affichage fenetre, poursuite de l'animation ...
    	...
     
    	// à un moment, AnimationNonFinie = false;
    }
     
    // L'animation est enfin terminée, je fais mes traitements
    ...
    Si oui, que dois-je mettre dans cette boucle ?


    Merci !

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Je ne trouve pas de fontion glut officiel me permettant de mettre fin à la boucle glutMainLoop()... Actuellement, le programme se termine si je ferme manuellement la fenêtre, mais j'aimerais automatiser la chose pour que le programme se lance, effectue les traitements en fonction de l'animation, puis se termine après avoir enregistrer les résultats dans un fichier.
    Il n'y en a pas dans Glut. Freeglut permet par contre de le faire mais cela rendra ton code non portable.

    J'ai vu qu'on pouvait finir le programme en appelant un exit() mais je crains du coup de ne pas pouvoir faire mes traitements post-glutmainloop()...
    En effet, c'est la meilleure solution, lorsque tu as terminé ton animation, tu appelles exit.

    2 solutions :

    - Si tu veux rendre le code propre et s'il y a plusieurs points de sortie, utilise la fonction atexit et donne le nom de la fonction qui sera le point d'entrée des traitements.

    - Sinon, tu peux simplement faire un appel vers le point d'entrée des traitements et ensuite appeler exit.


    Pensez-vous que je doive donc me passer de glutMainLoop() et gérer une boucle moi-même ? Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while(AnimationNonFinie) {
    	// affichage fenetre, poursuite de l'animation ...
    	...
     
    	// à un moment, AnimationNonFinie = false;
    }
     
    // L'animation est enfin terminée, je fais mes traitements
    ...
    Si oui, que dois-je mettre dans cette boucle ?
    Pas avec Glut. Si tu veux faire cela, utilise la SDL, elle te permettra de faire cela. Le seul problème existant pour l'instant avec la SDL est sa gestion un peu embêtante concernant les entrées claviers. Vu que tu ne t'en sers pas, ce serait sûrement mieux.

    Jc

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Merci de tes conseils !

    Citation Envoyé par fearyourself
    - Sinon, tu peux simplement faire un appel vers le point d'entrée des traitements et ensuite appeler exit.
    En fait, c'est ce que je pensais faire. Question C++ au passage, dois-je détruire les objets que j'ai instanciés durant l'execution (je manipule des pointeurs) ou bien c'est fait tout seul lorsque le programme se termine ?

    Je n'ai jamais compris s'il fallait détruire les objets au cours d'une exécution pour éviter (en supposant que c'est un gros programme dont l'execution dure très longtemps) les "fuites de mémoire" ou bien même les détruire à la fin du programme sinon l'OS croit les zones sont encore utilisées...

    Merci !

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par jomeo
    En fait, c'est ce que je pensais faire. Question C++ au passage, dois-je détruire les objets que j'ai instanciés durant l'execution (je manipule des pointeurs) ou bien c'est fait tout seul lorsque le programme se termine ?
    Le programme le fait tout seul à la sortie du programme mais c'est une bonne habitude de le faire toi-même et de t'assurer que tout est libéré avant de sortir.

    Une des plus grandes raisons et la réutilisabilité de ton code. Si ton code est propre et ne contient pas de fuites, il sera rapidement intégrable dans un autre projet.

    Jc

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Ok, je retiendrai

    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortir d'un traitement en cours
    Par lbar012001 dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/11/2010, 13h54
  2. traitement des exceptions et sortir d'exécution
    Par jeandadaf dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2009, 17h06
  3. Traitement d'image (sortir les pixel) - Marche
    Par StormXI dans le forum Débuter
    Réponses: 7
    Dernier message: 30/10/2008, 17h35
  4. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo