我有一个程序,OpenGL在辅助线程中运行。如果渲染循环完成,我调用glfwDestroyWindow()。但是,在退出主要主页之前,窗口不会关闭。如果我尝试多次关闭它(通过反复点击x),会弹出一个窗口,显示窗口没有响应,并要求我强制退出。
为什么glfwDestroyWindow没有正确关闭我的窗口?
编辑:顺便说一下,我正在使用GLFW3。
EDIT2:
基本上,这就是我的代码的样子。窗口仍然打开时,我可以看到输出。只有当我强制关闭它或退出主线程时,窗口才会关闭。
主线程:
int main() {
startOpenGLThread();
while(1);
}
OpenGL线程:
Window::start() {
initGLFW();
while(!glfwWindowShouldClose());
glfwDestroyWindow();
cout << "I can see this ouput, but the window is still open!" << endl;
}
EDIT3:
如果我将glfwTerminate()放在输出后面,窗口会关闭。但是,这不是我想要的,因为我可能打开了其他窗口。
答案 0 :(得分:2)
您需要致电glfwPollEvents()
或glfwWaitEvents()
才能处理关闭按钮事件。在循环中插入一个glfwWaitEvents();
,窗口应该正确关闭。
答案 1 :(得分:1)
您可能正在从主循环内部调用glfwDestroyWindow()。基本的GLFW应用程序看起来应该是这样的
GLFWwindow * win = glfwCreateWindow(...)
while (!glfwWindowShouldClose(win)) {
... process input ...
glfwMakeContextCurrnet(win);
... do rendering stuff ...
glfwSwapBuffers(win);
}
glfwDestroyWindow(win);
为了关闭应用程序,可能会有一些输入,您将其解释为关闭命令。如果一个人点击'ESC',你可以在GLFW键回调处理程序中选择它。但是当你得到那个信号时,你不应该叫glfwDestroyWindow()
。相反,你应该调用glfwSetWindowShouldClose(win, 1)
来告诉GLFW它可以退出主循环并在主线程中安全地销毁窗口。