在OS X Yosemite上编译OpenGL

时间:2015-06-23 12:53:56

标签: macos opengl c++11

我正在尝试在OS X Yosemite上编译Hello Triangle练习。它在我的Ubuntu机器上编译得很好。它实际上在Yosemite上编译得很好但是当我运行它时我得到一个Seg Fault。我是OS X的新手,所以我不在编辑中包含一些内容吗?我正在使用glfwglew

g++ main.cpp -I/usr/local/include -I/opt/X11/include -L/usr/local/lib -I/opt/X11/lib -w -std=c++11 -framework OpenGL -lglfw3 -lglew -o main

1 个答案:

答案 0 :(得分:1)

发生segflaut是因为未创建GLFW窗口。所以window是一个空指针。为了便于调试,您应该在调用glfwMakeContextCurrent()之前在代码中进行检查。例如:

GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
if (!window)
{
    glfwTerminate();
    std::cerr << "Failed to create glfw window \n";
    exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);

现在,要解决实际问题,您需要指定您的上下文应该向前兼容,如GLFW faq

中所述
  

OS X当前支持的唯一OpenGL 3.x和4.x上下文是前向兼容的核心配置文件上下文。支持的版本是10.7 Lion上的3.2和10.9 Mavericks上的3.3和4.1。在所有情况下,您的GPU需要支持指定的OpenGL版本才能成功创建上下文。

     

要创建OpenGL 3.2或更高版本的上下文,您应该设置以下提示:

 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

如果您想了解有关向前兼容性的更多详细信息,请查看OpenGL文档。

此外,您的编译命令不起作用,因为它不会调用GLFW所需的所有框架,如GLFW文档中building section中所述。