【问题标题】:GLFW opens OpenGL 3.2 context but Freeglut can't - why?GLFW 打开 OpenGL 3.2 上下文但 Freeglut 不能 - 为什么?
【发布时间】:2013-02-26 15:50:59
【问题描述】:

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

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

【问题讨论】:

  • 有确切的问题,但我使用的是 XQuartz 中包含的 FreeGlut (opt/x11/lib opt/x11/include)。你解决问题了吗?
  • 同样的问题 - 你能解决问题吗?
  • 你们中有人解决了这个问题吗?我有同样的问题。我正在使用 XQuartz 中包含的 freeGlut
  • 最好的办法就是坚持使用 glfw,我在 OS X 10.10 上遇到了同样的问题。代码编译得很好,但是在运行时它会崩溃。设置 XQuartz。尝试获得 3.2 版,但没有成功

标签: macos opengl glut freeglut glfw


【解决方案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 配置文件会破坏一些 existing GL applications

This post suggests 使用 GLFW(或者苹果的 GLUT.framework,如果还有这样的东西)

This page 解释 OSX 上的 GL 堆栈并确认 GLX 的 2.1 问题。

【讨论】:

  • 很抱歉,但看不出这与我的问题有何关系。正如我所展示的 - 它确实可以与 GLFW 一起使用,它在我系统上的 XQuartz 之上运行,因此它确实支持 3.2 上下文。
  • 很抱歉,但看不出这与我的问题有何关系。正如我所说 - OpenGL 3.2 可以与 GLFW 一起使用,它运行在我系统上的 XQuartz 之上,所以它确实支持 3.2 上下文。我唯一的问题是我想使用 freeglut,纯粹是因为它更方便。但如果这不可能,那么我将使用 GLFW 进行开发。但请不要告诉我不可能获得 3.2 的上下文,因为我已经有了。
  • glfw 也有一个Cocoa and Carbon port,你确定它运行在 XQuartz 之上吗?
【解决方案2】:

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

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

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

请注意,使用兼容性配置文件唯一会失去的就是检查已弃用的功能。所有新的核心功能都应该可以正常工作。

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

【讨论】:

    【解决方案3】:

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

    glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2021-10-04
      • 2019-04-06
      • 1970-01-01
      相关资源
      最近更新 更多