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