C++ 如何使用SFML2.2切换OpenGL上下文的线程?

C++ 如何使用SFML2.2切换OpenGL上下文的线程?,c++,multithreading,sfml,openglcontext,C++,Multithreading,Sfml,Openglcontext,我想让我的窗口事件循环在我的主线程中运行,其他所有的都在一个单独的线程中运行 循环如下所示: void loop(sf::RenderWindow& window) { //I need the context here while (window.isOpen()) { //Do stuff here } } int main() { sf::RenderWindow window(...); std::thread

我想让我的窗口事件循环在我的主线程中运行,其他所有的都在一个单独的线程中运行

循环如下所示:

void loop(sf::RenderWindow& window)
{
    //I need the context here

    while (window.isOpen())
    {
        //Do stuff here
    }
}

int main()
{
    sf::RenderWindow window(...);

    std::thread lthread(&loop, std::ref(window));

    while (window.isOpen())
    {
        sf::Event event;
        while (window.waitEvent(event))
        {
            //Handle events
        }
    }

    lthread.join();
}
如何切换上下文的线程

void renderingThread(sf::Window* window)
{
    // activate the window's context
    window->setActive(true);

    // the rendering loop
    while (window->isOpen())
    {
        // draw...

        // end the current frame -- this is a rendering function (it requires the context to be active)
        window->display();
    }
}

int main()
{
    // create the window (remember: it's safer to create it in the main thread due to OS limitations)
    sf::Window window(sf::VideoMode(800, 600), "OpenGL");

    // deactivate its OpenGL context
    window.setActive(false);

    // launch the rendering thread
    sf::Thread thread(&renderingThread, &window);
    thread.Launch();

    // the event/logic/whatever loop
    while (window.isOpen())
    {
        ...
    }

    return 0;
}