SDL не может загрузить контекст OpenGL через 2.1 Mac OSX Yosemite
Я использую Mac OSX Yosemite версии 10.10 и последнюю версию SDL (2.0.3).
Я пытаюсь использовать по крайней мере OpenGL версии 3+. Не делая ничего, моя версия OpenGL возвращает 2.1 INTEL-10.0.86
.
Команды OpenGL работают, но это явно не та версия, которая мне нужна.
Итак, после некоторых исследований я нашел способ изменить версию с SDL через функцию SDL_GL_SetAttribute(SDL_GLattr attr, int value)
после инициализации SDL, но до определения контекста. Так вот мой код:
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
.
--Edit--
После проведения некоторых дополнительных исследований, если OpenGL возвращает 1282 после каждого вызова контекст не инициализируется правильно. Это приводит меня к мысли, что это может быть ошибка с SDL не правильно создавая контекст? (Честно говоря, я не знаю так много, поэтому я иду на риск). Я отправлю ошибку в SDL и посмотрю, поможет ли это чему-нибудь.
1 ответ:
SDL_GL_CONTEXT_PROFILE_CORE
...
...ни один из моих вызовов OpenGL [glMatrixMode, glLoadIdentity, glLoadIdentity, glBegin ] больше не работает...
Все они устарели и не будут работать в основном контексте.
Если вы хотите продолжать использовать основной контекст, вам придется переписать свою программу, чтобы не использовать устаревшие функции.