Как переключить поток контекста OpenGL с 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();
}

Как мне переключить нить в контексте?

0

Решение

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

0

Другие решения


По вопросам рекламы [email protected]