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

6

我正在使用SDL2和OpenGL创建一个应用程序,在3台不同的计算机上运行良好。但是在另一台计算机(更新的Arch Linux)上,它无法正常工作,并且出现以下错误导致崩溃:

OpenGL context already created

那么我的问题是:我如何检查OpenGL上下文是否已经创建?如果已经创建,我该如何获取其句柄?

如果无法做到这一点,我该如何绕过此问题?

1个回答

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接