在Mac上使用SDL2设置OpenGL 3.3上下文,但无法正常工作。

3

我尝试使用以下代码将OpenGL上下文设置为v3.3,但它创建的是一个4.1上下文。

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);

我是否做错了什么,还是这是Mac的问题?

1
您不需要使用SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG,这是一个已过时的标志,仅用于OpenGL 3.0和3.1版本,对于3.2及以上版本则无关紧要,并且在3.0之前不存在。 - Dietrich Epp
1
还要注意,GLEW在核心上下文中存在一些严重的问题,但在OS X上使用GLEW也不是必需的,因为OS X使用弱链接 - 您只需#include <OpenGL/gl3.h>,并且任何不受支持的函数都将在运行时为空,就像您使用了GLEW一样。 GLEW无法检查核心上下文中扩展的存在,因此在OS X上使用它是没有意义的,除非它碰巧使您的跨平台生活更轻松。 - Dietrich Epp
1个回答

4

OpenGL不能保证当您请求一个OpenGL X.Y上下文时,您会获得确切的OpenGL X.Y上下文。这取决于您使用的驱动程序。

  • 在OS X上,如果您请求一个核心上下文,您将获得硬件和操作系统组合支持的最高版本。如果您请求兼容性上下文,则会获得2.1。

  • 在我的Linux/Mesa系统上,我总是获得3.0兼容性上下文和3.3核心上下文。

  • 在我的Windows/AMD系统上,我得到了完全符合我要求的版本。

如果您的代码假定上下文为3.3,则4.1上下文应该可以正常工作。只需检查GL版本是否>=所需版本,并检查是否需要兼容性上下文。


在发表那条评论之前,我仔细阅读了所有相关规格,以免发布错误的内容;看起来我把我的PDF查看器窗口搞混了。我的错;我已经删除了我的评论。 - datenwolf

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