Macos 无法在mac mavericks上使用GLSL 330

Macos 无法在mac mavericks上使用GLSL 330,macos,opengl,glew,freeglut,Macos,Opengl,Glew,Freeglut,我正在学习OpenGL,材质在着色器中使用330版。我可以成功编译它,但当我尝试运行它时,它会抱怨330版本不受支持 在我的源代码中,我在Xcode中使用免费glut和OpenGL框架。如果我也包括这两行代码 glutInitContextVersion(3,1); glutInitContextFlags(GLUT_核心_配置文件) 它不能被编译 我的mac电脑是MacBook Pro,2012年年中。根据应用,它应该支持OpenGL4.1 那么如何编译版本330着色器呢?OSX要求您请求一个

我正在学习OpenGL,材质在着色器中使用330版。我可以成功编译它,但当我尝试运行它时,它会抱怨330版本不受支持

在我的源代码中,我在Xcode中使用免费glut和OpenGL框架。如果我也包括这两行代码

glutInitContextVersion(3,1); glutInitContextFlags(GLUT_核心_配置文件)

它不能被编译

我的mac电脑是MacBook Pro,2012年年中。根据应用,它应该支持OpenGL4.1


那么如何编译版本330着色器呢?

OSX要求您请求一个,以便接收3.3或更高版本的上下文。这是因为3.2最终删除了3.0中不推荐使用的功能

因此,如果要使用#版本330着色器,则代码应如下所示:

glutInitContextVersion(3,2);
glutInitContextFlags(GLUT_CORE_PROFILE);

编辑显然X11不支持OS X上高于2.1的OpenGL。因此,我建议您切换到。

当您尝试添加gluInitContextVersion和gluInitContextFlags时,您遇到了什么编译器错误?似乎可以成功编译。但是当我运行它时,它抱怨说#版本330不受支持。OpenGL 3.1中没有核心配置文件(或任何相关的配置文件)上下文。你需要3,2,核心。我已经在我的源代码中添加了它。但它仍然不起作用。源代码可以成功编译。但当我运行它时,它会抱怨:失败请求的X错误:BadRequest(无效的请求代码或没有这样的操作)失败请求的主要操作码:34(X_UngrabKey)失败请求的序列号:29输出流中的当前序列号:29我不知道这是什么原因。@Negelis:这也是你的问题的一部分。。。要在OS X上获得3.2+核心概要文件上下文,必须使用本机CGL或NSOpenGL API。如果您的软件是通过传统的X服务器运行的,那么您将永远只能使用OS X上的OpenGL 2.1。我想知道为什么它被配置为使用X服务器而不是石英;无论你从哪里获得FreeGLUT端口,他们都使用X而不是OSX的本机API构建它。顺便说一句,X操作码是错误的。GLX Major操作码34是
glXCreateContextAttribsARB
,这是其他平台用来请求
GLX\u上下文\u Major\u版本\u ARB
@Negelis的操作码:但它报告错误的操作码并不奇怪,因为它对
GLX\u ARB\u create\u context
GLX\u ARB\u create\u context\u profile
扩展一无所知。同样,这里重要的是为OSX找到一个FreeGLUT端口,该端口不是构建在X之上的,或者更好地使用GLFW3或SDL2之类的东西。苹果不支持X,只支持在Quartz上分层的兼容X服务器,以简化现有UNIX应用程序的移植。此X服务器公开的GL功能在GL 2.1中被冻结,它也不理解新的GLX扩展。@科尔曼:非常感谢!我想我现在更清楚这里出了什么问题。@MichaelMorris:我一直在指XQuartz:)这是苹果的X服务器,它是在石英之上分层的。它没有实现GLX中更新的东西,在OSX上获得3.2+内核上下文的唯一方法是使用CGL或NSOpenGL。无法使用GLX和AGL,因为在OS X 10.7中添加GL配置文件时,它们从未更新。在UX平台上,FreeGLUT通常使用GLX,但如果它是OSX本机的,它可能会使用NSOpenGL,因为这是OSX上唯一一个可以同时进行窗口渲染和全屏渲染的本机API。