Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - stdgregwar

Pages: [1]
1
Bonjour tout le monde,

J'ai un programme en SFML que je compile à la fois sous Windows (10) et Linux (Arch,Debian et Ubuntu)

Qui possède une boucle événementielle comme ceci :

    mWindow.setActive();
    mGameStates.pushState(SharedState(new EngineState()));

    while(mWindow.isOpen())
    {
       sf::Event event;
       while(mWindow.pollEvent(event))
       {
           mGameStates.pushEvent(event);

           if(event.type == sf::Event::Resized) //Window resized
           {
               mGraphicsManager.resize(mWindow.getSize());
           }
           if(event.type == sf::Event::Closed)
               close();
       }

       mWindow.clear();

       updateAndRender();

       mWindow.display();
    }
    return 0;
 

Malgré le fait de pomper les events, comme expliqué dans de nombreux posts. Et la version de SFML à jour. Mes 4 OS se plaignent d'un soft qui ne répond pas au bout de 10s environ de fonctionnement totalement normal du programme.

EDIT :

En écrivant le post j'ai eu une illumination : mon pushState() engendre une bonne 1/4s de parsing xml et autre loading ce qui retarde le traitement des événements. En rajoutant une pompe pour du beurre en haut l'OS ne se plaint plus.

mWindow.setActive();
    //Pump first events to avoid OS not responding
    for(sf::Event e; mWindow.pollEvent(e);){}

    mGameStates.pushState(SharedState(new EngineState()));

    while(mWindow.isOpen())
    {
       sf::Event event;
       ...
 

Peut-être serait-il utile de rajouter un paragraphe en rouge là dessus dans les tutoriels sur les events? Ou alors dans la doc de pollEvent?

Ou peut-être que Window::create devrait répondre une première fois à l'OS pour éviter ce genre de cas?

Merci en tout cas à toute l'équipe de développement de SFML qui fait vivre cette alternative OOP à SDL.

Greg

Pages: [1]