为啥在我安装 Mountain Lion 时 OpenGL 会降级?

Posted

技术标签:

【中文标题】为啥在我安装 Mountain Lion 时 OpenGL 会降级?【英文标题】:Why was OpenGl downgraded when I installed Mountain Lion?为什么在我安装 Mountain Lion 时 OpenGL 会降级? 【发布时间】:2013-01-20 21:21:43 【问题描述】:

编辑:已解决。这是一个 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 直到窗口成功打开后才会起作用。

【问题讨论】:

Mountain Lion 没有降级 OpenGL。这很可能是 glfw 在错误位置查找版本的问题。 另请参阅related question,了解如何使用 glfw 查看 OpenGL 3.2 功能。 感谢@KurtRevis,但相关问题存在未指定使用哪个 OpenGL 配置文件的问题。我在上面使用的行 `glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);` 记录在 here 以包含核心配置文件。此方法在 Lion 上成功,但现在失败。由于访问不正确,我无法使用 glGetError() 诊断问题(我假设 OpenWindow 失败时未创建上下文)。 【参考方案1】:

从源代码重新编译 GLFW 并将其与静态链接一起使用只能解决我的问题。一些内部错误导致glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 无法正常工作。

【讨论】:

以上是关于为啥在我安装 Mountain Lion 时 OpenGL 会降级?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV可以安装在Mac Mountain Lion上的python virtualenv中吗

在 Mountain Lion 上使用 Homebrew 安装 mcrypt 支持 php54 的问题

从安装程序在 Mountain Lion 上安装 Qt

在 Mountain Lion 上运行 4.3 版的 iOS 应用程序

Xcode 4.5.2 在 Mac OS X Mountain Lion 上不断崩溃?

如何在 Mac OS X Mountain Lion 上编译 libnoise