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

SDL Discussion :

Mauvais comportement sans SDL_WaitEvent


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Mauvais comportement sans SDL_WaitEvent
    Bonjour,

    Je veux utiliser un programme OpenGL avec la SDL, mais une question me tarode. Le code minimaliste suivant fonctionne très bien, mais lorsque j'enlève SDL_WaitEvent(&event); la fenêtre crée par SDL ne réagit plus comme avant: je ne peux pas la bouger et si je vais sur une autre fenêtre, je ne peux plus y retourner

    Quelqu'un pourrait m'expliquer ce qui se passe?

    Merci!!!

    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
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        SDL_Init(SDL_INIT_VIDEO);    
        SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
     
        bool continuer = true;
     
        while (continuer)
        {
    	SDL_Event event;
            SDL_WaitEvent(&event);
     
            glClear(GL_COLOR_BUFFER_BIT);
     
            glBegin(GL_TRIANGLES);
            glColor3ub(255,0,0);
            glVertex2d(-0.75,-0.75);
            glColor3ub(0,255,0);
            glVertex2d(0,0.75);
            glColor3ub(0,0,255);
            glVertex2d(0.75,-0.75);
            glEnd();
     
            glFlush();
            SDL_GL_SwapBuffers();
        }
     
        SDL_Quit();
     
    	return 0;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 324
    Points
    219 324
    Billets dans le blog
    123
    Par défaut
    Bonjour,

    Je peux donner une explication à ceci, mais je n'en suis pas sur à 100% ( voir le code de la SDL pour vérification ).

    Il se pourrait en fait, que SDL_WaitEvent, permette à Windows, de reprendre la main sur la fenêtre. Enfin, plus précisément, cela permettrait au programme, de prendre un peu de temps, pour s'occuper des messages envoie par Windows sur la fenêtre. Dans le cas sans SDL_WaitEvent, les évènement de déplacement de la fenêtre ne serait pas pris en compte ( car on ne laisse pas de temps au programme pour revenir s'occuper des messages Windows ).
    Si le SDL_WaitEvent vous gène, vous pouvez toujours regarder du coté de SDL_PollEvent.

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    C'est exactement ca. En interne, SDL gére des choses qui sont faites pendant les SDL_WaitEvent ou SDL_PollEvent.

    Jc

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    OK, merci beaucoup!

    Donc dans un programme qui n'est influencé par aucun évènements, il faut quand même faire un SDL_WaitEvent ou un SDL_PollEvent pour qu'il fonctionne correctement?

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 883
    Points : 219 324
    Points
    219 324
    Billets dans le blog
    123
    Par défaut
    Influencer par aucun évènement ?
    Toute interaction avec la fenêtre du programme, produit un evenement.
    Tout interaction avec le clavier et la souris, lorsque le focus est sur la fenêtre du programme, produit un evenement.

    Je ne vois pas trop comment on peut faire sans évènement. Par contre, s'il n'y a aucun évènement, on ne peut pas quitter le programme ( proprement ).

  6. #6
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    @Littlewhite: s'il s'agit juste de faire une démo graphique/d'un algorithme (par ex en prenant les paramètres à partir d'un fichier), c'est possible.

    @Xemame: oui, il faudrait que tu appelles les évènements...
    Un simple appel à SDL_PollEvent(&...); suffit, et si tu peux vraiment pas mettre le code d'évènement en plein dans ton programme , tu peux toujours exécuter tout le code du programme dans un thread et dans le thread principal faire un pollEvent toutes les 100 ms...

    Enfin c'est un peu la grosse solution pour rien, là dans ton programme vu que t'as une boucle principale fait juste le SDL_PollEvent dedans.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    D'accord.

    J'ai les infos que je voulais.

    Merci à tous pour vos réponses!!!

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

Discussions similaires

  1. J'ai un mauvais comportement au boulot
    Par benben02 dans le forum Emploi
    Réponses: 7
    Dernier message: 20/09/2012, 11h05
  2. [PHP 5.2] Navigation avec session suivi d'un comportement sans session
    Par guikkom dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2011, 13h34
  3. Mauvais comportement scrollbars d’un DBGRID
    Par tarmo57 dans le forum Débuter
    Réponses: 2
    Dernier message: 06/01/2009, 17h53
  4. Mauvais comportement des menu déroulant sous IE
    Par KeKeMaN dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 13/10/2008, 15h27

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