我一直在尝试一些现代的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来确认

08-20 01:49