我构建了glfw,并且测试中的程序运行得很好,但是,当我试图编写自己的程序时,它会在while(!glfwWindowShouldClose(window))
行上分段,当我删除它时,它会在glfwPollEvents()
行上分段。我正在用cc window.c -lglfw3 -lGLEW -lGL -lX11 -lGLU -lXxf86vm -lXrandr -lpthread -lXi -lm -lXinerama -lXcursor
编译它。为什么这些函数是segfault,为什么初始化函数不是。完整的程序包括如下。
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main(int argc, char** argv){
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
GLFWwindow* window = glfwCreateWindow(800, 600, "gl", NULL, NULL);
glfwMakeContextCurrent(window);
//glewExperimental = GL_TRUE;
glewInit();
glViewport(0, 0, 800, 600);
while(!glfwWindowShouldClose(window)){
glfwPollEvents();
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
}
glfwTerminate();
return 0;
}
最佳答案
只需将这一行添加到初始化:
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
然后它就会工作了!;-)
你可能在用Mac,对吧?解释如下:
http://www.glfw.org/faq.html#how-do-i-create-an-opengl-30-context