SDL2 - 检查是否已创建OpenGL上下文

MiJ*_*Jyn 6 c++ linux opengl openglcontext sdl-2

我正在使用SDL2和OpenGL创建一个应用程序,它在3台不同的计算机上运行良好.但是在另一台计算机(更新的arch linux)上,它没有,它崩溃了这个错误:

OpenGL context already created
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何检查是否已经创建了OpenGL上下文?然后,如果它已经创建,我该如何获得它的处理?

如果我不能这样做,我该如何绕过这个问题?

MiJ*_*Jyn 5

事实上,如果您没有要求, 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
}
Run Code Online (Sandbox Code Playgroud)