glfwTerminate() 之后的代码永远不会运行
Code after glfwTerminate() never runs
我一直在尝试一些现代 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 绑定到输出流的方式。
这是一个bug。您可以通过将 cout
更改为 cerr
来确认这一点
我一直在尝试一些现代 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 绑定到输出流的方式。
这是一个bug。您可以通过将 cout
更改为 cerr