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

8

我正在使用Mac电脑,已经编译并安装了FreeGlut,但是似乎无法通过它获取OpenGL 3.2上下文。然而,在使用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)

但使用 FreeGlut 时,这段代码会失败(在 glutCreateWindow 上)。
glutInitContextVersion (3, 2);
glutInitContextProfile(GLUT_CORE_PROFILE);  
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200);
int window = glutCreateWindow (argv[0]);

它报错的内容是:
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

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

有人知道可能出现什么问题吗?


我遇到了同样的问题,但我正在使用包含在XQuartz中的FreeGlut(opt/x11/lib opt/x11/include)。你解决了这个问题吗? - Christoph
这里也有同样的问题 - 你能解决这个问题吗? - M-V
你们中有人解决了这个问题吗?我也遇到了同样的问题。我正在使用包含在XQuartz中的freeGlut。 - ammar26
最好还是坚持使用glfw,我在OS X 10.10上遇到了同样的问题。代码可以编译通过,但运行时会崩溃。已安装XQuartz。尝试过升级到3.2版本,但没有成功。 - Joseph
3个回答

1
在10.8和10.7中,如果您在设置GL上下文时显式调用它,则可使用GL 3.2。苹果将其称为“核心配置文件”,以区别于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问题。


很抱歉,但我不明白这与我的问题有什么关系。 正如我所展示的 - 它可以在GLFW上运行,在我的系统上运行在XQuartz之上,因此它确实支持3.2上下文。 - gambiting
对不起,但我不明白这与我的问题有什么关系。 就像我所说的 - 在我的系统上,OpenGL 3.2可以使用GLFW运行,GLFW运行在XQuartz之上,因此它绝对支持3.2上下文。我唯一的问题是我想使用freeglut,纯粹是因为它更方便。但如果不可能,那么我将使用GLFW进行开发。但请不要告诉我无法获得3.2上下文,因为我已经拥有一个。 - gambiting
1
glfw还有一个Cocoa和Carbon端口,你确定它是在XQuartz之上运行吗? - wally

0

你需要包含标志。通常在版本下面。它应该看起来像这样:

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);

0

Freeglut是SGI GLUT Toolkit的扩展实现,除了一些过时的硬件外,它实现了相同的功能。

不幸的是,这包括许多在严格的CORE/FORWARD COMPATIBLE实现中会出现问题的功能。

通常情况下,如果您请求一个上下文而没有指定版本或配置文件,您将得到驱动程序和GL工具包组合可以提供的最佳效果,通常是兼容性配置文件,而不是核心配置文件。

请注意,通过使用兼容性配置文件,您失去的唯一东西是对弃用函数的检查。所有新的核心函数都应该正常工作。

这个freeglut的问题不仅限于苹果,还在Linux下使用一些Gallium驱动程序时表现出来。目前尚不清楚是否有任何短期意图来纠正这个问题,因此如果您需要使用CORE/FORWARD COMPATIBLE,您应该考虑切换到GLFW或SDL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接