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

我正在运行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)通过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提交一个错误,看看是否有帮助。


SDL_GL_CONTEXT_PROFILE_CORE

...

...我的OpenGL调用[ glMatrixMode,glLoadIdentity,glLoadIdentity,glBegin ]都无法工作......

这些都被弃用,并且不会在Core上下文中工作。

如果您想继续使用Core上下文,则必须重新编写程序以不使用已弃用的功能。

链接地址: http://www.djcxy.com/p/38459.html

上一篇: SDL Can't load OpenGL Context over 2.1 Mac OSX Yosemite

下一篇: OpenGL unable to draw triangle with VBO