8

我在 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)

但是使用 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。

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

4

3 回答 3

1

在 10.8 和 10.7 中,如果您在设置 GL 上下文时显式调用它,则可以使用 GL 3.2。Apple 将此称为“核心配置文件”,以区别于 GL 2.1 的“传统配置文件”。

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

这篇文章建议使用 GLFW(或者如果还有这样的东西,可能是 Apple 的 GLUT.framework)

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

于 2013-02-26T19:11:18.247 回答
0

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

不幸的是,这包括许多会破坏严格的 CORE/FORWARD 兼容实现的功能。

通常,如果您请求上下文而不指定版本或配置文件,您将获得驱动程序和 GL 工具包的组合所能提供的最佳效果,这通常是兼容性配置文件,而不是核心配置文件。

请注意,使用兼容性配置文件唯一会丢失的是对已弃用功能的假定检查。所有新的核心功能都应该毫无问题地工作。

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

于 2014-02-23T23:16:22.493 回答
0

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

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);
于 2014-07-14T15:01:08.663 回答