Я создаю приложение с использованием SDL2 & OpenGL, и он отлично работал на 3 разных компьютерах. Но на другом компьютере (обновленный Arch Linux) это не так, и он вылетает с этой ошибкой:
OpenGL context already created
Итак, мой вопрос: как я могу проверить, был ли контекст OpenGL уже создан? И потом, если он уже создан, как мне получить ручку для него?
Если я не могу сделать это, как мне обойти эту проблему?
SDL2 делает не фактически создайте контекст OpenGL, не спрашивая его. Однако, если вы попросите его создать контекст OpenGL, когда OpenGL вообще не работает, SDL2 захочет, эм, немного фристайл. (Фактическая причина в том, что он плохо выполняет проверку ошибок, поэтому, если X не удается создать контекст OpenGL, он предполагает, что это потому, что контекст уже создан)
Итак, чтобы ответить на третий вопрос («как мне обойти эту проблему»), вы должны исправить OpenGL, прежде чем пытаться его использовать. Цифры, верно?
Чтобы ответить на первый и второй, ну, я не знаю ни одного вызова API, но вы можете сделать это немного по-другому:
SDL_Window* window = NULL;
SDL_GLContext* context = NULL; // NOTE: This is a pointer!
...
int main(int argc, char** argv) {
// Stuff here, initialize 'window'
*context = SDL_GL_CreateContext(window);
// More stuff here
if (context) {
// context is initialized!! yay!
}
return 2; // Just to confuse people a bit =P
}
Других решений пока нет …