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

标签 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 问题)。

有人能提示一下发生了什么吗?

最佳答案

程序尚未完成。事实上,它正在处理 glfwTerminate() 之后的行,但不知何故,glfw 正在改变 stdout 与输出流的绑定(bind)方式。

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

来确认这一点

关于c++ - glfwTerminate() 之后的代码永远不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069013/

相关文章:

c++ - 带模板的条件返回类型

c++11 如何在 vector 中使用引用?

java - 如何防止eclipse在Tomcat上部署测试类?

eclipse - 在 Eclipse 中作为快捷方式运行?

eclipse - 如何在eclipse中创建用户字典?

C++ bitset 问题

c++ - 在 main 内声明的数组抛出堆栈溢出,在 main 外声明的数组不会

python - 用于 OpenGL 第一人称射击游戏 View 的顶点/片段着色器?

c++ - 我应该始终对 OpenGL 中的所有纹理使用 GL_ARGB 格式吗?

c++ - 如何使用 openimageIO 将 RGB 值存储在数组中? (使用 C++、OpenGL)