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+ avec C & C++ Discussion :

Gestion des signaux "expose-event"/"draw"/"render" GTK+2 vs. GTK+3


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 54
    Points
    54
    Par défaut Gestion des signaux "expose-event"/"draw"/"render" GTK+2 vs. GTK+3
    Bonjour tout le monde et merci d'avance de lire ce post,
    vous trouverez un message similaire en Anglais posté sur Stack Overflow en suitvant ce lien
    Je travaille sur un programme offrant une interface de visulatisation pour des molécules, systèmes atomiques ...
    J'ai 3 versions différentes du programme:

    (a) GTK2 + GtkGlext : fonctionne parfaitement !
    (b) GTK3 + X11 : fonctionne bien !
    (c) GTK3 + GtkGLArea : ne fonctionne pas :-(

    Je travaille toujours sur (c), j'ai appris que le widget GtkGLArea est plutôt pointilleux sur les instructions OpenGL,
    mais un problème est apparu alors que j'essaye de trouver l'origine d'une différence de comportement entre (a) et (b).
    Le rendu OpenGL était en effet sensiblement plus lent pour (b) que pour (a), tout du moins c'est ce que je croyais.
    Si vous lisez ce lien vous verrez que j'ai eu de l'aide et ai réussi à trouver que les signaux émis par mon Widget n'étaient
    pas gérés de la même façon entre GTK+2 (a) et GTK+3 (b) et même (c), même si dans ce cas je n'ai qu'un écran noir
    mais ceci est un autre problème. Voici comment j'ai préparé mes widgets et les signaux correspondant (je me limite aux
    instructions GTK+):



    En ulisant l'outil ApiTrance, j'ai remarqué que chaque image OpenGL étaient rendue une seule fois dans le cas (a) alors qu'elle l'était 5 fois dans les cas (b) et (c).
    Après quoi en ajoutant un simple compteur dans la CallBack correspondant au signal, j'ai pu confirmer que pour chaque "expose/draw/render" le signal
    était émis (et donc la "drawing-area" dessinée autant de fois, pour la même image):

    • (a) 1 seule fois
    • (b) 5 fois
    • (c) 5 fois


    (a) étant GTK+2, (b) et (c) étant GTK+3 ... merci d'avance pour vos lumières pour corriger cela ou comprendre pourquoi le signal GTK+3 est émis 5 fois !

    S.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Bonjour,

    regarde la documentation du signal GtkGLArea::render: comme beaucoup de signaux dans GTK, la valeur de retour indique si le signal doit continuer à être propagé ou si le traitement a été effectué. Vérifie que tu utilises donc la bonne valeur de retour dans ta callback. Je ne suis pas sûr que ce soit la solution à ton problème, mais c'est une piste
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Autre chose: tu connectes tes signaux à une callback qui porte toujours le même nom (on_expose), mais il faudrait vérifier que tu utilises le bon prototype dans chacun de tes programmes.
    En effet, chacun de ces signaux a une signature (prototype) différente. Il faudrait donc que tu rajoutes un peu de code de ta fonction on_expose dans les cas (a), (b) (c) pour qu'on puisse s'assurer que tu n'as pas fait de confusion à ce niveau là.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Gestion des signaux : SIGTSTP
    Par BSans dans le forum C
    Réponses: 1
    Dernier message: 22/12/2011, 17h17
  2. gestion des signaux
    Par uriotcea dans le forum Débuter
    Réponses: 6
    Dernier message: 15/01/2010, 11h02
  3. Gestion des signaux
    Par damien77 dans le forum Bibliothèque standard
    Réponses: 12
    Dernier message: 01/03/2008, 23h39
  4. gestion des signaux
    Par pimous dans le forum Linux
    Réponses: 2
    Dernier message: 20/02/2008, 15h44
  5. Gestion des signaux
    Par Kicker dans le forum Administration système
    Réponses: 4
    Dernier message: 23/05/2007, 16h40

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