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

Boost C++ Discussion :

boost::thread et OpenGL


Sujet :

Boost C++

  1. #1
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut boost::thread et OpenGL
    Bonjour, je cherche des idées, voire tutoriels, pour créer un petit programme de test qui permet d'avoir un rendu OpenGL dans un thread séparé du reste de la logique du programme (AI ou physique ou encore musique). Je pensais utiliser boost::thread parce que quasiment standard et relativement facile à utiliser (je pourrais aussi réaliser cela avec des pthreads, mais bon...).
    Je suppose bien qu'il y a de la synchronisation à faire et d'autres problèmes propres au thread, d'où cette question.

    Je voudrais utiliser GLUT (FreeGLUT) au possible pour limiter la surcharge de bibliothèques de fenêtrage.

    Merci d'avance pour toutes vos contributions.

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Tu as regardé les tutos de Miles ?
    http://miles.developpez.com/tutoriels/cpp/boost/thread/

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    GLUT, tu veux dire ce truc qui est incapable de faire du plein écran sous X ?

  4. #4
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    glutGameMode() pour le plein écran, mais le débat n'est pas là.

    Eusebe>merci pour le lien, fort instructif.

    Pour continuer le fil, quel serait la meilleure stratégie pour le multithreading, justement?

    (PS: Je sens que je vais devoir retourner sur la théorie des systèmes concurrents...)

  5. #5
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je ne suis pas sur que d'afficher dans un thread séparé soit la meilleur solution, même si il n'y a logiquement aucune contre indication , mais la boucle principale doit servir à quelque chose et pourquoi séparer l'affichage qui sert de référence dans le logiciel ?

    Personnellement je fais le contraire, mon thread principal permet de gérer l'affichage, tous les autres threads sont pour gérer le reste.

    Sons, réseau, animation…

  6. #6
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    A en conclure que tu initialises les threads pour les sons, anims etc avant d'entrer la boucle principale et que tu te sers du callback "onIdle" ou "onDisplay" (pour rester dans la terminologie de GLUT) pour synchroniser le tout.
    Je suppose que j'ai besoin d'un Mutex pour accéder et affichers mes données 3D sans provoquer un problème de mise-à-jour. Vois-je juste?

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Je ne synchronise rien.

    Le son se lit tout seul et n'a besoin de rien.
    Les événements réseau arrivent et son traité indépendamment de l'affichage.
    Les animations renseignent les textures à utiliser et seront rendu au moment voulu par le moteur de rendu.
    etc...

    Tout est indépendant même si c'est lié, mais chaque unité fait son travail indépendamment et peut, si besoin est, envoyer un message vers un autre pour lui dire, j'ai fini ou je change de donnée, mais chaque thread à sa propre unité de temps et ne partage pas les données des autres. Donc pas besoin de savoir qui peut accéder à quoi et à quel moment.

  8. #8
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    Cela me semble ingénieux, mais j'ai du mal à comprendre tu peux faire das ce cas, pour jouer un son sur un évenement arrivant dans un autre thread. (Ok, via un message). Idem, pour les animations et la physique, si elles sont calculés dans un autre thread que celui qui fait le rendu, il faut bien que j'interdise l'accès aux variables défnissant l'emplacement de tel ou tel élément sans que celui-ci ne puisse être écrit...

    Enfin bon, je suis encore un bleu en ce qui est programmation avec des threads.

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    En fait j'utilise des threads et des timers personnels qui s'utilisent un peu comme des threads, mais qui sont appelés directement dans le programme principal.

    Donc pour les animations cela passe plus par mes timers personnels, la physique peut être incluse dedans aussi, cela permet de tout synchroniser naturellement, et de ne pas gaspiller la puissance PC.

    Désolé de mettre mal exprimé.
    Le principe reste le même, sauf que la synchronisation est implicite.

  10. #10
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu devrais oublier les threads pour le moment, à ton niveau ça n'apportera que des ennuis.

    Il ne faut commencer à penser aux threads (et pas forcément de cette manière) que lorsque ton application atteint une certaine complexité, et lorsque les problèmes que cela solutionnerait sont clairement identifiés.

  11. #11
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    à mon niveau... BAC+5 ? ahem.
    Non, en fait, mon cours sur les sytèmes concurrents était axé Java, et pas vraiment dans l'optique de faire un système basé sur OpenGL non plus.

    En fait, je me demandais à quel point il serait complexe ou facile de mettre du multithreading dans une appli OpenGL. Et quels seraient les complexités engendrées... Le tout dans l'optique de mettre mon code de base à jour. Voilà tout.

  12. #12
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Les threads c'est bien si on en a besoin, on peut s'en passer la pluparts du temps et si on peut s'en passer, c'est ce qu'il y a de mieux. Sauf si on veut utiliser des architectures spéciales ou tous autres domaines hors contexte général.

    Le niveau d’études n’est qu’un indice, je suis sur que certaines personnes qui ont 15 ans (ou moins ?) sans diplôme programmes mieux que moi

    Sinon si tu tiens quand même à faire du multithreading sous OpenGL, il faut commencer à faire du partage de ressource, regarde du côté des contextes et des partages.

    Ce qu'a voulu souligner Laurent, c'est que ce n'est pas si évident que cela un environnement multithread (d'ailleurs j'ai pas mal de difficulté avec des fonctions type wglUseFontBitmap dans un environnement multithread)

  13. #13
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    je dirais même plus, si c'est juste pour l'affichage graphique, utiliser un thread ne sert à rien, le driver se chargeant lui même du parallelisme avec la carte graphique (bien mieux que ce que tu pourrai faire probablement)

    de plus, utiliser des thread avec openGL, c'est chiant il y a pleins de problèmes de partages de contextes qui sont loins d'êtres triviaux

Discussions similaires

  1. Boost thread avec fonction membre non statique.
    Par Klaim dans le forum Boost
    Réponses: 2
    Dernier message: 11/08/2007, 02h58
  2. Arreter l'execution d'un boost::thread
    Par stranger dans le forum Boost
    Réponses: 9
    Dernier message: 22/05/2007, 18h37
  3. [Débutant] boost::thread non-lvalue
    Par Tymk dans le forum Boost
    Réponses: 16
    Dernier message: 18/11/2006, 14h23
  4. Questions de perfomance avec boost::thread
    Par Rafy dans le forum Boost
    Réponses: 36
    Dernier message: 05/10/2006, 15h21

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