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

GTK+ Discussion :

gtkglext et drawing area probleme de refresh


Sujet :

GTK+

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut gtkglext et drawing area probleme de refresh
    Bonjour,

    suite des problèmes sous et uniquement sous vista...
    (tout marche correctement sous XP et ubuntu)

    J'ai une gtk_drawing_area qui affiche de l'openGL via gtkglext.
    Je change le contenue en bougeant la souris et à chaque fois, je rafraichit
    en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_queue_draw(GTK_WIDGET(monWidget));
    Le probleme est que dans ce cas : il rafraichit la drawing_area mais tous le reste du contenu gtk disparait : barres d'outils, boutons, etc... (il reste la couleur de fond définie par glClearColor sur tout le reste de la fenetre )

    en faisant (a la place)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_queue_draw(GTK_WIDGET(la fenetre TOP level));
    et un tout réapparait mais après quelques fractions de seconde quand on arrête de bouger la souris. C'est pas terrible... Une idée ???

    J'ai l'impression qu'openGL ne rend pas la main comme il faut, que c'est un problème de synchronisation.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    Je veux bien, mais ça m'aide pas...

    J'ai surtout l'impression de me battre contre VISTA

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Il y a 2 questions cachées dans ce message
    1) est-ce que tu utilises des threads
    2) est-ce que tu as pris des précautions particulières pour les utiliser

    Si tu réponds 1) Oui 2) Non, ça aide parce que le pb vient de là, sinon il faut chercher ailleurs

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    1) Je n'utilise pas de thread autre que ceux imposés par les librairies que j'utilise.
    mon main.c :

    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
    int main(int argc, char ** argv)
    {
        //initialisation
        gtk_init(&argc,&argv);
        gtk_gl_init_check(&argc,&argv);
     
        allocations();//allocations dynamiques
        loadStars();//chargement du fichier
        buildGui();//creation de l'interface graphique
     
        gtk_main();//boucle GTK+
        printf("sortie.");
     
        return 0;
    }
    L'utilisation de thread pourrait peut-être aider.
    Je me doute que mélanger GTK+ et openGL, ce n'est pas trivial, mais gtkGlExt est là pour ça et le faisait plutôt bien jusqu'à présent.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Citation Envoyé par superZozo Voir le message
    1) Je n'utilise pas de thread autre que ceux imposés par les librairies que j'utilise.
    Ca veut dire oui ou non ? La question importante c'est de savoir si tu fais des appels à des fonctions gtk+ depuis des threads. J'aurais tendance à dire que oui, mais je peux pas le deviner...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    Oui c'est pas bien exprimé.
    J'utilise des connections de signaux type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect (G_OBJECT (da_Carte), "motion_notify_event", G_CALLBACK(Carte_motion_notify_event), NULL);
    mais pas de

    ni de fonction pthread... etc

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Mais tu as des threads ou non dans ton appli?? g_signal_connect n'a rien à voir avec des threads. Mais tu avais l'air de dire que certaines des libs que tu utilises créent des threads?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    non non !!! Je faisait référence au main_loop() de GTK et aussi à openGL.
    Car je me demandais si le "thread" openGL (qui gère l'affichage) ne rendait pas suffisament la main au "thread" GTK+ (la main_loop qui attend qu'il se passe qqchose).
    Mais il n'y a pas de thread défini "manuellement".

    Désolé, je n'ai pas une super formation de programmateur, je l'ai fait beaucoup en autodidacte

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    gtk+ ne crée aucun thread par lui même, donc de ce côté là tu es tranquille. Ensuite quand tu colles de l'opengl avec, je ne sais pas comment les choses se passent

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    N'y-a-t'il pas justement moyen de d'arranger cela avec des
    gdk_threads_enter(); et gdk_threads_leave(); ???
    Si quelqu'un sait comment cela fonctionne -je vais essayer de voir ça.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Si tu veux faire des trucs au pif sans même savoir s'il y a des threads, libre à toi.... C'est rarement la meilleure façon de corriger un problème. Une autre possibilité à explorer est une mauvaise intégration de tes opérations OpenGL à ta mainloop gtk+, j'ai pas la moindre idée de comment ça marche.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2010
    Messages : 85
    Points : 61
    Points
    61
    Par défaut
    Je te remercie pour tes encouragements.

    Si je pose cette question c'est justement parce que GTK+ n'est pas aussi bien "protégé" sous windows et que oui, la façon dont la boucle openGL tourne est encore assez floue pour moi, surtout dans ce cas de figure. L'idée des g_thread, j'ai vu ça en lisant la documentation et c'est pas innocent.

    J'ai pas mal vérifié l'intégration de la partie openGL, et même si on ne peut rien exclure, je m'oriente vers un problème plus spécifique. Le plus rageant comme je l'ai dit plus haut, c'est que cela marche super bien sur XP ou linux. Mais beaucoup de gens ont vista...

Discussions similaires

  1. Image de fond dans un drawing area
    Par smux dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 15/09/2006, 11h17
  2. [VB.NET] [ProgressBar] Probleme de "refresh"
    Par Aspic dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/05/2006, 16h15
  3. [tomcat][stuts]probleme de refresh page jsp
    Par v1nc3kr0 dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 29/08/2005, 10h34
  4. Réponses: 6
    Dernier message: 25/04/2005, 14h49
  5. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20

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