SDL2 - проверить, создан ли контекст OpenGL

Я создаю приложение с использованием SDL2 и OpenGL, и оно отлично работает на 3 разных компьютерах. Но на другом компьютере (обновленный Arch Linux) это не так, и он вылетает с этой ошибкой:

OpenGL context already created

Итак, мой вопрос: как я могу проверить, был ли контекст OpenGL уже создан? И потом, если он уже создан, как мне получить ручку для него?

Если я не могу сделать это, как я могу обойти эту проблему?

1 ответ

Решение

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
}
Другие вопросы по тегам