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 3

1 ответ:

SDL_GL_CONTEXT_PROFILE_CORE

...

...ни один из моих вызовов OpenGL [glMatrixMode, glLoadIdentity, glLoadIdentity, glBegin ] больше не работает...

Все они устарели и не будут работать в основном контексте.

Если вы хотите продолжать использовать основной контекст, вам придется переписать свою программу, чтобы не использовать устаревшие функции.