【问题标题】:Code after glfwTerminate() never runsglfwTerminate() 之后的代码永远不会运行
【发布时间】:2015-05-18 02:32:54
【问题描述】:

我一直在尝试一些现代 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 问题)。

有人会提示发生了什么吗?

【问题讨论】:

    标签: c++ eclipse opengl glfw glew


    【解决方案1】:

    程序没有结束。事实上,它正在处理glfwTerminate() 之后的行,但不知何故,glfw 正在改变 stdout 绑定到输出流的方式。

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

    【讨论】:

    • 谢谢!看起来他们不打算修复它。根据该链接,问题已关闭。
    • 没问题,但我不同意不打算修复的问题。据我了解,这个问题是通过将函数 close 更改为函数 inotify_rm_watch 来解决的,该函数从观察文件描述符中删除了 glfw 实例
    • 哦,原来如此,修复是在最新的官方发布之后发生的,我应该仔细阅读。那么,我可能会尝试自己从最新的可用源编译库。
    猜你喜欢
    • 1970-01-01
    • 2018-07-31
    • 2020-01-23
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多