SDL 无法在 2.1 Mac OSX Yosemite 上加载 OpenGL 上下文

SDL Can't load OpenGL Context over 2.1 Mac OSX Yosemite

本文关键字:Yosemite 加载 OpenGL 上下文 OSX Mac SDL      更新时间:2023-10-16

我正在运行Mac OSX Yosemite 10.10版和SDL(2.0.3)的最新版本。

我正在尝试至少使用OpenGL版本3+。在不执行任何操作的情况下,我的OpenGL版本返回2.1 INTEL-10.0.86

OpenGL命令可以工作,但这显然不是我需要的版本。

因此,在做了一些研究之后,我发现用SDL更改版本的方法是在初始化SDL之后,但在定义上下文之前,通过SDL_GL_SetAttribute(SDL_GLattr attr, int value)函数。这是我的代码:

if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
    printf("Failed to initialize SDL. Error (SDL): %s.n", SDL_GetError());
    return false;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, (SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN));
if (!window)
{
    printf("Failed to create the window. Error (SDL): %s.n", SDL_GetError());
    return false;
}
context = SDL_GL_CreateContext(window);

使用此代码,OpenGL版本将报告4.1 INTEL-10.0.86。这会很好,但我的OpenGL调用都不起作用了,所以我在调用函数后检查OpenGL错误,它返回1282

奇怪的是,当我把代码改成这个时

...
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
//SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
...

它给出相同的输出4.1 INTEL-10.0.86,并返回相同的OpenGL错误(1282),并且OpenGL函数都不起作用。

我的最后一次尝试也失败了,结果不同。这是我的代码:

...
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
...

返回的OpenGL新版本是null,但如果我将major_version更改为2,将minor_version改为1,它将返回到我的原始版本2.1 INTEL-10.0.86

有人知道这个问题的解决办法吗?

--编辑--

在做了一些额外的研究之后,如果OpenGL在每次调用后返回1282,则上下文没有正确初始化。这让我相信这可能是SDL没有正确创建上下文的错误?(老实说,我不知道那么多,所以我要冒险了)。我将向SDL提交一个bug,看看这是否有帮助。

SDL_GL_CONTEXT_PROFILE_CORE

我的OpenGL调用[glMatrixMode、glLoadIdentity、glLoadIdentity、glBegin]都不再工作。。。

这些都是不推荐使用的,在Core上下文中不起作用。

如果你想继续使用核心上下文,你必须重新编写你的程序,不要使用不推荐使用的功能。