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

OpenGL Discussion :

opengl et thread


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut opengl et thread
    Bonjour a tous,

    Je suis actuellemnt confronté a un problème lié a opengl je veu pouvoi mettre mon affichage en opengl dans un thread afin de laissé le programme principale tourner. J'arrive a créer un thread mais je ne sait pas comment faire pour que l'affichage s'éffectue correctemment a partir du thread.
    Seriez vous comment faire?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Evite ça comme la mort (je ne sais même pas si c'est possible, faut voir la doc d'OpenGL). De toute façon le GPU tourne déjà dans son propre thread parallèlement au CPU, donc une fois les commandes d'affichage envoyées le GPU rend la main immédiatement, pas besoin de thread supplémentaire.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    Merci du conseil mais en fait ce n'est pas si simple.

    Je suis en train de faire un logiciel de suivi de visage qui permet de transmettre les déformations d'un visage filmé à un visage 3D (affiché en opengl).
    Et mon problème c'est que je veut pouvoir afficher en continu des déformations sur mon visage en opengl pendant que je calcul les nouvelles déformations captées par la caméra.

    La seule solution que je vois c'est donc de passé par un thread, et le mieux pour moi serait de mettre mon affichage opengl dans ce thread. Mais pour l'instant je ne sais pas comment faire si vous avez des idées ou des solutions à mon problème...Je suis preneur.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Dans ce cas pourquoi ne pas mettre les calculs dans le thread secondaire, et garder les commandes OpenGL dans le thread principal ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    Une chose est sûre : Open GL est une machine à état. Donc l'ordre dans lequel les commandes arrivent a une importance.

    C'est difficile à gérer en multithread. On peut envisager une solution à base de mutex mais je ne pense pas que ce serait une bonne idée. Avoir un thread dédié à Open GL est probablement mieux, mais attention à ne pas appeller une méthode Open GL depuis l'autre thread!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    C'est exactement ce que je cherche avoir un thread dédier a l'opengl mais je ne sait pas somment faire.

    Et j'ai déjà essayé de mettre les calculs dans le thread et là aussi j'ai des problèmes liés à d'autres librairies utilisées pour le suivi de visage. C'est pour cela que je veux mettre l'affichage opengl dans le thread.

    Mais si vous savez comment dédier un thread à l'opengl je suis a votre écoute.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    C'est un peu le problème du consommateur / producteur.

    Vous avez deux threads :
    - calcul des déformations du visage captées par la caméra, le "producteur".
    - affichage du résultat par Open GL, le "consommateur".

    Le producteur analyse les données venant de la caméra. Il enregistre le résultat dans une structure de données (la production). Au fur et à mesure, le thread OpenGL vient les lire (la consommation) et les affiche.

    Pour empêcher la lecture et l'écriture de se faire simultanément, utilisez des mutex.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    Merci,
    C'est exactement ça que je veux mettre en place.
    Mais le seul problème c'est que je ne sais pas faire un thread opengl.
    Donc si vous avez des exemples ou des liens qui pourrai m'aider se serait super.

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Normalement, si tout ce qui a un rapport avec ton rendu (fenêtre, contexte, commandes de rendu) est créé / utilisé dans le même thread, tu ne devrais pas avoir de souci. Après, si tu dois partager des données entre les deux threads, utilise des mutex pour les protéger.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    Super merci je vais essayer.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    Ca ne marche pas parce que le problème c'est que j'utilise glut et que les fonctions de callback que l'on passe en paramètre à "glutDisplayFunc", "glutReshapeFunc" et autres fonctions de callback ne doivent pas faire partie d'une classe.

    Ce qui dans mon cas pose un problème car je peut pas implémenter ma classe de thread avec tous mes appel a glut a l'intérieur comment faire en utilisant glut.

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est une question qui revient souvent sur ce forum. La solution simple est de faire un wrapper qui donne à manger à GLUT ses fonctions membres statiques, et qui transmets à des fonctions membres non-statiques d'autres objets.
    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
    MaBonneClasse Obj;
     
    class Wrapper
    {
    public :
     
        Wrapper()
        {
            glutDisplayFunc(&Wrapper::DisplayFunc);
        }
     
        static void DisplayFunc()
        {
            Obj.Display();
        }
    };

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    Merci,
    J'ai mis en place ta solution la compilation fonctionne mais lors de l'exécution la fenêtre d'affichage opengl apparaît mais rien est affiché a l'intérieur or on voit que le thread d'affichage tourne et que la fonction d'affichage et régulièrement appelé d'où peut venir le problème?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut
    C'est bon merci c'est résolue, la dernière question c'était une erreur idiote de ma part j'avais oublié le "glutSwapBuffers()" à la fin de ma fonction d'affichage.

    Merci a tous pour votre aide

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu devrais déjà faire fonctionner tout ça sans utiliser de thread secondaire, parce que là du coup on ne sait pas si le problème vient de l'utilisation de threads ou non.

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

Discussions similaires

  1. OpenGL et threads
    Par CliffeCSTL dans le forum Multithreading
    Réponses: 1
    Dernier message: 28/03/2013, 10h53
  2. Rendu opengl multi-thread
    Par mick22 dans le forum Android
    Réponses: 4
    Dernier message: 26/02/2009, 16h21
  3. OpenGL et thread
    Par Kaktus dans le forum OpenGL
    Réponses: 8
    Dernier message: 09/07/2007, 08h28
  4. Rendu OpenGL sur un thread tier.
    Par Groove dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/02/2007, 11h36
  5. boost::thread et OpenGL
    Par Kurisu dans le forum Boost
    Réponses: 12
    Dernier message: 19/09/2006, 13h23

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