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

SDL2 - Check if OpenGL context is created

本文关键字:OpenGL 上下文 创建 是否 检查 SDL2      更新时间:2023-10-16

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

OpenGL context already created

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

如果我无法执行此操作,如何绕过此问题?

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
}