Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [Resolu]Resize et thread  (Read 2700 times)

0 Members and 1 Guest are viewing this topic.

Aeon

  • Newbie
  • *
  • Posts: 7
    • View Profile
[Resolu]Resize et thread
« on: February 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.
« Last Edit: February 25, 2014, 08:15:09 am by Aeon »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : Resize et thread
« Reply #1 on: February 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
  • *
  • Posts: 7
    • View Profile
Re : Resize et thread
« Reply #2 on: February 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.

 

anything