1

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

4

1 回答 1

2

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

于 2013-01-20T23:54:39.487 回答