编辑:已解决。这是一个 GLFW 问题,与 Mountain Lion 或 OpenGL 无关。
我之前在我的 2009 Macbook Pro 上使用过 Lion。在 XCode 中,以下工作没有问题:
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE); // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"
int major, minor, rev;
glfwGetGLVersion(&major, &minor, &rev);
fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);
然后打印出来OpenGL version received: 3.2
。在我升级到 Mountain Lion 之后,上面的代码将无法工作(挂断在ALLEGE,因为glfwOpenWindow 返回false)。去除所有 GLFW 窗口提示,例如:
ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE); // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"
int major, minor, rev;
glfwGetGLVersion(&major, &minor, &rev);
fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);
允许操作系统选择使用哪个版本的 OpenGL。上面的代码编译并运行,但打印OpenGL version received: 2.1
到控制台。
我说:“wft?” 并查看系统信息应用程序以获取更多信息。框架部分告诉我,我拥有的 OpenGL 框架是 1.8.6。
现在,如果我的 OpenGL 框架确实被降级了,我会感到各种困惑和不安。我知道没有办法手动升级我的框架。谁能帮我理解发生了什么?
Edit1:使用 OpenGL 扩展 Viewer.app 通知我我的 OpenGL 版本是2.1 NVIDIA-8.0.61
Edit2:问题似乎与我的项目没有使用正确的配置文件(兼容性而不是核心)有关,但是当我使用 glfw 的提示来指定核心时,例如
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
随后的调用glfwOpenWindow()
失败。我不知道如何诊断这个问题,因为 glGetError 直到窗口成功打开后才会起作用。