繁体   English   中英

如何使用SFML 2.2切换OpenGL上下文的线程?

[英]How do I switch the thread of an OpenGL context with SFML 2.2?

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

循环如下所示:

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

http://www.sfml-dev.org/tutorials/2.0/window-opengl.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM