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 :

Callback function Display


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut Callback function Display
    Bonjour tout le monde,

    J'ai une toute petite question qui vous paraissez peut être stupide .....
    Quand je définit une fonction callback d'affichage (exemple void display()) elle s’exécute combien de fois pendant la duré de vie de mon programme ? Lorsque j'ai exécuté un un petit programme pour un essai, il ne s'arrête pas d'appelé la fonction "display()" sachant que je n'ai mis ni glutRediplay() ni un appele Display().

    Est ce que quelqu'un peut me donner un explication ?
    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur applications 3D temps réel
    Inscrit en
    Août 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur applications 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 63
    Par défaut
    Bonjour,
    Tu as l'air d'utiliser GLUT. Quand on regarde dans la doc GLUT, à la fonction glutDisplayFunc :

    GLUT determines when the display callback should be triggered based on the window's redisplay state. The redisplay state for a window can be either set explicitly by calling glutPostRedisplay or implicitly as the result of window damage reported by the window system.
    Etant donné que tu ne fait pas d'appel explicite à glutPostRedisplay, la fonction est appelé quand la fenêtre a "subis des dommages".

    J'ai pas trouvé explicitement ce qu'ils entendaient par la, mais je suppose que cela doit être quand la fenêtre est bougée/redimensionnée.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Citation Envoyé par r0ots Voir le message
    Bonjour,
    Tu as l'air d'utiliser GLUT. Quand on regarde dans la doc GLUT, à la fonction glutDisplayFunc :



    Etant donné que tu ne fait pas d'appel explicite à glutPostRedisplay, la fonction est appelé quand la fenêtre a "subis des dommages".

    J'ai pas trouvé explicitement ce qu'ils entendaient par la, mais je suppose que cela doit être quand la fenêtre est bougée/redimensionnée.
    Mais justement l’appel à glutDisplayFunc ce fait uniquement une seul fois au démarrage du programme de plus je n’exécute aucun bougé ou redimensionnement.
    Quelqu'un à une réponse s'il vous plait

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur applications 3D temps réel
    Inscrit en
    Août 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur applications 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 63
    Par défaut
    Pas de glutPostRedisplay nul part? même pas dans les callbacks mouse, keyboard, ou dans la fonction display elle même? La sans le code source je sèche...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Voici mon programme, j'espère que quelqu'un aura une réponse
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    #include<windows.h>
    #include<gl/gl.h>
    #include<gl/glut.h>
     
                       #define width 640
                       #define hight 480
     
    void display();
    void reshape(int,int);
     
    int main(int arg, char** arc)
    {
        glutInit(&arg,arc);
        glutInitDisplayMode(GLUT_RGBA );
        glutInitWindowSize(width,hight);
        glutInitWindowPosition(320,240);
        glutCreateWindow("Creation de cube avec des surfaces ");
     
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
     
        glutMainLoop();
        return 0;
    }
     
    void display()
    {
         glClearColor(0,0,0,0);
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         glEnable(GL_BLEND);
         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
     
     
    	glLoadIdentity();
    	gluLookAt(0,0,8,0,0,0,0,1,0);
     
    	glutWireCube(2.0);
     
         glFlush();
     }
     
    void reshape(int w, int h)
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(90, (double)w/h, 0.0, 2.0);
     
        glViewport(0,0,w,h);
     
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Bonjour,

    comment compte-tu le nombre d'appels à ta fonction display? Si tu utilises un breakpoint dans Visual Studio par exemple, tu auras des résultats erronés:

    1 - Ta scene s'affiche, le breakpoint dans Display est atteint:
    2 - Visual studio s'affiche au 1er plan et affiche le code correspondant au breakpoint
    3 - Ceci "cache" ta fenêtre OpenGL, qui va donc necessiter un redisplay, et dès que tu auras repris l'execution du programme, display sera sera la prochaine fonction executée et ainsi de suite

    Si tu veux tester sans perturber l'execution avec des breakpoints, essaie d'ecrire dans un fichier ou dans la console à chaque exécution de display

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

Discussions similaires

  1. callback:function(records, operation, success)
    Par solo190 dans le forum Ext JS / Sencha
    Réponses: 16
    Dernier message: 07/10/2014, 18h19
  2. callback function net-snmp
    Par maycem_amor dans le forum Réseau
    Réponses: 0
    Dernier message: 21/03/2014, 17h14
  3. paramétrisation des callback functions
    Par oodbae_adriano dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 13/09/2011, 15h40
  4. Callback function avec une DLL
    Par dadouuuu dans le forum Débuter
    Réponses: 5
    Dernier message: 18/04/2010, 21h07
  5. Traduction C++/Delphi DLL et function Callback
    Par Crafton dans le forum Langage
    Réponses: 12
    Dernier message: 23/02/2006, 09h55

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