2
我正在創建一個opengl應用程序,當我沒有使用多線程時它運行良好。原來的代碼如下所示:如何多線程glfw鍵盤迴調?
void Controller::BeginLoop()
{
while (!glfwWindowShouldClose(_windowHandle)) {
/* Render here */
Render();
/* Swap front and back buffers */
glfwSwapBuffers(_windowHandle);
/* Poll for and process events */
glfwPollEvents();
}
}
int main()
{
//do some initialization
g_controller->BeginLoop();
}
上面的代碼工作得很好,但是,當我試圖把eventpolling和渲染成兩個不同的線程,OpenGL的不會畫在窗口任何東西。下面是我用的多線程代碼:
void Controller::BeginLoop()
{
while (!glfwWindowShouldClose(_windowHandle)) {
glfwMakeContextCurrent(_windowHandle);
/* Render here */
Render();
/* Swap front and back buffers */
glfwSwapBuffers(_windowHandle);
}
}
void Render(int argc, char **argv)
{
::g_controller->BeginLoop();
}
int main()
{
std::thread renderThread(Render, argc, argv);
while (true) {
glfwPollEvents();
}
renderThread.join();
return 0;
}
在渲染功能,我做了一些物理和繪製結果點到窗口。 我完全不知道發生了什麼問題。