Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Resolu]Resize et thread  (Lu 1545 fois)

0 Membres et 1 Invité sur ce sujet

Aeon

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
[Resolu]Resize et thread
« le: Février 24, 2014, 10:31:28 pm »
Bonjour à tous,

J'aimerais savoir comment vous faites pour traiter l'événement resize dans un contexte multi-threadé. En effet, j'ai besoin d'appeler glViewport et gluPerspective pour traiter mon événement resize et mon RenderWindow doit être actif. Sauf qu'il a été désactivé dans le thread principal pour qu'il soit actif dans le thread de dessin. Ma question est: est ce que vous synchronisez les 2 threads avec des mutex par exemple pour re activer le RenderWindow dans le thread principal ou avez vous une solution plus simple ?

Merci d'avance.
« Modifié: Février 25, 2014, 08:15:09 am par Aeon »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Resize et thread
« Réponse #1 le: Février 24, 2014, 10:43:44 pm »
En règle générale, il vaut mieux garder tout ce qui concerne le dessin dans le même thread. Plutôt que trimballer le contexte OpenGL entre plusieurs threads, trimballe plutôt des messages. Un message ça peut être un simple booléen qui indique qu'il s'est passé un truc, ou bien un système un peu plus élaboré de file de messages avec paramètres, protégée avec un mutex, sémaphore ou autre.

std::atomic_bool resized; // C++11

// thread d'évènements
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Resized)
            resized = true;

        ...
    }
}

// thread graphique
while (...)
{
    if (resized)
    {
        glViewport(...);
        gluPerspective(...);
        resized = false;
    }

    ... draw ...
}
Laurent Gomila - SFML developer

Aeon

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Resize et thread
« Réponse #2 le: Février 25, 2014, 08:14:04 am »
Merci Laurent, réponse très claire. Je procède effectivement comme ça pour la gestion de la caméra mais je voulais savoir s'il y avait d'autres méthodes.