6

SDL2 と OpenGL を使用してアプリケーションを作成していますが、3 台の異なるコンピューターで正常に動作しました。しかし、別のコンピューター (更新された arch Linux) ではそうではなく、次のエラーでクラッシュします:

OpenGL context already created

だから私の質問は: OpenGL コンテキストが既に作成されているかどうかを確認するにはどうすればよいですか? そして、それがすでに作成されている場合、どうすればハンドルを取得できますか?

これができない場合、どうすればこの問題を回避できますか?

4

1 に答える 1

5

実際、 SDL2 は、作成を要求しない限り、OpenGL コンテキストを作成しません。ただし、OpenGL がまったく機能しない場合に OpenGL コンテキストを作成するように依頼すると、SDL2 は少しフリースタイルを好みます。(実際の理由は、エラー チェックで悪い仕事をしているためです。そのため、X が OpenGL コンテキストの作成に失敗した場合、コンテキストが既に作成されているためと見なされます)

したがって、3 番目の質問 (「この問題を回避するにはどうすればよいか」) に答えるには、OpenGL を使用する前に修正する必要があります。数字ですよね?

1 番目と 2 番目の API 呼び出しに答えるには、私が知っている 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
}
于 2013-10-23T03:17:35.290 に答える