実際、 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
}