GLFW打开OpenGL 3.2上下文,但Freeglut不能 - 为什么?

gam*_*ing 8 opengl macos glut freeglut glfw

我正在使用Mac,我已经编译并安装了FreeGlut,但我似乎无法使用它获得OpenGL 3.2上下文.但是,在使用GLFW时,我可以毫无问题地获得它.所以在GLFW中,这段代码完全正常:

    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)
Run Code Online (Sandbox Code Playgroud)

但是使用FreeGlut,这段代码失败了(打开glutCreateWindow):

glutInitContextVersion (3, 2);
glutInitContextProfile(GLUT_CORE_PROFILE);  
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200);
int window = glutCreateWindow (argv[0]);
Run Code Online (Sandbox Code Playgroud)

它失败的错误是:

X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  34 (X_UngrabKey)
  Serial number of failed request:  29
  Current serial number in output stream:  29
Run Code Online (Sandbox Code Playgroud)

我在MacOS X 10.8 Mountain Lion上运行,使用Intel HD4000显卡,安装了XQuartz作为我的X11服务器,并从源代码编译和安装了FreeGlut 2.8.

有谁知道可能是什么问题?

wal*_*lly 1

在 10.8 和 10.7 中,如果您在设置 GL 上下文时明确调用 GL 3.2,则可以使用它。Apple 将此称为“Core Profile”,以区别于“Legacy Profile”(即 GL 2.1)。

我在 OSX 上使用 Wine 时遇到了这个问题,它不支持 OpenGL 3.2。我的理解是,X11服务器(Apple X11或XQuartz)目前没有实现3.2支持,也没有开关可以翻转某处来启用它。这可能是出于兼容性问题,因为 3.2 配置文件将破坏一些现有的 GL 应用程序

这篇文章建议使用GLFW(或者苹果的GLUT.framework,如果仍然有这样的东西)

本页解释了 OSX 上的 GL 堆栈并确认了 GLX 的 2.1 问题。