我正在使用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。
有谁知道可能是什么问题?
答案 0 :(得分:1)
在10.8和10.7中,如果在设置GL上下文时明确要求GL 3.2,则可以使用GL 3.2。 Apple将其称为“核心配置文件”,以区别于GL 2.1的“Legacy Profile”。
我在OSX上使用Wine遇到了这个问题,它不支持OpenGL 3.2。我的理解是X11服务器(Apple X11或XQuartz)目前没有实现3.2支持,也没有一个开关可以在某处翻转以启用它。这可能是兼容性问题,因为3.2配置文件会破坏一些existing GL applications
This post suggests使用GLFW(如果还有这样的东西,可能是Apple的GLUT.framework)
This page解释了OSX上的GL堆栈并确认了GLX的2.1问题。
答案 1 :(得分:0)
Freeglut是SGI GLUT工具包的扩展实现,并且(除了过时硬件之外的一些例外)实现了相同的功能。
不幸的是,这包括许多在严格的CORE / FORWARD COMPATIBLE实现中会破坏的功能。
通常,如果您请求上下文而不指定版本或配置文件,您将获得驱动程序和GL工具包的组合可以提供的最佳功能,这通常是兼容性配置文件,而不是核心配置文件。
请注意,通过使用兼容性配置文件,您唯一丢失的是假定检查已弃用的函数。所有新的核心功能都应该没有问题。
freeglut的这个问题不仅限于Apple,它也在Linux下使用一些Gallium驱动程序。目前尚不清楚是否存在纠正此问题的短期意图,因此如果您需要使用CORE / FORWARD COMPATIBLE,您应该切换到GLFW或SDL。
答案 2 :(得分:0)
您需要包含该标志。通常在版本下。看起来应该是这样的:
glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);