glfwDestroyWindow不会关闭窗口

时间:2014-03-10 22:23:24

标签: c++ opengl glfw

我有一个程序,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()放在输出后面,窗口会关闭。但是,这不是我想要的,因为我可能打开了其他窗口。

2 个答案:

答案 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它可以退出主循环并在主线程中安全地销毁窗口。