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 ...
}