glfwTerminate()之后的代码永远不会运行

时间:2015-03-16 03:00:07

标签: c++ eclipse opengl glfw glew

我一直在尝试一些现代的OpenGL教程,我遇到了似乎很奇怪的行为。这是代码,简化为(几乎)基本要素。

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

using std::cout;
using std::endl;

int main(){
    std::cout << "Begin program" << std::endl;
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", 0, 0); // Windowed
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    glewInit();

    while(!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    cout << "before glfwTerminate()" << endl;
    glfwTerminate();
    cout << "after glfwTerminate()" << endl; cout.flush();

    std::cout << "End program" << std::endl;
    return 0;
}

查看GLFW docs,对glfwTerminate()的调用不应退出程序,但在“before glfwTerminate()”之后没有任何内容输出到控制台,程序结束。

我在ArchLinux上(刚刚更新),我尝试了xfce4和KDE(后者的最小安装,只是为了确保它不是xfce4问题)。

有人会暗示发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

没有完成该计划。实际上它正在处理glfwTerminate()之后的行,但不知何故glfw正在改变stdout如何绑定到输出流。

这是bug。您可以通过将cout更改为cerr

来确认这一点