2013-10-23 32 views
6

Tworzę aplikację przy użyciu SDL2 & OpenGL, i to działało dobrze na 3 różnych komputerach. Ale na innym komputerze (zaktualizowany linux arch), to nie ma, i to wywala z tego błędu:SDL2 - Sprawdź, czy kontekst OpenGL został utworzony

OpenGL context already created 

Więc moje pytanie brzmi: Jak mogę sprawdzić, czy kontekst OpenGL został już utworzony? A jeśli już został utworzony, w jaki sposób uzyskać do niego uchwyt?

Jeśli nie mogę tego zrobić, w jaki sposób pomijam ten problem?

Odpowiedz

3

SDL2 ma nie tak naprawdę tworzy kontekst OpenGL bez pytania o jego utworzenie. Jeśli jednak poprosisz go o utworzenie kontekstu OpenGL, gdy OpenGL w ogóle nie działa, SDL2 lubi, erm, freestyle nieco. (Rzeczywistym powodem jest to, że robi złe zadanie podczas sprawdzania błędów, więc jeśli X nie tworzy kontekstu OpenGL, zakłada, że ​​jest to spowodowane utworzeniem kontekstu)

Aby odpowiedzieć na trzecie pytanie ("jak pomijam ten problem "), musisz naprawić OpenGL zanim spróbujesz go użyć. Liczby, prawda?

Aby odpowiedzieć na pierwsze i drugie, dobrze, nie wywołanie API, które znam ... ale można zrobić to w nieco inny sposób:

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 
}